面向对象
类与对象: 类是对象的模板,对象是类的实例
方法与语句块
-
方法的定义 修饰符 返回值 方法名(参数名){ return 返回值;}
-
方法调用 1,类名.方法名 2,对象.方法
-
方法重载(overload) 名字相同,参数列表不同 例如 System.out.println()
-
命令行传参 --JVM调优
-
可变长参数 ... 必须放在最后一个参数
-
递归
包机制
域名倒写
import
JavaDoc
- 帮助文档
其中cmd命令:
javadoc -encoding utf-8 -charset utf-8 HelloWorld.java
构造方法
涉及到构造方法重载,new Car() 参数不同,构造的对象也不同
-
默认是无参构造器,若手动定义有参构造器,则必须再手动定义一个无参构造器
-
单例模式,必须将构造器私有化
class Singleton{
//1.私有化构造器
private Singleton(){
}
// 2.内部创建类的对象
private static Singleton instance = new Singleton();
// 3.提供公共的静态方法,获取类的实例
public static Singleton getInstance(){
return instance;
}
}
- 栈存放引用,堆存放具体的对象
Java虚拟机的内存可以分为三个区域:栈Stack、堆Heap、方法区Method area
栈属于线程私有,不能实现线程间的共享! 栈描述的是方法执行的内存模型;每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等) JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等) 栈是由系统自动分配,速度快,栈是一个连续的内存空间
JVM只有一个堆,被所有线程共享 堆用于存储创建好的对象和数组(数组也是对象); 堆是一个不连续的内存空间,分配灵活,速度慢
JVM只有一个方法区,被所有线程共享 方法区实际也是堆,只是用于存储类、常量相关的信息! 用来存放程序中永远是不变或唯一的内容。( 类信息 [class对象]、静态变量、字符串常量等)
Java的三大特性
封装
属性私有,提供对应的get、set方法
继承
-
extends关键字
-
Object是全部类的父类
-
子类拥有父类的全部特性(包含子类的方法重写)
this 与super的关系
多态
父类的引用指向子类的对象(前提是:需要有继承以及父子类方法的重写)
instance of关键字的使用,如果匹配,可以进行类型的转换
修饰符
public、protected、private、default、static、final、abstract
其中前四个,是对方法、属性访问范围的规定
-
static 静态
-
final
- 修饰变量:变量一旦被赋值,就不能再被赋值
- 修饰方法: 方法不可被重写(继承中会出现)
- 修饰类:该类不能被继承,比如Math、String等类
- abstract
- 修饰方法:只有方法名,没有方法体
- 修饰类:包含抽象方法的类必须是抽象类,通过抽象类,就使得继承子类必须自己定义方法的具体实现(有点“接口”的意思)
那么抽象类用来干嘛?
它只用来继承,其中的方法必须被子类实现;它不能被实例化,即无法new()
??接口 interface
接口比抽象类更抽象(抽象类还能有具体的实现,接口完全不能有实现)
- 是一种约束,只能定义方法名;
- 子类实现接口,必须具体实现其中的方法
- 只有一种方法的接口我们称为函数式接口,可以使用lambda表达式进行简化
- 接口可以实现多继承,但是类只能单继承
内部类
-
局部内部类
-
静态内部类
-
匿名内部类(不需要创建新的对象)
异常
总接口:Throwable
-
exception
其中"运行时异常"包含NullPointer、下标越界异常、ClassNotFound
-
error
JVM错误,包含StackOverflow、OutOfMemory
-
五个关键字
try、catch、finally、throw、throws