类在java语言中是一个数据类型,以class关键词+类名表示。是一个模糊的概念、
类在生活中可以这样理解:
猫是一个类:猫类(class Cat)
猫有品种:田园猫 布偶猫 金渐层 …
猫有年龄,花色,等这些特征 而且这些特征是每只猫(世界上所有的猫)都有的特征 这个在java中叫做类的属性
猫是一个动物,不但有特征还有行为:跳 跑 走 睡觉 吃 等等…这些行为也是每只猫都会的 这个在java中叫做类的方法
同理 人也是一个类 人类(class Person)人的属性有 年龄age 名字name 国籍nationality 人的方法有 学习 study 吃eat 跑run 等
从上面了解到了什么是类。那么同理现实生活中也有对象,类就相当于你知道了这个世界上有一种动物叫猫,但是你没见过。
对象在java中是类的实例, 例如现在有一只猫,名字叫大黄,那么这个大黄就是对象。大黄是猫类的具体实例,他有猫类的属性,年龄 12 品种田园 花色黄色 同理也有猫类的方法 会跑 会吃 。
大黄也可以有自己的行为(方法),比如大黄会唱歌,其他猫类不一定会,这是大黄独有的行为(方法)
小李也是一个对象。是人类的实例化,名字叫小李 年龄25 国籍中国 会跑步。也有自己的方法 会编程
总结:类 是一个模板,对象就是通过这个模板实例出来的具体的事物。这个过程叫做实例化
使用类和对象解决以下问题:
张婆婆养了两只猫:
一只叫小白 3岁 白色
一只叫小花 7岁 花色
编写一个程序,当用户输入小猫名字的时候就显示该猫的属性,如果没有就显示张婆婆没有这只猫
思路
1-创建一个 Cat 类,创建属性 名字 年龄 颜色
2-实例化两个对象,并把对象的属性赋值
3-在主程序使用判断语句打印输出对应的对象属性
public class OOP1{
public static void main(String[] args) {
//实例化猫类并赋值
Cat xiaobai =new Cat();
xiaobai.name = "小白";
xiaobai.age = 3;
xiaobai.color = "白色";
//实例化第二只猫
Cat xiaohua =new Cat();
xiaohua.name = "小花";
xiaohua.age = 7;
xiaohua.color = "花色";
//使用判断语句输出对应对象的属性
Scanner mysc = new Scanner(System.in);
System.out.println("请输入小猫的名字:");
String sr = mysc.next();
if (sr.equals(xiaobai.name)) {//对比
System.out.println(xiaobai.name+xiaobai.age+xiaobai.color);
}else if(sr.equals(xiaohua.name)){//对比
System.out.println(xiaohua.name+xiaohua.age+xiaohua.color);
}else{
System.out.println("张婆婆没有这只猫");
}
}
}
class Cat{//创建猫类
//创建类的属性
String name;
int age;
String color;
}
Cat xiaobai =new Cat();
xiaobai.name = “小白”;
xiaobai.age = 3;
xiaobai.color = “白色”;
这段代码是实例化了Cat类 并对其进行了赋值,那么在内存中也是有对应的操作的
与数组同理对象采用的也是引用传递,对象名保存在栈中根据地址指向堆,对应的堆中如果是字符串类型那么保存的就是一个指向方法区常量池的地址,如果是基本数据类型那么保存就就是数据本身
例如:xiaobai.name = “小白”; 就是一个String类型,在堆中保存的就是指向方法区常量池的地址,"小白"这个字符串就在常量池中
xiaobai.age = 3;就是一个基本int类型,在堆中保存的就是“3”这个数据本身
那么Cat类的 “类”信息也会加载在方法区中,属性,方法等
具体内存如图所示:

重点 Cat xiaobai =new Cat(); :在这个语句中代表new一个Cat类型的空间给 xiaobai 。对象不是xiaobai ,对象是在堆中的空间属性信息和这个对象的信息(常量池中也有)。就像一个人叫小明 “小明”只是他的名字 有血有肉的人才是对象
在类中和实例化的对象中有自己的属性,(像是现实世界中的 人“类”的特征: 性别 肤色 国籍)和方法(人类的行为:学习 跑 吃)
那么在java中 属性也被叫做成员变量或者field 即- 属性=成员变量=field
属性是类的一个组成部分,一般是基本数据类型,也可以是引用类型(对象 数组)例如上面定义 Cat类的 name age color变量就是属性
属性的注意事项
1-属性的定义语法同变量,:访问修饰符 属性类型 属性名; (默认访问修饰符可以不用写)
2-属性的定义可以为任意类型,包含基本类型和引用类型
3-属性如果不赋值,会有默认值,规则和数组一致 (数字类型都是0 字符串是null 布尔类型是false)