java编程的逻辑笔记总结(一)

  • 对于数组和对象类型,有两块内存,一块存放实际内容分配在堆区,一块存放实际内容的地址,放在栈区。

  • 编码有两类:一类是非Unicode编码,另一类是Unicode编码

  • public static修饰符修饰的方法表示 静态方法表示方法属于类,通过类名直接调用就可以,与其相对应的是实例方法,需要通过实例或对象来调用

  • 通过private封装和隐藏内部实现细节,避免被误操作,是一种常见的思维方式

  • 我们将类看做自定义数据类型,所谓自定义类型就是除了8种基本类型以外的其他类型,用于表示和处理基本类型以外的其他数据。一个数据类型包含的属性和该类型可以进行的操作组成。

  • 类变量类方法java编程的逻辑笔记总结(一)类型本身具有的属性通过类变量体现,经常用于表示一个类型中的常量,如:public static final double PI = 3.14159265358979323846,类变量可以通过类名对变量进行直接的访问,如Math.PI。

  • public表示外部可访问,static表示变量是类变量,private表示只能够在类内部进行访问,final表示变量赋值后不能再进行修改。

  • 类和方法不使用任何修饰符修饰的时候表示这是一种包级别可见性。

变量的默认值

  1. 可以在定义变量的同时就赋值,或者将代码放入初始化代码块中,代码块用{}包围,


int  x = 1;

int  y ;

{

    y = 2;

}

同样静态变量也可以这样初始化


构造方法

  1. 构造方法的名字是固定的,名字与类名相同,用户和Java系统能够很容易的就知道哪些系统是构造方法。

  2. 没有返回值,也不能有返回值,构造方法隐含的返回值就是实例本身。

  3. 构造方法可以是私有的,用private修饰,为什么要拥有私有的构造方法,原因是大致可能有这么几种场景,1:不能创建类的实例,类只能被静态访问,如Math 和Arrays类,他们的构造方法都是私有的。2:能创建实例,但只能被类的静态方法调用,有一种常见的场景;类的对象有但是只能有一个,即单例。在这种场景中,对象是通过静态方法获取的,而静态方法调用私有的构造方法创建一个对象,如果对象已经创建过了,就重用这个对象。3:只能用来被其他多个构造方法调用,用于减少重复代码。

类的生命周期

  • 每当第一次使用类时,java会将类加载到內存中,为这个类分配一块空间,这个空间包含类的定义,它的变量和方法信息,同时还有类的静态变量,并对静态变量赋初值。

  • 类加载进内存后,一般不会释放,直到程序运行结束,类只会加载一次,所以静态变量在内存中只有一份。

  • 对象和数组一样,有两块內存,保存地址的部分分配在栈中,而保存实际内容的部分分配在堆中。栈中的内存是自动管理的,函数调用入栈就会分配,出栈就会释放。堆中的内存是被垃圾回收机制管理的,当没有活跃的变量指向对象是的时候,对应的堆空间就可能被释放,具体释放的时间是java虚拟机自己决定的。活跃变量就是一加载的类的变量,以及栈中所有的变量。

 

 


类的继承


正如我们在设计Line时,我们考虑的层次是点,而不是点内部的细节,每个类封装其内部细节,对外提供高层次的功能,使其他类在更高的层次上考虑和解决问题,这是程序设计的一种基本思维方式。


使用继承一方面可以复用代码,公共的属性和行为可以放到父类中,而子类只需关注子类特有的就可以了,另一方面,不同的子类对象可以更加方便的被统一处理。


  1. java使用extents关键字表示继承关系,一个类最多只能有一个父类;

  2. 子类不能直接访问父类的私有属性和方法。

  3. 除了私有的以外,子类可以调用继承了的父类的其他属性和方法。

  4. 在new的过程中,父类的构造方法也会执行,而且会优先于子类的执行。

  5. super关键字,super用于指代父类,可用于调用父类的构造方法,访问父类的方法和变量。在调用父类的构造方法的时候,super必须放在第一行。

  6. 子类可以重写父类非private的方法,当调用的时候,会动态绑定,执行子类的方法。

  7. 注意:在父类构造方法中调用可被子类重写的方法,是一种不好的实践,容易引起混淆,应该只调用private的方法。


重名和静态绑定

java编程的逻辑笔记总结(一)

静态绑定

java编程的逻辑笔记总结(一)


重载和重写

java编程的逻辑笔记总结(一)

向上和向下转型

Base  b = new child();向上转型:子类的对象可以赋值给父类的引用变量。

Base b= new child();

Child c = (Child)b;向下转型:表示父类型的变量赋值给子类型变量。但有可能出错。(取决于父类变量的动态类型是否为这个子类或子类的子类)


instanceof关键字

前变量后类,表示变量引用的对象是不是该类或其子类。返回Boolean类型


可见性重写

继承反应的是is-a的关系,也就是子类对象也是属于父类,子类必须支持父类所有的对外行为,降低可见性就会减少子类对外的行为,破坏is-a的关系,但子类可以增加父类的行为。所以提升可见性没有问题。