java-细节(容易忘的经常看) head-first java 笔记

1.java中同类方法可以互相在方法内部调用

当然可以写this.方法名 ,但是不写也行,编译器会自动加上

 

2.java方法也可以自调用,递归

 

3.java中不能再一个方法中再定义另一个方法,和js不同

   public void clear(){
   
       public String getName() {
       
       }// 不可以这么声明
       
   }

4.java存在匿名对象

 

5.值传递就是Java当中参数传递的一种方式 (传递引用变量的地址也是传递的地址的复制)

 

6.访问权限

修饰类和类的内部结构(属性,方法,构造器,代码块)

 

7.抽象类中可以实现具体方法// 只要有抽象方法就是抽象类 // 具体类不可能有抽象方法,必须全部完成抽象类的实现

 

8.当一个对象的引用赋值给object类型对象时,它无法再赋值给原来类型对象

 

 

 

而且更糟糕的是,java编译器只能根据变量的本身类型来判断调用方法

 

 10.因为java中object类型是所有类型的父类,所以每一个类型除了本身类型外,也都可以看成是object类型,每个对象也是object实例,能用object上定义的原生方法

 

 11. 不同继承树的类也可以实现相同的接口

12.super()用于子类调用父类中同名方法

super关键字用于引用父类对象,类似this引用当前对象一样

比如子类重写是:我要先执行父类方法的内容,再增加一些别的处理,那就先调用super.父类方法名();

 

13 构造函数在new给对象赋值前被调用,而且它没有返回类型

(1)初始化对象状态,也就是给实例字段赋值

(2)构造函数不会被继承

(3)构造函数接收的参数来初始化,而不是要用户之后再手动调用set()输入参数

(4)顺便一提,如果你写了有参构造函数就一定得自己补上无参构造函数,编译器只有在你啥都忘了才会帮你补充一个无参

当然有一些api一定要用户输入不指定默认值就可以不设置无参参数,说到底无参构造只是指定一个默认状态而已

 

 (5)构造函数重载

 (6)java中只能用new创建一个新对象,它没有js中的对象字面量

 

15 java在创建新对象时对父类的继承

看图,构造函数链一样的东西,父类的所有对应构造函数会被调用并创建父类对象包裹在最底层子类对象内

 

 

 

 

执行顺序是从object自顶向下执行构造函数,执行过程是在子类构造函数首句中调用super(),没有系统会默认加,知道调用到object执行(我觉得应该是用的递归方法)

 

 

this()调用同类的重载构造函数,而且只能放在第一句

super() this()不能同时调用

 

17.释放对象的方法

 18.静态方法的调用

(1)是直接调用类名,不创建对象,它构造函数会设置成private 

(2)静态方法也无法调用非静态方法,因为非静态方法需要引用实例变量,而实例变量是一定需要存放在实例对象中的

(3)即使非静态方法没有传入参数,看似不调用实例变量,但是你怎么保证之后它不会修改调用呢?比如子类覆盖这个方法时又调用了实例变量.所以才不允许静态方法调用非静态方法

(4)静态方法本身只和接受的参数有关,而且它不需要实例变量的参与,比如math类中的方法

19.静态变量是所有实例对象共享的数据

它可以用来统计对象创建次数

 静态变量在类被加载时初始化==>类被虚拟机判断加载的实际==>通常是第一次有人想创建该类实例是加载

(1)初始化意味着在所有对象创建前就已经有了静态变量了

(2)在所有静态方法 执行前 ,静态变量就已经初始化了

 

posted @ 2022-01-08 23:21  嗜血汽车人  阅读(132)  评论(0)    收藏  举报