版本:JDK1.8
注:观看尚硅谷视频的复习笔记
一、面向对象
1、面向过程(POP)与面向对象(OOP)
面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。
面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
2、面向对象的三大特征
封装 (Encapsulation)、继承 (Inheritance)、多态 (Polymorphism)
3、对象内存解析
堆(Heap),此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。
通常所说的栈(Stack),是指虚拟机栈。虚拟机栈用于存储局部变量等。局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、char 、 short 、 int 、 float 、 long 、double)、对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址)。 方法执行完,自动释放。
方法区(Method Area),用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
二、属性
1、属性(成员变量):
(1)、直接定义在类中的
(2)、可以在声明属性时,指明其权限,使用权限修饰符private、public、缺省、protected
(3)、有默认初始化值
(4)、加载到堆空间中(非static)
2、局部变量:
(1)、声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量
(2)、无默认初始化值
(3)、加载到栈空间中
三、方法
1、声明
权限修饰符 返回值类型 方法名(形参列表) {方法体}
2、可以调用本类中的属性或方法
(一)、方法的重载
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
跟方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系!
(二)、可变个数的形参
- 声明格式:方法名(参数的类型名 …参数名)
- 可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个
- 可变个数形参的方法与同名的方法之间,彼此构成重载
- 可变参数方法的使用与方法参数部分使用数组是一致的
- 方法的参数部分有可变形参,需要放在形参声明的最后
- 在一个方法的形参位置,最多只能声明一个可变个数形参
public class MethodArgsTest {
public static void main(String[] args) {
MethodArgsTest test = new MethodArgsTest();
test.show(12);
test.show("hello");
test.show("hello","world");
test.show();
test.show(new String[]{"AA","BB","CC"});
test.show("AA","BB","CC");
}
public void show(int i){
}
public void show(String s){
System.out.println("show(String)");
}
public void show(String ... strs){
System.out.println("show(String ... strs)");
for(int i = 0;i < strs.length;i++){
System.out.println(strs[i]);
}
}
//不能与上一个方法同时存在
// public void show(String[] strs){
//
// }
public void show(int i, String ...strs){
}
// public void show(String ...strs,int i){
//
// }
}
(三)、方法参数传递
1、基本数据类型实参赋给形参的是数据值
2、引用数据类型实参赋给形参的是地址值
(四)、递归
一个方法体内调用自身
public class HelloWorld {
public static void main(String[] args) {
HelloWorld helloWorld = new HelloWorld();
System.out.println(helloWorld.getSum(100));
}
public int getSum(int n) {
if(n==1) {
return 1;
}else {
return n + getSum(n-1);
}
}
}
四、对象
1、匿名对象
创建对象,没有显式的赋一个变量名,即为匿名对象
匿名对象只能调用一次
//new了 不是一个对象
new Person().name = "hjah";
new Person().showName();
五、封装与隐藏
1、程序设计追求高内聚低耦合
高内聚 :类的内部数据操作细节自己完成,不允许外部干涉
低耦合 :仅对外暴露少量的方法用于使用。
2、隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。
3、封装
private修饰属性,使用getter()与setter()方法使用属性。
4、权限修饰符
private<default(缺省)<protected<public
可以修饰属性、方法、构造器、内部类
修饰类只能使用缺省或public
(1)、private:类内部
(2)、default:同一个包下
(3)、protected:不同包的子类
(4)、public:同一个工程
六、构造器
1、构造器的作用:创建对象
2、系统默认提供一个无参构造器
3、自定义有参构造,在创建对象时初始化对象属性。
七、JavaBean
一个公共的类,有一个无参公共构造器,有属性且有其对应的getter和setter方法。