java基础知识学习日记4

学习内容:包装类及其用法,toString方法的用法,==equals的区别,staticfinalabstract关键字的用法、接口的概念和作用,定义接口的语法和实现接口,接口和抽象类的联系与区别,面向接口编程,内部类的概念和定义语法,非静态内部类和静态内部类,创建内部类的对象和扩展内部类,匿名内部类和局部内部类,Lambda表达式与函数式接口,方法引用和构造器引用,枚举类的概念和作用,枚举类的成员变量、方法和构造器,实现接口的枚举类,包含抽象方法的枚举类,垃圾回收和对象finalize方法,强制垃圾回收的方法,对象的软、弱和虚引用,JAR文件的用途和创建JAR文件

学习笔记:

1、把字符串类型的值转换为基本类型的值有两种方式。利用包装类提供的parsexxxString str)静态方法。利用包装类的构造器。

2、常量池专门用于管理在编译时被确定并被保存在已编译的.class文件中的一些数据,它包括了关于类、方法、接口中的常量,还包括字符串常量。

3、很多语言都不允许通过对象访问类变量,对象只能访问实例变量,类变量必须通过类来访问。

4、对static关键字而言,有一条非常重要的规则:类成员不能访问实例成员。因为类成员是属于类的,类成员的作用域比实例成员的作用域更大,完全可能出现类成员已经初始化完成,但实例成员还不曾初始化的情况,如果允许类成员访问实例成员将会引起大量错误。

5fainal修饰的成员变量必须由程序员显示的指定初始值。类变量:必须在静态初始化块中指定初始值或声明该类变量时指定初始值,而且只能在这两个地方的其中之一指定。实例变量:必须在非静态初始化块、声明该实例变量或构造器中指定初始值,而且只能在三个地方的其中之一指定。

6、与普通成员变量不同的是,final成员变量必须由程序员显示初始化,系统不会对final成员进行隐式初始化。

7、对于引用类型变量而言,它保存的仅仅是一个引用,final只保证这个引用类型变量所引用的地址不会改变,即一直引用同一个对象,但这个对象完全可以发生改变。

8、对一个final变量而言,不管是类变量、实例变量还是局部变量,只要满足三个条件,这个final变量就不再是一个变量,而相当于一个直接量。使用final修饰符修饰。在定义该final变量时指定了初始值。该初始值可以在编译时就被确定下来。

9final修饰符的一个重要用途就是定义宏变量。当定义final变量时就为该变量指定了初始值,而且该初始值可以在编译时就确定下来,那么这个final变量本质上就是一个宏变量,编译器会把程序中所有用到该变量的地方直接替换成该变量的值。

10、对于实力变量而言,即可以在定义该变量时赋初始值,也可以在非静态初始化块、构造器中对它赋初始值,在这三个地方制定初始值的效果基本一样。但对于final实例变量而言,只有在定义该变量时指定初始值才会有宏变量的效果。

11、如果需要创建自定义的不可变类,可遵守如下规则。使用privatefinal修饰符来修饰该类的成员变量。提供带参数构造器,用于根据传入参数来初始化类里的成员变量。仅为该类的成员变量提供getter方法,不要为该类的成员变量提供setter方法,因为普通方法无法修改final修饰的成员变量。如果有必要,重写Object类的equals()和hashCode()方法。

12、盲目乱用缓存也可能导致系统性能下降,缓存的对象会占用系统内存,如果某个对象只使用一次,重复使用的概率不大,缓存该实例就弊大于利,反之就利大于弊。

13、抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义成抽象类,抽象类里可以没有抽象方法。抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。即使抽象类里不包含抽象方法。抽象类可以包含成员变量、方法、构造器、初始化块、内部类五种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。含有抽象方法的类只能被定义成抽象类。

14、当使用abstract修饰类时,表明这个类只能被继承,当使用abstract修饰方法时,表明这个方法必须由子类重写。而final修饰的类不能继承,修饰的方法不能重写。因此两个修饰符不能同时使用。

15staticabstract并不是绝对互斥的。两个修饰符虽然不能同时修饰方法,但是可以同时修饰内部类。

16abstract关键字修饰的方法必须被其子类重写才有意义,否则这个方法永远不会有方法体,因此abstract方法不能定义为private访问权限。

17修饰符可以是public或者省略,如果省略了public访问控制符,则默认采用包权限访问控制符,即只有在相同包结构下才可以访问该接口。接口名应与类名采用相同的命名规则,即如果仅从语法角度来看,接口名只要是合法的标示符即可;如果要遵守java可读性规范,则接口名应由多个有意义的单词连缀而成,每个单词首字母大写,单词与单词之间无须任何分隔符。接口名通常能够使用形容词。一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类。

18、接口的继承和类继承不一样接口完全支持多继承,即一个接口可以有多个直接父接口。和类继承相似,子接口扩展某个父接口,将会获得父接口里定义的所有抽象方法、常量。

19、接口主要有如下用途:定义变量,也可用于进行强制类型转换。调用接口中定义的常量。被其他类实现。

20、接口和抽象类很像,它们都具有如下特征。接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承。接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。

21、接口和抽象类在用法上也存在如下差别。接口里只能包含抽象方法和默认方法,不能为普通方法提供方法实现,抽象类则完全可以包含普通方法。接口里不能定义静态方法,抽象类里可以定义静态方法。接口里只能定义静态常量,不能定义普通成员变量,抽象类里既可以定义普通成员变量,也可以定义静态常量。接口里不包含构造器,抽象类里可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。接口里不能包含初始化块,但抽象类则完全可以包含初始化块。一个类只能有一个直接父类,包括抽象类,但一个类可以实现多个接口,通过实现多个接口可以弥补java单继承的不足。

22、内部类和外部类的区别:内部类比外部类可以多使用三个修饰符:privateprotectedstatic非静态内部类不能拥有静态成员。

23、非静态内部类里不可以有静态初始化快,但可以包含普通初始化块。非静态内部类普通初始化块的作用与外部类初始化块的作用完全相同。

24、非静态内部类的子类不一定是内部类,它可以是一个外部类。但非静态内部类的子类实例一样需要保留一个引用,该引用指向其父类所在外部类的对象,也就是说,如果有一个内部类子类的对象存在,则一定存在与之对应的外部类对象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值