1.只有类才存在静态的变量 方法只能对静态变量的操作 不能在方法内试图定义静态变量否则的话会抛出编译错误。
静态变量的本意是为了让所有的对象共享这个变量,如果在方法里面定义静态变量的话就存在逻辑错误了,也达不到你想要目的. 因为在方法定义静态变量根本没有他的任何意义.
2.对于工具类,类中方法不会操作特有的成员函数,所以可以将工具类中的方法加上static,方便用类名直接调用,另外,为了避免别人建立工具类的对象,一般将工具类的构造函数私有化。
3.方法区里面保存了Person类的静态成员变量和所有方法,当setName方法被调用时,setName方法进栈,且里面有一个局部变量name(String name的name)和隐含的一个this(可以这么理解),该方法被哪个对象调用this就指向谁(p),然后完成赋值动作
4.(P83)饿汉式是类一被加载,堆内存中就有对象,s的值就确定了,而懒汉式类加载的时候s为null,等到判断(调用getInstance方法的时候)的时候才建立对象(延迟加载)。
5.(P89)final : 最终。作为一个修饰符,
- 可以修饰类,函数,变量。
- 被final修饰的类不可以被继承。为了避免被继承,被子类复写功能。
- 被final修饰的方法不可以被复写。
- 被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量,有可以修饰局部变量。当在描述事物时,一些数据的出现值是固定的,那么这时为了增强阅读性,都给这些值起个名字。方便于阅读。而这个值不需要改变,所以加上final修饰。
- 内部类定义在类中的局部位置上是,只能访问该局部被final修饰的局部变量
6. 模板设计模式
7. abstract和那些关键字不能共存?
- final:首先abstract修饰的类,该类中的方法子类继承之后需要重写的,可是final修饰的类不能比继承,也就没子类,方法更不能得到重写,相互冲突;不能共存
- private:私有的意思,方法子类是不能被继承到的,那么方法就没有被重写,可是abstract是要求方法重写的也相互冲突;不能共存
- static:因为static修饰的方法是静态方法,其可以直接被类所调用。而abstract修饰的方法为抽象方法,即无方法体的方法,不能够被直接调用,需要在子类或实现类中去编写完整的方法处理逻辑后才能使用。
8.可以多实现是因为接口内没有定义方法体,下面子类中只需要实现一个show方法就可以了,不会出现多继承的冲突情况。但是如果两个接口中存在函数名相同但是返回值类型不同的函数时,不可以同时实现。
9.类与类是单继承,类与接口是多实现,接口与接口之间是多继承
10. 以下是错误示范,在多态进行判断的时候 不要进行父类的判断,因为只要传进来的都是Animal类型,一旦判断成功后下面的判断就不再继续了。
11. (P105)这里面,在进行两个对象的比较的时候(equals方法比较的是地址值,a.equals(b)和a==b,结果相同),equals方法里面既可以接受Demo对象也可以接收Person对象,这也是多态的一个应用( boolean equals(Object obj) )
12. equals为Object类中定义的方法,其他类可以复写,复写时参数类型也需要是Object类型,此时在进行其他判断时要注意 需要向下转型。 总结,在进行复写的时候需要进行类型判断和转换的动作。
13.Object类中的 toString 方法返回的是 该对象所属的类@该对象的哈希值的十六进制表现形式