目录
1、java语言具有良好的可移植性
java源码(.java)——>字节码(.class)——>机器码
编译器:将源码编译为字节码
JVM:不同平台对应的JVM将字节码翻译成该平台的机器码
程序员编写的是java源码;运行的是经JVM翻译的机器码;
跨平台的是java程序;JVM是用C/C++开发的软件,不同平台有不同版本;
2、一个java文件仅有一个public修饰的类
可以有多个类,但public修饰的类只能有一个,且类名与文件一致
3、java访问权限
访问修饰符:private 私有的;protected 受保护的;public 公开的
形成四种访问权限:private,default,protected,public
未加修饰符即为:default
修饰成员变量或成员方法
private:该成员可被该类内部成员访问
default:该成员可被同一包下的类访问
protected:该成员可被同一包下的类及其子类访问
public:该成员可被任意包下,任意类的成员访问
修饰类时,仅两种访问权限
default:该类可被同一包下其他类访问
public:该成员可被任意包下,任意类访问
4、java的数据类型
基本数据类型+引用数据类型
基本数据类型共8个,分4类;
整数:byte;short;int;long
浮点数:float;double
字符类型:char
布尔类型:boolean
除布尔外,其他7种类型可视为数字类型,可相互类型转换
引用类型对一个对象的引用,3类
数组;类;接口;
本质:通过指针,指向堆中对象所持内存空间(java语言未沿用指针这个说法)
5、包装类与装箱拆箱
“一切皆对象”,8种基本数据类型不具备对象特性;为每个基本数据类型定义一个对应的引用类型,即包装类。
Byte、Short、Integer、Long、Float、Double、Character、Boolean;
装箱:基本数据类型——>引用数据类型(对象)
拆箱:引用数据类型(对象)——>基本数据类型
自动装箱和拆箱:jdk1.5
6、全局(成员)变量与局部变量
java中没有真正的全局变量;
成员变量:
1、类的范围内定义的变量
2、有默认初始值
3、未被static修饰的为实例变量(实例对象的属性),存储在对象所在堆内存中,生命周期与对象相同
4、static修饰的为类变量(该类所有对象共享的变量),存储在方法区中,生命周期与当前类相同
局部变量:
1、方法内定义的变量
2、没有默认初始值
3、存储在栈内存中,作用范围结束自动释放
7、成员变量(实例变量+类变量)的默认值
引用类型:null
基本数据类型:
8、java内存分区
程序运行过程中,jvm利用一段空间存储程序执行期间需使用的数据和相关信息,即JVM内存
五部分:程序计数器(Program Counter Register);java栈/VM栈(VM Stack);本地方法栈(Native Method Stack);方法区(Method Area);堆(Heap);
程序计数器(PC寄存器):程序指令;
线程隔离,随程序运行空间不变,无内存溢出。
java栈:栈帧;
一个栈帧对应被调用的一个方法,栈帧中包括:局部变量表、操作数栈、指向运行时常量池的引用、方法返回地址、附加信息;线程执行方法,创建栈帧并入栈,方法执行完毕,栈帧出栈;线程隔离。
本地方法栈:同java栈原理作用类似,java栈为执行java方法服务,本地方法栈则是执行本地方法(Native Method)服务。线程隔离。
方法区:类的信息(类名,方法,字段)、静态变量、常量、编译后的字节码、运行时常量池
堆:对象本身、数组
9、面向对象的三大特征
封装、继承、多态
封装:将对象成员变量和实现细节隐藏起来,将对象的方法暴露出来,用方法实现对对象信息的安全访问和操作。
1、隐藏类的实现细节;
2、让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对成员变量的不合理访问;
3、可进行数据检查,从而有利于保证对象信息的完整性;
4、便于修改,提高代码的可维护性;
继承:继承是面向对象实现程序复用的一种手段。子类继承父类后,直接具备父类的属性和方法。在此基础上进行成员变量和方法的扩展。
多态:将子类对象直接赋给父类变量,运行时依然表现出子类特征。
其中父类型有三种:类;抽象类;接口;
10、单继承
java是单继承,即一个类仅能有一个直接父类。JAVA在设计时参考C++语法,C++支持多继承,但多继承易导致混淆。java可以有任意多个间接父类,可间接实现“多继承”。
11、方法重写与方法重载
方法重载:同一个类内,方法名相同、参数列表不同的方法之间就是重载关系。重载与返回值和访问修饰符无关,即重载的方法不能根据返回类型进行区分。
方法重写:发生在子类与父类中,若子类方法想要和父类方法构成重写关系,则它的方法名、参数列表必须与父类方法相同。另外,返回值要小于等于父类方法,抛出的异常要小于等于父类方法,访问修饰符则要大于等于父类方法。还有,若父类方法的访问修饰符为private,则子类不能对其重写。构造方法不能重写(构造方法需与类名一致);
12、Object类中的方法
Class<?> getClass():返回该对象的运行时类;
boolean equals(Object obj):判断指定对象与该对象是否相等;
int hashCode():返回该对象的hashCode值。在默认情况下,Object类的hashCode()方法根据该对象的地址来计算。但很多类都重写了Object类的hashCode()方法,不再根据地址来计算其hashCode()方法值;
String toString():返回该对象的字符串表示,当程序使用System.out.println()方法输出一个对象,或者把某个对象和字符串进行连接运算时,系统会自动调用该对象的toString()方法返回该对象的字符串表示。Object类的toString()方法返回 运行时类名@十六进制hashCode值 格式的字符串,但很多类都重写了Object类的toString()方法,用于返回可以表述该对象信息的字符串;
Object类还提供了wait()、notify()、notifyAll()这几个方法,通过这几个方法可以控制线程的暂停和运行。
Object类还提供了一个clone()方法,该方法用于帮助其他对象来实现“自我克隆”,所谓“自我克隆”就是得到一个当前对象的副本,而且二者之间完全隔离。由于该方法使用了protected修饰,因此它只能被子类重写或调用。