FKJAVA读书笔记--第五章--面向对象(上)

1.类是引用数据类型。

 

2.Static修饰的成员不能访问没有static修饰的成员

 

3.Field=》成员变量=》包括成员变量和类变量

 

4.类的构造器看上去没有返回值,其实隐式的返回了该类的一个实例。

 

5.类不是一种具体的存在,类的实例才是。 

 

6.引用变量更像是C语言中的指针。(java将这个指针封装了起来)

 

7.如果想希望java垃圾回收机制回收某一个对象,只要把这些对应的引用变量赋值为null即可。

 

8.this可以代表人和对象,当this出现在某个方法体中时,它所代表的对象是不确定的,但它的类型是确定的。它所代表的对象只能是当前类类型的对象。这个方法被调用的时候,它所代表的对象才能真正确定下来。

 

9.为了不让自己混淆,千万不要用java实例对象调用static修饰的field或者方法。

 

10.使用this作为方法的返回值,可以使代码更加的简洁,但是会出现意义模糊的情况。

 

11.方法中的参数传递===》孙悟空,变一堆孙悟空。。那些变出的孙悟空拥有真孙悟空所有的属性,但是无论变出的孙悟空怎么动,都不会对真孙悟空产生影响。

 

12.形参个数可以变的方法:最后一个形参的类型后面加... 表示可以接受多个参数值,并且这个参数值被当做数组传入 长度可以变的参数只能放最后一位,并且在调用这个方法时,可以传入多个参数,也可以传入一个数组

 

13.一个方法调用它本身叫做方法的递归 递归方法的原则要向已知的方向递归,不能变成死循环。

 

14.方法重载,一个类里面有多个方法名一样的方法 java不允许使用方法返回值实现重载。并且我们尽量不要重载形参可变的方法

 

15.

成员变量和局部变量

 

field 与类共存亡

实例field与实例共存亡

尽量不用实例访问类field的情况,这样会给人误会。

局部变量中除了形参,其他的都要显示的初始化。

赋值动作某种意义上就是一个初始化的工作

 

16..为了避免出错需要尽量避免局部变量和成员变量同名的情况

 

17.局部变量不属于任何的类或者类的实例,它只存在于方法的栈内存中。局部变量不需要垃圾回收机制,因为局部变量只保存基本类型的值,或者对象的引用,也因此局部变量所消耗的内存很小。

 

18.访问控制级别表:


 

 

19.如果一个java中所有的类都没有被public修饰,那么这个java文件可以使任何合法的名称。

 

20.高内聚低耦合。。尽量不要让外部直接操作内部的数据值 get set方法的意义所在。

 

21.java包机制需要两个方面的保证:一、源文件中使用package语句指定包名,二、class必须放在对应文件夹下面。

 

22.java默认为类导入了java.lang下所有的类

 

23.import import static 功能非常相似,只是导入的对象不一样。

 

24.一个对象并不是完全由类的构造器new出来的,实际上在构造器方法内部可以使用this来引用,实际上在调用构造器之前,对象的实例已经有了。。只是此时还不能被外部访问

 

25.软件开发中有一个规则,不要把一个相同的代码写超过两次以上。

 

26.用扩展来描述extents关键字比用继承更好,更恰当。

 

27.java只允许类只有一个直接的父类,但是间接父类可以有很多。

 

28.覆盖(overide) 子类重写了父类的方法(非privatedefault关键字修饰的方法)。 并且要遵循“两同两小一大”的原则

两同:

1)方法名

2)形参列表

两小:

1)返回值类型比父类更小或相等

2)异常比父类方法更小或相等

一大:

子类权限比父类大或相等

 

29.当调用构造器初始化一个对象时,其父类的构造器总是最先被调用

   子类构造器执行体既没有super又没有this关键字的时候,系统将会隐式的调用父类的无参构造器。

 

30.java的多态概念:java的引用变量存在两个类型:一个是编译时的类型,一个是运行时的类型。如果编译和运行的类型不一样,可以理解为多态。引用变量在编译时期只能调用编译时期类型所具有的方法

 

31.方法:引用变量在编译时期只能调用编译时期类型所具有的方法

  实例Field:系统总是会试图访问它编译时类型所定义的Field,而不是它运行时类型所定义的Field

 

32.为了提高代码的强壮性,可以在强制类型转换之前加入instanceOf运算符来判断

 

33.继承虽好但会破坏java的封装为了避免子类随意重写父类方法,可以再父类public

方法前用final修饰;

  但用组合可以巧妙的避开这点。

  为了保证父类有良好的封装性,不会被子类随意的改变,设计父类通常的准则如下:

    1.尽量将父类的内部数据设置为private

2.如果父类中的方法需要被外部类调用,但又不希望自己的子类修改它,可以加上修饰关键字final

3.如果希望自己的某个方法被子类重写,但又不希望被别的类访问,可以用protected

4.尽量不要在父类的构造器中调用将被子类重写的方法。


package com.gu.test;

class Super
{
    int i = 10;

    Super()
    {
        print();
        i = 20;
    }

    void print()
    {
        System.out.print(i);
    }
}

public class Sub extends Super
{
    int j = 30;

    Sub()
    {
        print();
        j = 40;
    }

    void print()
    {
        System.out.print(j);
    }

    public static void main(String[] args)
    {
        System.out.print(new Sub().j);
    }
}

 

34.is-a  have-a  继承和组合的开销本质不会有差别。

  把一个抽象的类改造成适用于某些特定需求的类====》继承

  如果两个类之间有明显的整体部分的关系,应该使用组合。===》组合

 

35.初始化块的使用:一个类尽量只有一个初始化块 

 

36.java创建一个对象时的初始化顺序:先执行初始化块或者声明field时指定的初始值,再执行构造器里的。构造器是先执行父类的构造器,再执行子类的构造器,因此初始化块和field声明的代码谁在后谁后执行

 

37.静态初始化块也不能访问非静态成员。

 

38.Abstract修饰的类只能被继承,abstract修饰的方法必须由子类实现(重写),final修饰的类不能被继承,final修饰的类不能被重写。====finalabstract永远不能同时使用;

  Abstract不能修饰field和构造器。并且没有类的抽象方法。即static无法与abstract一起用。

  Abstract必须要被子类重写,所以private不能与abstract公用。

 

39.一个接口可以有多个直接父接口,但是接口只能继承接口,不能继承类。

 

40.一个类必须实现实现接口的所有抽象方法,否则要将其定义成抽象类。

 

41.内部类:定义在其他类内部的类被称为内部类。

1.内部类提供了更好的封装。当一个类被定义为内部类,那么这个类对于除了包含自己的外部类之外的所有类都是透明的。

2.内部类可以直接访问外部类的私有数据。

3.匿名内部类适用于创建那些仅需要一次使用的类。

 

42.成员内部类和局部内部类:成员内部类是类的成员。局部内部类在方法中,不是类成员。

 

43.非静态内部类的成员可以访问外部类的private变量。但是外部类不可以访问内部类的成员。必须要在外部类中创建该内部类的实例才可以进行访问。

 

44.接口内部类只能是静态内部类。

public class QuestionMain implements ITest
{
    public static void main(String[] args)
    {
        ITest.TestInternal.test(new QuestionMain());
    }

    @Override
    public void print()
    {
        System.out.println("真正实现方法");
    }
}

interface ITest
{

    void print();

    public static class TestInternal
    {
        public static void test(ITest test)
        {
            test.print();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值