JAVA笔记3

26、重载的一种情况:public static void add(int a,char b,double c);和public static void add(int a,double c,char c);重载

27、重载和返回值类型无关

28、即使某个实例为空,它也可以访问它所属类的类成员,但是访问该实例的成员则会引发NullPointException异常

29、如果一个类始终只能创建一个实例,则这个类被称为单例类

30、final 修饰变量时,表示该变量一旦获得了初始值后就不可被改变

31、final 修饰的实例属性,要么在定义该属性的时指定初始值,要么在普通初始化块,或者构造器中为该属性指定初始值,不能再普通方法中指定初始值
    与普通成员变量不同的是,final成员变量(包括实例属性和类属性)必须由程序员显示初始化,系统不会对覅那款成员进行隐式初始化

32、系统不会对局部变量进行初始化,局部变量必须由程序员显示初始化,因此使用final修饰局部变量时既可以定义时指定默认值,也可以不指定默认值,但只能赋值一次,不能重复赋值
    由final修饰的形参不能被赋值

33、final修饰基本数据类型的时候,基本数据类型不能被改变,但是修饰引用类型变量时,他保存的仅仅是一个引用,final只保证这个引用的地址不会改变,即一直引用同一个对象,但这个对象完全可以发生变化
    即使用final修饰的引用类型变量不能被重新赋值,但是可以改变引用型变量所引用对象的内容
34、final修饰的基本数据类型要用常量的命名规则,即全部字母大写;但是引用类型就不用遵循这种命名规范

35、final修饰的方法不能被重写,如果不希望子类重写父类的某个方法则可以用final修饰该方法
    如果子类中定义一个与父类private方法有相同方法名、相同形参列表、相同返回值类型的方法,也不是方法重写,只是重写定义一个新方法。因此,即使使用一个final修饰一个private访问权限的方法,依然可以在
    其子类中定义与该方法具有相同方法名、相同形参列表、相同返回值类型的方法

36、final修饰的方法仅仅是不能被重写,并不是不能被重载,可以重载

37、final修饰的类不可以有子类,即不能被继承

38、java提供的8个包装类和java.lang.String都是不可变类,当创建他们的实例后,其实例属性不可改变

39、抽象方法是只有方法签名,没有方法实现的方法,用abstract修饰符修饰

40、有抽象方法的类只能被定义成抽象类,抽象类里可以没有抽象方法;抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例,即使抽象类里
    不包含抽象方法,这个抽象类也不能创建实例;含有抽象方法的类只能被定义为抽象类;抽象类的构造器不能创建抽象类实例,只能被子类调用

41、final和abstract永远不能同时使用,abstract不能用于修饰构造器、属性、局部变量;static和abstract不能同时使用,因为static修饰的是类方法,使用abstract修饰的方法是没有方法体的,当用类调用
static方法时,由于abstract修饰的方法无方法体,于是调用的时候会出现错误;private不能喝abstract同时使用,因为abstract中的方法必须由子类来重写才有意义

42、接口:更彻底的抽象;定义接口用interface关键字;修饰符可以是public或者省略;一个接口可以有多个直接父接口,但是接口只能继承接口,不能继承类;

43、由于接口里定义的是一种规范,因此接口里不能包含构造器和初始化块的定义。接口里可以包含属性(只能是常量)、方法(只能是抽象实例方法)、内部类(包括内部接口)和枚举类的定义;定义接口成员时,修饰符只能是public或者省略
;接口里定义的属性只能在定义的时候指定默认值(系统会自动增加public static final)

44、一个java源文件中最多只能有一个public接口,如果一个源文件里定义了一个public接口,则该源文件的主文件名必须和该接口名相同

45、接口完全支持多继承,即一个接口可以有多个直接父接口

46、接口不能用于创建实例,但接口能够用于声明引用类型的变量;实现用implements关键字

47、实现类实现接口里的方法时只能使用public访问权限

48、接口不能显示继承任何类,但所有接口类型的引用变量都可以直接赋给Object类型的引用变量

49、接口和抽象的相同点:都不能被实例化,只能用于被其他类实现和继承;都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法
     差别:接口体现的是一种规范,抽象类体现的是一种模板式设计

50、非静态内部类可以直接访问外部类的私有成员,但是外部类不能访问非静态内部类的实例属性,如需要访问,必须显示创建内部类对象
   java不允许在静态内部类里定义静态成员;static修饰内部类可以使内部类变成外部类相关,而不是外部类实例相关,static不可修饰外部类,可以修饰内部类

51、内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类,内部类成员可以直接访问外部类的私有数据,因为内部类被当成其外部类成员,同一个类的成员之间可以相互访问,但是外部类不能访问内部类的实现细节,如内部类的属性

52、匿名内部类适合于那些只需要创建并且使用一次的类

53、内部类可以定义在类中的任何位置,包括方法内,方法内也可以定义定义内部类,方法内定义的内部类称为局部内部类

54、局部内部类和匿名内部类不是类成员

55、外部类只有两种访问权限:包访问权限和公开访问权限;而内部类的上一级程序单元是外部类,所以它具有四个作用域:同一个类、同一个包、父子类和任何位置,因此可以使用四种访问控制权

56、成员内部类(包括静态和和非静态内部类)的class文件总是这种形式:OuterClass$InnerClass.class

57、如果外部类属性、内部类属性与内部类里的方法的局部变量同名,则可以使用this、外部类类名.this作为限定区分

58、非静态内部类成员可以访问外部类的private成员,但是反过来的话就不成立,非静态内部类成员只在非静态内部类范围内可知,并不能被外部类直接使用,若外部类要访问非静态内部类成员,则必须显示创建非静态内部类对象来调用访问其实例成员

59、非静态内部类对象必须寄存在外部类对象中,而外部类对象则不必一定有非静态内部类寄存其中

60、非静态内部类内部静态不能有静态声明,非静态内部类里不可以有静态初始化块,但可以包含普通初始化块

61、静态内部类(类内部类)属于整个外部类,而不是单独属于外部类的某个对象

62、static修饰成员是属于整个类,而不是属于单个对象。外部类的上一级程序单元是包,所以不可以用static修饰;而内部类的上一级程序单元是外部类,使用static修饰可以将内部类变成外部类相关,而不是外部类实例相关,因此static关键字不可以修饰外部类,可以修饰内部类

63、静态内部类可以包含静态成员,也可以包含非静态成员。静态内部类不能访问外部类的实例成员,只能访问外部类的类成员。即使是静态内部类多分实例方法也不能访问外部类的实例成员,只能访问外部类的静态成员。

64、为什么非静态内部类的实例方法不能访问外部类的实例属性呢?
因为静态内部类是外部类的类相关,而不是外部类的对象相关。也就是说当静态内部类的对象存在的时候,并不存在被他寄存的外部类对象,静态内部类的对象里只有外部类的类引用,没有外部类对象的引用,如果此时允许静态内部类实例方法去访问外部类的实例成员的时候,但找不到被寄存的外部类对象,这将引起错误。

65、外部类依然不可以直接访问静态内部类的成员,但是可以使用静态内部类的类名作为调用者来访问静态内部类的类成员,也可以使用静态内部类的对象作为调用者来访问静态内部类的实例成员。

66、java允许在接口中定义内部类,接口里定义的内部类默认使用public static修饰,也就是说接口内部类只能是静态内部类。

67、接口里面可以再定义一个内部接口,但是意义不大,作者未曾遇到过。

68、在外部类以外使用非静态内部类时,定义变量:OutClass.InClass varname;创建一个非静态内部类对象:OutInstance.new InConstructor();一个具体的例子:Out.In in=new Out().new In("测试信息");

69、在外部类以外使用静态内部类,因为静态内部类是类相关,创建内部类对象时无需创建外部类对象,语法:new OutClass.InClassConstructor();

70、如果有一个内部类子类的对象存在,则一定存在与之对应外部类的对象

71、在方法里面定义的内部类为局部内部类,在外部类以外不能使用局部内部类,那么局部内部类无需使用访问控制符和static修饰符修饰。

72、对于局部内部成员而言,不管是局部内部变量还是局部内部类,他们的上一级程序单元是方法,而不是类,使用static修饰他们没有任何的意义。因此局部成员都不能使用static修饰。局部成员的作用域是所在方法,其他程序单元永远也不可能访问一个方法中的局部成员,所以也就不能使用访问控制符

73、局部内部类的Class文件的文件名比内部类的class文件名多了一个数字:OutClass$NInClass.class;这是因同一个类里不可能有两个同名的成员内部类,而同一个类里则可能有两个以上同名的局部内部类,所以java为此添加了一个数字,用于区分。

74、匿名内部类适合创建那种只需要一次使用的类,匿名内部类不能重复使用。

75、匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类或实现一个接口。

76、匿名内部类的两条规则:
①匿名内部类不能是抽象方法,因为创建匿名内部类时,系统会立即创建匿名内部类的对象
②匿名内部类不能定义构造器,因为匿名内部类没有类名,无法定义构造器,但匿名内部类可以定义实例初始化块,通过实例初始化块来完成构造器需要完成的事情

77、当通过实现接口来创建匿名内部类时,匿名内部类也不能显示创建构造器,因为匿名内部类只有一个隐式的无参数构造器,故new接口名后的括号内不能传入参数值;
如果通过继承父类来创建匿名内部类时,匿名内部类将拥有和父类相似(相同的形参列表)的构造器

78、如果匿名内部类需要访问外部类的局部变量,则必须使用final修饰符修饰外部类的局部变量,否则系统报错。

79、闭包:一种能被调用的对象,他保存了创建它的作用域的信息。

80、回调:某个方法一旦获得了内部类对象的引用后,就可以在适合的时候反过来调用外部类的实例方法,所谓回调,就是允许客户类通过内部类的=引用来调用其外部类的方法。

81、垃圾回收机制的几个特征:
①、只负责回收堆内存中的对象,不回收任何物理资源(如数据库连接,网络IO等资源)
②、程序无法精确控制垃圾回收的运行,垃圾回收会在合适的时候进行;
③、垃圾回收机制回收任何对象之前总会调用它的finalize方法,该方法可能是该对象重新复活(让一个引用变量重新引用该对象),从而导致垃圾回收机制取消回收。

82、finalize方法:永远不要主动调用某个对象的finaliaze方法,该方法应该交给垃圾回收机制调用,何时被调用具有不确定性;当JVM执行去活对象的finaliaze方法时,可能使该对象或者系统中其他对象重新变成激活状态;当JVM执行finaliaze方法时出现了异常,垃圾回收机制不会报告异常,程序继续执行。

83、系统对对象有三种引用:强引用、软引用(依赖于某个类)、弱引(依赖于某个类);系统无法通过虚引用来获取被引用对像

84、初始化块和局部成员而言,他们不能使用任何访问控制符,看起来 像 是使用了包访问控制符。

85、strictfp关键字:精确浮点的意思,即使浮点计算更精确

86、native关键字用于修饰一个方法,类似于一个抽象方法,与抽象方法不同的是native方法通常采用c语言来实现。如果某个方法需要利用平台相关特性,或者访问系统硬件等,则是可以把该方法使用native修饰,再把该方法交给c语言去实现。一旦java程序中包含了native方法,这个程序将失去跨平台特性

87、abstract和final不能同时使用,abstract和static不能同时使用。abstract和private不能同时使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值