面向对象基础

时间:2023-02-23 16:29:57

1. 类和对象

张老太养了两只猫猫:一只名字叫小白,今年 3 岁,白色。还有一只叫小花,今年 100 岁,花色。

请编写一个程序,当用户 输入小猫的名字时,就显示该猫的名字,年龄,颜色。

如果用户输入的小猫名错误,则显示 张老太没有这只猫猫。

1.1 传统代码实现很不方便 191

public class Test24
{
public static void main(String[] args)
{
//单独变量来解决
//单独变量来解决 => 不利于数据的管理(你把一只猫的信息拆解)
//第一只猫
String cat1Name="小白";
int car1Age=3;
String car2Color="白色";
//第二只猫
String cat1Name="小花";
int car1Age=100;
String car2Color="花色";

//数组
//数组 ===>(1)数据类型体现不出来(2) 只能通过[下标]获取信息,造成变量名字和内容
// 的对应关系不明确(3) 不能体现猫的行为
//第一只猫
String cat1[]={"小白","3","白色"};
//第二只猫
String cat2[]={"小花","100","花色"};
}
}

2. 类和对象的实现 192

2.1 一个程序就是一个世界,有很多事物(对象[属性, 行为])

类就是数据类型

对象就是一个具体的实例

面向对象基础

2.2 类与对象关系示意图

面向对象基础

3. 类和对象快速入门 193

张老太养了两只猫猫:一只名字叫小白,今年 3 岁,白色。还有一只叫小花,今年 100 岁,花色。

请编写一个程序,当用户 输入小猫的名字时,就显示该猫的名字,年龄,颜色。

如果用户输入的小猫名错误,则显示 张老太没有这只猫猫。

//使用面向对象的方式来解决养猫问题
//定义一个猫类Cat->自定义数据类型
class Cat
{
//属性
String name;
int age;
String color;
double weight;
//行为
}
public class Test24
{
public static void main(String[] args)
{
//使用oop面向对象解决
//实例化一只猫(创建一只猫)
//解读
//1. new Cat() 创建一只猫
//2. Cat cat1 = new Cat(); 把创建的猫赋给cat1
//cat1就是一个对象
Cat cat1 = new Cat();
cat1.name = "小白";
cat1.age = 3;
cat1.color = "白色";
cat1.weight = 10;
//创建第二只猫
//cat2就是一个对象
Cat cat2 = new Cat();
cat2.name = "小花";
cat2.age = 100;
cat2.color = "花色";
cat2.weight=20;
//怎么访问对象的信息呢
System.out.println("第一只猫的信息 "+cat1.name+" "+cat1.age+" "+cat1.color+" "+cat1.weight);
System.out.println("第二只猫的信息 "+cat2.name+" "+cat2.age+" "+cat2.color+" "+cat2.weight);
}
}

3.1 类和对象的区别和联系

1) 类是抽象的,概念的,代表一类事物,比如人类,猫类.., 即它是数据类型.

2) 对象是具体的,实际的,代表一个具体事物, 即 是实例.

3) 类是对象的模板,对象是类的一个个体,对应一个实例

4. 对象在内存中的存在形式 194

面向对象基础

5. 属性和成员变量 195

(1)从概念或叫法上看: 成员变量 = 属性 = field(字段) (即 成员变量是用来表示属性的,统一叫 属性)

(2)属性是类的一个组成部分,一般是基本数据类型,也可是引用类型(对象,数组)。比如我们前面定义猫类 的 int age 就 是属性

public class Test24
{
public static void main(String[] args)
{

}
}
class Car
{
//属性
String name;//属性,成员变量,字段field
int age;
String color;
double weight;
String []master;//属性可以是基本数据类型,也可以是引用类型(对象,数组)

//行为
}

6. 属性的注意事项和细节说明 196

1) 属性的定义语法同变量,示例:访问修饰符 属性类型 属性名;

简单的介绍访问修饰符: 控制属性的访问范围 有四种访问修饰符 public, proctected, 默认, private ,后面我会详细介绍

2) 属性的定义类型可以为任意类型,包含基本类型或引用类型

3) 属性如果不赋值,有默认值,规则和数组一致。

具体说: int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000, boolean false,String null

//属性的细节说明  196
public class Test24
{
public static void main(String[] args)
{
//创建一个Person对象
//p1是对象名(对象引用)
//new person()创建的对象空间(数据)才是真正的对象
Person p1 = new Person();
//对象的属性默认值,遵守数组的规则
//具体说: int 0,short 0, byte 0, long 0, float 0.0,double 0.0
//char \u0000, boolean false,String null

System.out.println("\n这个人的信息");
System.out.println("age="+p1.age+" name="+p1.name+" sal="
+p1.sal+" ispass="+p1.ispass);

}
}
class Person
{
//四个属性
int age;
String name;
double sal;
boolean ispass;
}

7. 如何创建对象与访问 197

7.1 创建

1) 先声明再创建

Cat cat ; //声明对象 cat

cat = new Cat(); //创建

2) 直接创建

Cat cat = new Cat();

7.2 访问

基本语法

对象名.属性名;

案例演示赋值和输出

cat.name ;

cat.age;

cat.color;

8. 类与对象的内存分配机制 198

面向对象基础

面向对象基础

public class Test24
{
public static void main(String[] args)
{
Person p1 = new Person();
p1.age = 10;
p1.name = "小明";
Person p2 = p1;//把p1赋给p2,或者说p2指向p1
System.out.println(p2.age);//10
}
}
class Person
{
int age;
String name;
}

9. Java 内存的结构分析 199

1) 栈: 一般存放基本数据类型(局部变量)

2) 堆: 存放对象(Cat cat , 数组等)

3) 方法区:常量池(常量,比如字符串), 类加载信息

9.1 Java 创建对象的流程简单分析

Person p = new Person();

p.name = “jack”;

p.age = 10

1) 先加载 Person 类信息(属性和方法信息, 只会加载一次)

2) 在堆中分配空间, 进行默认初始化(看规则)

3) 把地址赋给 p , p 就指向对象

4) 进行指定初始化, 比如 p.name =”jack” p.age = 10

10. 类与对象练习 200

10.1 判断输出

面向对象基础

10.1.1图解

面向对象基础

public class Test24
{
public static void main(String[] args)
{
Person a = new Person();//创建一个对象a
a.age=10;
a.name="小明";
Person b;//在创建一个对象b
b=a;
System.out.println(b.name);//小明
b.age=200;
b=null;//把b指向a的线路置空断掉了
System.out.println(a.age);//200
System.out.println(b.age);//会出现异常
}
}
class Preson
{
int age;
String name;
}