一.面向对象:
特点 封装,继承,多态 抽象
什么是类?类型/类别
什么是对象?万物皆对象
什么是对象?真实存在的单个个体
2.类:
属性:变量(成员变量和局部变量)
行为:方法(五要素)
假如这个类叫做House
类就像一个房子,这个房子里面有爸爸,妈妈,儿子,爷爷,奶奶等,这些就是变量,这些变量就是这栋房子的成员,所以叫做成员变量.而爸爸和妈妈再加爷爷和奶奶可以凑一桌打麻将,打麻将这个行为在类里面就叫做方法,这个方法写在类里面的意思是只要你给我四个人,我们就可以打麻将,这四个变量就叫做局部变量,因为它说的只是打麻将的四个人.
成员变量和局部变量的区别?
1.定义的位置不一样,成员变量是定义在类里面,方法外面的变量
* -局部变量是定义在方法里面的的变量
* 2.初始值不一样
* -成员变量有默认的初始值(int默认0,String默认null...)
* -局部变量没有默认的初始值
* 3.在内存中的地址不一样(堆,栈,方法区)
* -成员变量是存放在堆中的
* -局部变量是放在栈中的
* 4.生命周期不一样
* -成员变量是从对象被创建时开始,对象被回收时结束
* -局部变量从方法的调用开始,到方法调用结束时结束
二. 构造方法:
House h1 = new House(); House h2 = new House(); House h3 = new House();
构造方法就是建房子的过程,你也可以把它想象成一个克隆机器,通过这个过程,建出来的房子跟我规定的房子一模一样,家庭成员也一模一样,只是可能爸爸妈妈的名字不一样,房顶的颜色不一样,这取决于你给我的变量赋什么样的值.房子必须要有,如果我们忘了,系统会自动给我们一个空白的,没有变量名字的房子.这就是无参构造函数.
什么是构造方法?
1.方法名和类名相同 因为建的就是这个房子啊,名字自然是一样的
2.没有返回值,也不能加void
构造方法的作用?
-用来给属性初始化的
new People();
重点:
-如果没有手动添加构造方法,系统会默认添加一个无参构造
-如果手动添加了,系统就不会提供默认的无参构造了
this:用法
- 指代当前的对象(谁调用指的就是谁)
-this调用成员变量(在构造方法中this.变量名)
-this调用实例方法(没有加static修饰的方法)
-this调用构造方法
例如调用无参构造: this()
注意:在调用构造方法的时候,必须出现在代码的第一行
封装:将类中的属性私有化,然后提供公共的set和get方法
这意思就是把房门关了,你隔着门告诉我把爸爸叫什么名字(set),叫爸爸出来(get),不让你到房子里面去把爸爸拉出来.
访问修饰符范围:
public 同包类子类其他 l邻里乡亲挺和睦,谁都能喊他去打牌
protected 同包类子类 |隔壁家和儿子家能喊他出去打牌
default 同包类 |隔壁家的能过来喊他打牌
private 本类 |只能在自己家打牌
堆,栈,方法区
堆:new出来的和成员变量
栈:地址(引用)和局部变量
方法区:类的结构,方法,和静态变量
注意:正是因为不同变量的这种存放方式导致如果调用的引用类型没有指向任何东西,用这个去调用这个引用类型的方法时会报错,"空指针异常",例如:
int[] arr3 =null;
int l = arr3.length;//空指针异常,因为 arr3没有指针指向一个地址
这就是因为数组arr3的地址存在栈里面,而没有指针指向一个值,当被调用的时候会去找这个地址指向的值,而这个地址连指针都没有,就报错了.
toString():要重写toString() |
如果直接用 System.out.println()输出类名:默认的在调用对象中的toString()
方法,如果对象的类中没有,则会调用Object类中的
方法的重载:
--重载:在同一个类中,方法名相同,参数列表不同的两个方法称之为方法的重载(和访问修饰符,返回值类型,方法体没有关系)
方法的重写:
子类重写父类的方法,例如在类中重写toString的输出格式