Java基础知识点总结四

 

1.      程序只有一个主类,即为带有public修饰的那个类,同时与类文件的名字一样,别的类再定义时不能用public修饰。

2.      类可选修饰符为public,abstract,final;成员方法可选修饰符为 public,protected,

private.方法返回值类型:必选,无返回值用void,可以是任何Java数据类型。

3.声明成员变量:[修饰符][static][final][transient][volatile]<变量类型><变量名>

   修饰符:可选,可用public,protected,private.

   static:可选,指定成员变量为静态变量,可直接用类名访问。

   final:可选,指定成员变量为取值不会改变的常量。

transient:可选,指定成员变量为暂时变量,用于对象存盘。

volatile:可选,指定成员变量为共享变量,用于并发线程的共享。

4.局部变量的修饰符不能用public,protected,private,static,但可用final修饰。

5.当局部变量和成员变量名字相同时,成员变量被隐藏,若想使用成员变量,必须用this,格式为:this.成员变量名;    this.成员方法名();

6.销毁对象:垃圾回收机制可自动判断无用对象并销毁。finalize()方法,用于在对象被垃圾回收机制销毁之前,由垃圾回收机制擅用。也可用析构方法finalize(),它无参无返回值,每个类有且只有一个析构方法。

7.子类声明一个与父类的成员变量同名的成员变量,则子类不能继承父类的成员变量,此时称子类的成员变量隐藏了父类的成员变量;子类声明一个与父类的成员方法同名的成员方法,则子类不能继承父类的成员方法,此时称子类的成员方法覆盖了父类的成员方法。

8.子类调用父类的构造方法:默认构造方法用super();带参构造方法用super(参数);在子类中调用父类中被隐藏的成员变量和成员方法:super.成员变量名;super.成员方法名().

9.通常通过方法的重载(在一个类中,方法名相同,但参数个数或参数类型不同)和覆盖来实现类的多态性。

10.覆盖时注意:子类不能覆盖父类中声明为final或者static的方法;子类必须覆盖父类中声明为abstract的方法,或者子类也应该声明为abstract;子类覆盖父类中的同名方法时,子类的方法声明也必须和父类中被覆盖的方法的声明一样。

11.覆盖:一个方法将方法的超类实现替换为自己的实现,其签名必须和超类方法签名相同,但返回类型可以按照某种特定的方式变化。

   1)如果返回类型是引用类型,则覆盖方法的返回类型可以声明为超类方法声明的返回类型的子类型;如果返回类型是基本类型,则覆盖方法的返回类型必须和超类方法的返回类型相同。

   2)覆盖方法有自己的访问修饰符,但只限于提供更多的访问权限。覆盖方法还可以改变其他方法修饰符,可以随意的改变synchronizednativestrictfp修饰符。不管覆盖方法中的参数是否是final的,子类都可以修改这个参数(参数的final修饰符不属于方法的签名,只是实现的细节)。

   3)覆盖方法的throws子句可以和超类方法有所不同,它列出的每一个异常类型都应该和超类中的异常类型相同,或者是超类异常类型的字类型。

12.隐藏字段 :字段不可以被覆盖而只能被隐藏。  

可访问性与覆盖 :一个方法只有当它可以被访问时才可以被覆盖(final方法等)。  

隐藏静态成员 :类中的静态成员(无论是字段还是方法)不可以被覆盖,只能被隐藏。

13abstract class(抽象类),只声明方法的存在而不去具体实现它的类。抽象类不能被实例化,也不能创建其对象。

14.public abstract void get();(抽象方法),不能使用privatestatic关键字修饰。

15.包含一个或多个抽象方法的类必须被声明为抽象类。

16Final类,不能被继承,即不能有子类。为程序的安全,可将一些重要的类声明为final类。System类和String类被声明为final类。

17[修饰符]interface 接口名[extends 父接口列表] {

          [public][static][final] 常量;

          public][abstract]方法;

}//定义接口

修饰符:可选,public或默认。

方法:接口中的方法只有定义面没有被实现。

与类文件一样,接口文件的文件名必须与接口名相同。

18.在类中实现接口时,方法的名字、返回值类型、参数的个数及类型必须与接口中的完全一致,并且必须实现接口中的所有方法。

19. 实例内部类:

   1)在创建实例内部类的实例时,外部类的实例必须已经存在。

   ExteriorTest.InsideTest ei=new ExteriorTest().new InsideTest();

   2) 实例内部类的实例自动持有外部类的实例的引用。在内部类中,可以直接访问外部类的所有成员。在多重嵌套中,内部类可以访问所有外部类的成员。

   3)外部类实例与内部类实例之间是一对多的关系,一个内部类实例只会引用一个外部类实例,而一个外部类实例对应零个或多个内部类实例。在外部类中不能直接访问内部类的成员,必须通过内部类的实例去访问。

   4)在实例内部类中不能定义静态成员,而只能定义实例成员。

   5)如果实例内部类B与外部类A包含同名的成员(比如成员变量v),那么在类B中,this.v表示类B的成员,A .this.v表示类A的成员。

20.静态内部类:

    1)静态内部类的实例不会自动持有外部类的特定实例的引用,在创建内部类的实例时,不必创建外部类的实例。

      ExteriorTest.InsideTest ei=new ExteriorTest.InsideTest();

     2)静态内部类可以直接访问外部类的静态成员,如果访问外部类的实例成员,就必须通过外部类的实例去访问。

     3)在静态内部类中可以定义静态成员和实例成员。

     4)客户类可以通过完整的类名直接访问静态内部类的静态成员。

21.局部内部类:(修饰符限制与局部变量类似)

    1)局部内部类只能在当前方法中使用。

    2)局部内部类和实例内部类一样,不能包含静态成员。

    3)在局部内部类中定义的内部类修饰符限制与局部变量类似。

    4)局部内部类和实例内部类一样,可以访问外部类的所有成员,此外,局部内部类还可以访问所在方法中的final类型的参数和变量。

22.内部类的继承:

     1)外部类Sample继承了另一个外部类Outer的内部类Inner,每个Sample实例必须自动引用一个Outer实例,当调用一个Sample实例的print()方法时,print()方法会访问当前Outer实例的成员变量。

       Sample的构造方法:

public Sample(Outer o){

       o.super();

    }

     2)内部类并不存在覆盖的概念,假如子类与父类中存在同名的内部类,那么这两个内部类也会分别在不同的命名空间中,因此不会发生冲突。

23.匿名内部类:

1)匿名内部类本身没有构造方法,但是会调用父类的构造方法。

2)匿名类尽管没有构造方法,但是可以在匿名类中提供一段实例初始化代码,Java虚拟机会在调用了父类的构造方法后,执行这段代码。

3)除了可以在外部类的方法内定义匿名类以外,还可以在声明一个成员变量时定义匿名类。

4)匿名类除了可以继承类以外,还可以实现接口。

5)匿名类和局部内部类一样,可以访问外部类的所有成员,如果匿名类位于一个方法中,还能访问所在方法的final类型的变量和参数。

6)局部内部类的名字在方法外是不可见的,因此与匿名类一样,能够起到封装类型名字的作用。

   局部内部类与匿名类的区别:

   1))匿名类的程序代码比较简短。

   2))一个局部内部类可以有多个重载构造方法,并且客户类可以多次创建局部内部类的实例。而匿名类没有重载构造方法,并且只能创建一次实例。因此,如果只需要创建内部类的一个实例,那么可以用匿名类,它能使程序代码比较简捷,如果需要多次创建内部类的实例,那么用局部内部类。

24

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值