类和对象
引入
面向过程
-
以功能为基础,自顶向下、逐步细化。
-
缺陷:
- 代码重用性低
- 代码可维护性差
- 数据和操作分离,不能保证数据安全
面向对象
- 将数据、操作分装成类,以类的对象为程序的基本元素。通过向对象发送消息,调用方法完成功能。
- 特点:
- 数据安全
- 基本元素为对象
- 代码重用率高,维护量小
- 程序= 对象 + 对象 + 对象
类和对象
类:现实世界中具有相同属性和行为的物理实体的抽象。
对象:现实世界具体的物理实体,每个对象有特定的属性和行为
关系
[类]是对[对象]的抽象。是创建对象的蓝图,描述了所创建对象共同的属性和行为。
-
学生
- 属性
- 姓名
- 年龄
- 性别
- 年纪
- 行为
- 学习
- 属性
-
猫
- 属性
- 名字
- 颜色
- 品种
- 行为
- 吃饭
- 舔毛
- 属性
[对象]是[类]的实例。
-
小强
- 属性
- 姓名:小强
- 年龄:13
- 性别:男
- 年纪:初一
- 行为
- 学习
- 属性
-
咪咪
- 属性
- 名字:咪咪
- 颜色:橘色
- 品种:土猫
- 行为
- 吃饭
- 舔毛
- 属性
Java实现
类:同种对象的集合和抽象,是具有共同行为和属性的对象的统一描述体。抽象的数据类型。
对象:现实世界某个具体物理实体在计算机逻辑中的映射、体现。
类:通常即包含成员属性和成员方法的抽象数据类型
//类
//权限修饰符 class 类名{
// 权限修饰符 成员的声明和定义;
//}
class Cat{
//属性
int id;
String name;
int age;
String type;
Color color;
//行为
public void eat(){
System.out.println("吃饭");
}
public void lick(){
System.out.println("舔毛");
}
}
对象:类型创建的实例
//1.类名 对象名 = new 类名(参数);
//2.类名 对象名;
// 对象名 = new 类名(参数);
class Demo{
public static void main(String args[]){
//对象
Cat cat = new Cat();
Cat cat2;
cat = new Cat();
}
}
注意:
- class是声明类的而关键字。
- 类名是标识符,开头首字符大写。
- 类包含成员属性、成员方法;成员属性声明必须以
;
结束。 - 定义一个类 = 定义一个类型和一个作用域。
- 类只是抽象的数据类型,类对象才是具体可操作的实体。
类成员
类成员的访问
- 对象名.属性名
- 对象名.方法名(参数);
//实例化对象
Cat cat = new Cat();
//访问对象属性
System.out.printtln(cat.name);
//访问对象方法
cat.lick();
类成员的修饰
访问权限修饰符 | 类内 | 类外 |
---|---|---|
解释 | 本类成员方法访问 | 被本类对象引用 |
public |
![]() |
![]() |
private |
![]() |
![]() |
为体现Java语言的三大特征的之一 封装,通过访问修饰符来实现信息隐藏
封装的实现:
- 成员属性用
private
修饰 - 成员方法用
public
修饰
成员属性默认值
成员属性类型 | 默认值 |
---|---|
boolean |
false |
char |
'u0000' |
byte |
0 |
short |
0 |
int |
0 |
long |
0L |
float |
0.0f |
double |
0.0 |
引用类型 | null |
成员方法
在面向对象语言中,方法是不能脱离类来存在。方法必须在类内部
//方法修饰符 返回值 方法名(参数){
// 方法体;
//}
-
返回值类型
void
不需要返回值。- 返回值用
return
语句实现,return
返回的值必须与方法返回值一致。
//不需要返回值 void add(){} //需要返回值 int get(){ return 1; }
-
方法名
- 遵循java标识符规则
- 有意义
-
参数列表
- 可没有参数
,
分隔多个参数- 参数类型是Java语言的任何数据类型
add(){} delete(int i,int j){} put(int[] arr,HashMap map){}
-
方法体
- 实现功能的Java语言代码
- 用
{}
括 - 可定义局部变量,只能在方法体内使用
方法传参
参数传递
- 值传递:方法接收的是调用者提供的变量的值
- 地址传递:方法接收的是调用者提供的变量地址
区别:
- 值传递不能通过形参修改实参的值。
- 地址传递可以通过形参修改实参对应变量的值。
Java方法参数类型: 更多了解
- 基本数据类型:
- 整数类型
- 浮点类型
- 字符类型
- 布尔类型
- 引用数据类型:
- 类
- 接口
- 数组
- 枚举
- 当参数是基本数据类型时,方法不能修改实际参数的值。
- 当参数是引用类型时,方法通过地址引用改变了实际参数对象的内容
方法重载
方法重载:同一个类有两个或多个同名方法,但参数类型、个数或顺序不同
前提依据
- 同一作用域(类)
- 方法名相同
- 参数列表不同
//在同一类中,以下均为重载方法
public class Demo{
//1.无参
public void add(){
System.out.println("我的名字叫add");
}
//2.有参,参数个数不同
public void add(int age,String tall){
add();
System.out.println("我的年龄是"+age + "身高是" + tall);
}
//3.参数相同,顺序不同
public int add(String tall,int age){
//可以相互调用
add(age,tall);
return age;
}
//4.参数类型不同
public int add(int age){
return age;
}
}
注意:
- 返回值类型可以不同,无依据
- 静态、动态可以不同,无依据
- 重载方法可以互相调用
构造方法
初始化
定义对象时,为对象赋初值;开辟内存单元,对数据成员给出明确值
构造方法分析
构造方法 | 含义 |
---|---|
功能: | 初始化对象 |
方法名: | 类同名 |
参数: | 可有可无 |
返回值: | 不指定 |
内容: | 任意,初始化赋值语句 |
调用: | 通过new创建对象时自动调用 |
public class Cat{
//成员属性
private String name;
//成员定义方法
public void setName(String str){
this.name = str;
}
public String getName(){
return name;
}
//当类没有手动定义方法,系统会定义一个无参的构造方法
//构造方法1
public Cat(){
System.out.println("构造方法1");
}
//构造方法2
public Cat(String str){
this.name = str;
System.out.println("构造方法2");
}
}
注意
- 对象的声明周期中,构造方法只调用一次
- 当类没有手动定义方法,系统会定义一个无参无内容的构造方法
- 只要类有声明的构造方法,系统不会定义无参的构造方法
- 一个类可有多个构造方法,参数列表不能相同
- 构造方法实现时,可通过
this
调用已存在的构造方法
this关键字
-
引用本类的方法或属性
this.属性;
this.方法();
this.name = "咪咪"; this.lick();
-
调用本类的构造方法
this()
或this(参数)
- 只能放在重载的构造方法的第一行
public class Cat{ //成员属性 private String name; //成员定义方法 public void setName(String str){ this.name = str; } public String getName(){ return name; } //当类没有手动定义方法,系统会定义一个无参的构造方法 //构造方法1 public Cat(){ System.out.println("构造方法1"); } //构造方法2 public Cat(String str){ this.name = str; System.out.println("构造方法2"); } //构造方法3 public Cat(String str,int age){ this(str); System.out.println("构造方法3"); System.out.println("年龄为"+ age); } }
-
返回值
- 返回当前调用方法的对象的引用
//eat的方法如下 public Cat add(){ System.out.println("大吃一斤猫粮"); return this; } public static void main(String args[]){ Cat cat = new Cat(); cat.eat().eat(); }
面向对象三大特性
垃圾收集
C语言与Java语言的垃圾收集机制不同,
本文类与对象l和垃圾收集机制息息相关,不可不看哦(●'◡'●)
博客相关java项目:查看Github项目
对应github项目:Demo3
导入项目的方法: Java基础——Java如何导入本地项目