JavaSE--面向对象

来源:互联网 发布:离线泰语翻译软件 编辑:程序博客网 时间:2024/04/26 10:22

面向过程和面向对象的理解  (个人理解)

当程序为了实现某些功能时,一一调用这些功能方法,这种实现方式可以称之为面向过程。而面向对象的出现是更符合人们思考习惯的思想,比如我们要打电话,会直接拿起手机并使用手机的语音通话功能,当想做PPT时,会打开电脑并使用电脑里的办公软件功能,即面向对象的思想是为了实现某种细节功能时,直接考虑使用能实现该功能的事物即可。面向过程中更多的体现的是执行者,而面向对象中更多的体现是指挥者,指挥对象做事情。

面向对象在需求中的应用重点是找到需求里的对象,而一般情况名词表示的大多数是对象,对对象的描述,就是明确对象具有的属性和方法。通过new方法可以创建该事物的具体对象,new创建的对象存储在堆内存空间中,实现某种需求是直接调用该对象所拥有的功能。

类及对象  

Java中通过类来描述事物,属性和行为是该事物的成员,即在代码中的体现分别为变量和函数。对象是类创建的实例,通过该对象调用具有的属性和行为。例如机动车是一个类,私人轿车、起重机、警车等等属于机动车的具体对象,而实现某些功能是通过具体对象来完成的。

对类进行定义时,属性都私有化,并提供setXxx 和getXxx方法对其进行访问,可以在setXxx 方法中加入逻辑判断,但在实际项目中并不在setXxx 中加入逻辑判断,而是使用相关技术在赋值处进行逻辑判断。

成员变量和局部变量的区别:

1.定义的位置不同,成员变量定义在类中,局部变量定义在方法中以及语句里;2.内存中的位置不同,成员变量存储在堆内存的对象中,局部变量存储在栈内存的方法中;3. 生命周期不同,成员变量随着对象的出现而出现,随着对象的消失而消失,局部变量随着的方法的运行而出现,随着方法的弹栈而消失;4. 初始化不同,成员变量因为在堆内存中,所有默认初始化值,局部变量没有默认初始化值,必须初始化后才可以使用。

匿名对象 

匿名对象是对象的简化形式匿名对象两种使用情况当对对象方法仅进行一次调用的时匿名对象可以作为实际参数进行传递

封装

封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式;面向对象三大特征:封装、基层、多态;函数和类都是封装的具体表现;

好处:1. 提高了代码的复用性;2. 隐藏了实现细节,还要对外提供可以访问的方式,便于调用者的使用;3. 提高了安全性。

构造函数

要在创建对象实例时就有了某些初始化的值,而使用到的便是构造函数这一方法。

自定义构造函数需满足的条件:没有返回值类型和具体的返回值,构造函数名称和类名一致;在不自定义构造函数的类编译时会有默认的构造函数,且其参数为空,如果定义了指定的对象初始化过程,默认的就不添加了。

注意:1. 一个类中可以有多个构造函数,它们的存在是以重载的形式体现的;2. 构造函数中也是有return语句的,用于结束初始化动作的;3. 构造函数是能被private修饰。

构造函数和一般函数的区别:1. 写法不同;2 . 运行上有差别,对象一创建就会调用对应的构造函数,一般方法是对象创建后,才会调用所需的一般函数;3. 构造函数在对象创建时,仅调用一次(初始化动作只做一次,而且先执行),而一般方法可以被对象调用多次。

this关键字在构造函数中的使用,this关键字是由于记录对象在堆中的地址,并通过this关键字来明确被初始化的对象,即对象调用了this关键字所在函数,this关键字就代表哪个对象;当构造函数内的成员变量和局部变量同名时,可以使用this关键字来标识成员变量;

Person(String name,int age){this.name = name;//this.name 表示成员变量,name表示构造函数的局部变量;this.age = age;}

静态变量

当同类对象具有某一共同的属性值时,不需要在堆中重复开辟该属性空间,可以使用类名调用显示该属性,则只需把该属性在类中定义为静态变量即可,这样就优化了内存,该相同的数据被对象共享。

静态关键字的特点:1.静态成员优先于对象存在,被对象共享; 2.静态成员可以直接类名调用,多一个调用方式;3.静态成员所属于类,所以它是随着类的加载而加载,随着类的消失而消失。

静态变量有两次初始化: 一次默认初始化,一次显示初始化。

静态变量和成员变量的区别:

  • 所属范围不同
    静态变量所属于类,成员变量所属对象;静态变量也称为:类变量;成员变量也称为实例变量;
  • 调用不同
    静态变量可以被对象和类调用(一般都用类名调用);成员变量只能被对象调用;
  • 加载时期不同
    静态变量随着类的加载而加载;成员变量随着对象的加载而加载;
  • 内存存储区域不同
    静态变量存储在方法区中;成员变量存储在堆内存中;

静态方法

创建对象是为了产生实例,并进行数据的封装,当对象调用的方法不需要访问类中定义的成员变量(非静态)时,可以把该方法定义为静态方法,直接利用"类名.方法名"进行实现,这样就优化了内存空间。

静态是随着类的加载就加载了,也是随着类的消失而消失;静态优先于对象存在,被对象共享;因为静态先存在于内存中无法访问后来的对象的中的数据,所以静态无法访问非静态,即静态方法内部无法书写this、super关键字。

静态代码块

静态代码块的作用是给类进行初始化,随着类的加载而执行,且仅执行一次,也是在静态变量显示初始化以后在执行。

构造代码块

只要创建了对象就是调用构造代码块,其作用是给所有的对象进行初始化,不常见。

局部代码块

局部代码块是为了控制局部变量的生命周期,将局部变量及其调用放在局部代码块中,局部变量使用完后即释放。

设计模式

设计模式是对面向对象设计中反复出现的问题的解决方案,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

单例模式可以保证一个类的对象的唯一性,其基本的实现方法是:1. 直接私有化构造函数,不让其他程序创建的对象初始化;2. 直接在本类中new一个本类对象;3.定义一个功能,其他程序可以通过这个功能获取到本类的对象。

//饿汉式class Single{//2,创建一个本类对象private static /*final*/ Single s = new Single();//1,私有化构造函数private Single(){}//3,定义一个方法返回这个对象public static Single getInstance(){return s;}}//懒汉式//单例的延迟加载方式,面试最多的是懒汉式。class Single2{private static Single2 s2 = null;private Single2(){}public static Single2 getInstance(){if(s2==null)s2 = new Single2();return s2;}}
本系列为传智播客的JavaSE学习笔记及个人想法总结,版权归作者所有,欢迎转载学习,但需在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 
0 0
原创粉丝点击