类
抽象数据类型:将 不 同 的 数据类型集合组成起来 来描述一种新事物。
类:由 成员变量 和 方法 组成。
成员变量:描述对象共同的数据结构。
方法:描述对象的行为。
面向对象:以对象为核心来构建系统。
引用变形对象:对实例化对象进行访问。
引用对成员变量访问和方法的调用。
引用类型变量的赋值:
引用类型变量储存的是对象的地址信息。对引用类型变量的赋值, 除了使用上面的new关键字以外,还可以有另外一种赋值方式, 即:相同类型的引用类型变量之间相互赋值。
- Emp e1 = new Emp();
- Emp e2 = e1; //将e1的值(对象的地址信息)赋给e2,e2和e1指向相同的对象。
- e1.name =“黄河大虾”;
- e2.name = “白发馍女”;
- System.out.println(e1.name);
该引e1与e2两个引用指向同一个对象。
方法的重载:方法名相同参数列表不同。
签名:包含方法名和参数列表。
构造方法:初始化成员变量。
- class Cell {
- int row ;
- int col ;
- public Cell (int row1 , int col1){
- row = row1;
- col = col1;
- }
- }
- class TestCell {
- public static void main(String args[ ] ){
- Cell c1 = new Cell( 15 , 6 );
- printCell(c1);
- }
- }
this关键字:this关键字用在方法体中,用于指代调用该方法的当前对象.
引用类型 数组:
数组是对象,数组的元素可以看成 数组对象的成员变量。数组对象储存在堆中。
对象内存管理:
在JAVA中,有java程序、虚拟机、操作系统三个层次,其中java程序与虚拟机交互,而虚拟机与操作系统交互。编译好的java字节码文件运行在JVM中。
程序中无论代码还是数据,都需要存储在内存中,而java程序所需内存均由JVM进行管理分配,开发者只需关心JVM是如何管理内存的,而无需关注某种操作系统是如何管理内存的,这就保证了java程序的平台无关性。
JVM会将申请的内存从逻辑上划分为三个区域:堆、栈、方法区。这三个区域分别用于存储不同的数据。
对象储存在堆中,引用数据类型储存在栈中。
- Cell c = new Cell ();
成员变量的声明周期:
那么当一个对象没有任何引用时,该对象被视为废弃的对象,属于被回收的范围,同时该对象中的所有成员变量也随之被回收。
可以这样认为,成员变量的生命周期为:从对象在堆中创建开始到对象从堆中被回收结束。
垃圾回收机制:
垃圾回收器(Garbage Collection,GC)是JVM自带的一个线程(自动运行着的程序),用于回收没有任何引用所指向的对象。
GC线程会从栈中的引用变量开始跟踪,从而判定哪些内存是正在使用的,若GC无法跟踪到某一块堆内存,那么GC就认为这块内存不再使用了,即为可回收的。但是,java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。
栈:
栈用来储存方法中的局部变量。
方法中的变量即为局部变量,是在栈内存中分配,若变量为值类型,则在栈中存储的就是该变量的值。若变量为引用类型,则在栈中存储的是堆中对象的地址。
局部变量的生命周期;
JVM会为每一个方法的调用在栈中分配一个对应的空间,这个空间称为该方法的栈帧。一个栈帧对应一个正在调用中的方法,栈帧中存储了该方法的参数、局部变量等数据。当某一个方法调用完成后,其对应的栈帧将被清除,局部变量即失效。
方法区:
用于储存类的基本信息(属性和方法)
- Cell c = new Cell();
- 程序在执行这句话时,Cell类首先被装载到JVM的方法区,其中包括类的基本信息和方法定义等
访问控制符
static 修饰成员变量
当创建对象后,成员变量是存储在堆中的,而static成员变量和类的信息一起存储在方法区, 而不是在堆中。
在static方法中不能对非static成员(对象成员)进行访问。
static方法的作用在于提供一些“工具方法”和“工厂方法” 比如工具类。
static块为属于类的代码块,在类加载期间执行的代码块,只执行一次,可以用来在软件中加载静态资源(图像、音频等等)。如下代码演示了static块的执行:
final关键字
修饰成员变量:final关键字修饰变量,意为不可改变。final可以修饰成员变量,也可以修饰局部变量,当final修饰成员变量时。
final关键字修饰的方法不可以被重写。使一个方法不能被重写的意义在于:防止子类在定义新方法时造成的“不经意”重写。
final关键字修饰的类不可以被继承。使一个类不能被继承的意义在于:可以保护类不被继承修改,可以控制滥用继承对系统造成的危害
static final 修饰的成员变量称为常量,必须声明同时初始化,并且不可被改变。常量建议所有字母大写。
实际应用中应用率较广,因为static final常量是在编译期被替换的