Java基础——对象与类

1、类:构造对象的模板或者蓝图;有类构造对象的过程称之为创建类的实例。

2、封装:将数据和行为组合在一个包中。对象的数据成为实例域,操纵数据的过程称之为方法。实现封装的关键是不能让类中的方法直接访问其他类的实例域,提高了重用性和可靠性。

3、对象的三个特性:对象的行为、对象的状态、对象标识

4、类之间的关系:依赖(uses-a)、聚合(has-a)、继承(is-a)

5、构造器(构造函数):用来构造并初始化对象的方法。构造器的名字应该与类名相同。
例如:Date()就是一个构造器,在前加new操作符,就可以构造一个Date对象。
注意:一个对象变量并没有实际包含一个对象,而仅仅是引用对象(任何对象变量的值都是对象的引用,new操作符返回值是一个引用)。
*构造器:(1)构造器与类同名;
(2)每个类可以有一个以上的构造器
(3)构造器可以有0个,1个或多个参数;
(4)构造器没有返回值,也就没有返回值类型(但构造函数中也有return语句,用于结束初始化的);
(5)所有的java对象都是在堆中构造,构造器总是伴随着new操作一起调用;
*一般函数和构造函数的区别:
运行上的区别:构造函数在对象创建时执行,且只执行一次;一般函数在对象创建后需要时才被对象调用,可以调用很多次

*Java和C++的区别:
都是面向对象的语言,都支持封装、继承和多态
指针:
Java不提供指针来直接访问内存,程序更加安全
继承:
Java的类是单继承的,C++支持多重继承
Java通过一个类实现多个接口来实现C++中的多重继承
Java中类不可以多继承,但是!!!接口可以多继承
内存:
Java有自动内存管理机制,不需要程序员手动释放无用内存
(可以将Java的对象变量看做C++的对象指针)

6、Date类:表示时间点(对象);LocalDate类表示日历(对象)

7、关键字public:任何类的任何方法都可以调用该关键字修饰的方法;
关键字private:只能本类的方法能够访问这些实例域,其他类的方法不能够读写这些域。
关键字this:表示隐式参数

8、面对对象的三个特征:封装、继承、多态
封装:隐藏实现细节,对外提供公共的访问方式(接口);
封装的优点:(1)提高安全性;
(2)提高了易用性;
(3)提高了重用性;
(4)隔离了变化,降低了耦合性;

9、修饰符final:大多应用于基本类型域或不可变类的域;
修饰符static:若函数没有访问对象的属性时就需要静态修饰,静态域属于类,不属于任何独立的对象
*静态关键字static的特点:
(1)被静态修饰的成员,可以被类名直接调用;
(2)静态成员优先于对象存在;
(3)静态成员随着类的加载而加载,随其消失而消失,生命周期很长;
*注意事项:
(1)静态方法只能访问静态成员,访问有局限性;
(2)静态方法中不能出现this或者super关键字
(3)主函数是静态的;

10、静态常量的使用时机:
(1)对于成员变量,若数据在所有对象的中都是一样的,可直接静态修饰;
(2)对于成员函数,若函数没有访问过对象中的属性数据,那么该函数就是静态的;
*成员变量和静态变量的区别:
(1)名称:成员变量也叫实例变量,静态变量也叫类变量;
(2)内存存储:成员变量存储到堆内存的对象中,静态变量存储到静态区的方法中;
(3)生命周期:成员变量随着对象的出现而出现,消失而消失;静态变量随着类的加载而出现

11、静态方法:一种不能向对象实施操作的方法,也可认为静态方法是没有this参数的方法(在一个非静态方法中,this参数表示该方法的隐式参数)。
*使用情况:
(1)一个方法不需要访问对象的状态,其所需参数都是通过显示参数提供;
(2)一个方法只需要访问类的静态域

12、静态代码块:当类不需要创建对象时,但需要初始化,就可以将部分代码存储到静态代码块中。静态代码块随着类的加载而执行,且只执行一次。

13、参数传递方式:
(1)按值调用:方法接收的是调用者提供的值;
(2)按引用调用:方法接收的是调用者提供的变量地址;
Java语言总是采用按值调用,方法得到的是所有参数值的一个拷贝,方法不能修改给它传递值的任何参数变量的内容。
*方法参数有两个基本类型:
(1)基本数据类型(数字、布尔型);
(2)对象引用(按值传递)
*java中方法参数的使用情况:
(1)一个方法不能修改一个基本数据类型的参数;
(2)一个方法可以修改一个对象参数的状态
(3)一个方法不能让对象参数引用一个新的对象

14、重载:表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数、顺序和类型不同)
*重载的三个条件:参数类型不同、参数个数不同、参数顺序不同。
覆盖:子类对父类方法的一种重写,只能比父类抛出更少的异常,访问权限不能比父类的小。被覆盖的方法不能是private的,否则只是在子类中重新定义了一个方法
*构造函数不可以被继承,所以不可以覆盖,只可以重载。一个类,如果构造函数被private修饰,则为不明确的构造函数,即其不可以被子类继承。

15、默认域初始化:若在构造器中没有显示的给域赋予初值,那么会被自动赋默认值:数值为0,布尔型为false,对象引用为null
*注意:定义的每一个类中都有一个默认无参的构造函数,一旦在类中自定义了构造函数,默认的构造函数就没有了

16、构造器参数名命名方式:
(1)使用单个字符命名
(2)当参数(局部变量)名和成员变量名相同时,可以在名称前加a区分,或者同this关键字区分,即this.name=name;

17、构造器调用另一个构造器
如果构造器的第一个语句为this(…),则这个构造器将调用本类的另一个构造器。
*注意:用于调用构造函数的this语句必须放在构造函数的第一行,因为初始化动作要优先执行。

18、构造代码块:给所有对象进行初始化(构造函数只给对应的对象初始化);
局部代码块:可以控制局部变量的生命周期。

19、调用构造器的具体处理步骤:
(1)所有数据域被初始化为默认值;
(2)按照在类声明的顺序依次执行所有域初始化语句和初始化块;
(3)如果构造器的第一行调用第二个构造器,则执行第二个构造器主体
(4)执行这个构造器主体。

20、创建一个对象的流程:
(1)加载指定的字节码文件进内存;
(2)通过new在堆内存中开辟空间,分配首地址值;
(3)对对象的属性进行默认值初始化;
(4)调用与之对应的构造函数,构造函数压栈;
(5)构造函数执行隐式的super()语句,访问父类中的构造函数;
(6)对属性进行显示初始化;
(7)调用类中的构造代码块;
(8)执行构造函数中的自定义的初始化代码;
(9)初始化完毕,将地址赋值给指定的引用。

21、java有自己的垃圾回收器,不需要人工回收内存。但某些对象会使用内存以外的资源,在回收这些资源时,可以使用finalize方法。Finalize方法将在垃圾回收器清除对象前调用。

22、类的设计技巧
(1)一定要保证数据私有;
(2)一定要保证数据初始化;
(3)不要在类中使用过多的基本类型;
(4)不是所有的域都需要独立的域访问器和域更改器;
(5)将职责过多的类进行分解;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值