类与对象
1.面向对象思想
就是将做一件事(实现某个功能)通过创建对象,然后调用对象的行为来实现
2.与面向过程(思想)的区别
面向过程是自己一步一步的操作去实现功能,面向对象是把实现功能的部分交给对象的属性和行为去实现
3.类
具有相关属性和行为的一种事物的集合,比如说宠物猫、装水的杯子...等等
例如:宠物猫:
属性:颜色、重量...
行为:爬树、抓老鼠...
4.类的定义
格式:
public class ClassName {
//成员变量
//成员方法
}
5.对象
每一种事物都有自己的属性和行为,好比如宠物猫,这是一个总的概述,他有自己的属性(品种、颜色、重量、叫声...),而对象就是指明的一只猫,他的各种“属性”都是确定的,那么对于宠物猫这个总述,这只猫就是一个“对象”。
6.对象的创建和使用
创建格式:
类名 对象名 = new 类名();
使用格式:
对象名.成员变量;
对象名.成员方法();
7.类与对象的关系
类是对一类事物的描述,是抽象的。 对象是一类事物的实例,是具体的。 类是对象的模板,对象是类的实体。
类是对一类事物总的概括,对象是具体的哪一个
8.成员变量的默认值
整数: 0
浮点数: 0.0
boolean: false
字符: ‘\u0000’(空字符)
字符串: null
9.成员变量与局部变量的区别
1定义位置不同:
成员变量定义在类中方法外,局部变量定义在方法内
2默认值不同:
成员变量的默认值如上,局部变量不赋值不可以调用
3内存中的位置不同:
对象是new出来,对象在堆里,成员变量跟着对象在堆里面,栈是保存变量,运行方法,局部变量跟着方法在栈里
4生命周期不同:
对象是new出来,跟对象诞生,所以成员变量跟着对象死亡,局部变量跟着方法的运行诞生,跟着方法死亡
封装
1.封装
将属性隐藏起来,相当于建立起了一层保护屏障,防止数据和代码被其他类随意访问。如果要访问,必须通过指定的方式。让代码更容易理解和维护,增加了安全性。
2.封装的方法
使用private(私有的)关键字修饰成员变量或成员方法。
3.设置器
getXxx方法,设置访问封装的成员变量值
4.访问器
getXxx方法,获取封装的成员变量值
例子:
5.IDEA自动生成getters/setter
右键选择,GenerateàGetter and Setterà选择成员变量点击OK
快捷键:ALT + insert
6.成员变量为boolean的访问器
isXxx访问器
setXxx 设置器
构造方法
1.封装的优化1:this关键字
this代表所在类的当前对象的引用(地址值),即对象自己的引用。(方法被哪个对象调用,方法中的this就代表那个对象)
方法参数中的变量名和成员变量的变量名相同时,用this关键字来区分
使用格式:
this.成员变量名;
2.封装的优化2:构造方法
1.当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值
2.如果没有定义构造方法,Java默认赠送一个无参的构造方法,如果创建了则不赠送
3.构造方法的写法上,方法名与它所在的类名相同。它没有返回值,所以不需要返回值类型,不需要void。
3.封装的优化3:构造方法-重载
和方法重载一样,参数列表不同,方法名相同
1.只能new调用,用来创建对象
2.给成员变量赋值
开发中一般 写一个无参构造方法,写一个全参构造方法
4.IDEA自动生成构造方法
右键选择 generateàconstructorà选择成员变量(构造方法的参数)
可以参考自动生成get、set方法的图示
5.构造方法注意事项
1.自己不定义构造方法,系统会送一个 无参
2.自己定义了构造方法,系统不送
3.构造方法可以重载,项目中,写一个无参,全参
6.标准的JavaBean类
a) 成员变量必须private
b) 配套get/set
c) 构造方法
d) 其他方法
示例:测试类如下
package com.itheima.day06;
public class Test01 {
//两个成员变量
private String name;
private int age;
//无参数的构造方法
public Test01() {
System.out.println("这里是无参构造方法,用来初始化变量");
}
//有参数(全参)的构造方法
public Test01(String name, int age) {
this.name = name;
this.age = age;
}
//成员变量name配套的get方法
public String getName() {
return name;
}
//成员变量name配套的set方法
public void setName(String name) {
this.name = name;
}
//成员变量age配套的get方法
public int getAge() {
return age;
}
//成员变量age配套的set方法
public void setAge(int age) {
this.age = age;
}
//其他方法
public void show(Test01 test){
System.out.println("姓名:"+name+"年龄:"+age);
System.out.println("这是类中的其他方法,可以把创建的对象传递过来");
System.out.println("这个方法里面可以无条件调用private的成员变量");
}
public static void main(String[] args) {
}
}
调用如下:
package com.itheima.day06;
public class Test02 {
public static void main(String[] args) {
Test01 test1 = new Test01();//创建一个对象,调用无参构造方法
Test01 test2 = new Test01("张三",18);
test1.show(test1);
test2.show(test2);
}
}
输出如下: