第一章 认识类与对象
JAVA类和对象
面向对象最关键的两个词汇是类与对象,实质上可以将类看作对象的抽象,它定义了对象所具有的属性和方法。学习 Java 语言必须掌握类与对象,这样可以从深层次理解 Java 这种面向对象语言的幵发理念。因此,掌握类与对象是学习 Java 语言的基础,可以使开发人员更好、更快地掌握 Java 编程思想与编程方式。
类与对象的概念
● 类:类是一个模板,它描述一类对象的行为和状态。
(1)什么是类?类是分类和类别的意思
通过分类,可以区别不同的事物种类,
类是一组具有共同特性(属性)与行为(方法)的事物集合
(2)类与对象之间的关系
对象:对象是类的一个实例(对象不是找个男/女朋友),而是有状态和行为
例如,一只猫咪是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等
类表示一个共性的产物,是一个综合的特征,是一个个性的产物,也是一个个体的特征
类由属性和方法组成
属性:相当于一个个的特征
方法:相当于人的一个个的行为,如,说话,吃饭…
老虎为什么不是人?因为它不具备“人”这个群体的属性与方法,老虎不会直立行走,不会使用工具等,所以说老虎不是人!也就是说,类是概念模型,定义对象的所有特性和所需的操作,对象是真实的模型,是一个具体的实体。
综上所述,类是描述实体的“模板”和“原型”,它定义了属于这个类的对象所应该具有的状态和行为。比如一名学生在上课。一名正在上课的学生是类,它定义的信息有:姓名、上课。
使用该类定义的不同姓名的人在上课是对象,他们可能是小明、小红、小丽、张会等。在 Java 面向对象编程中,用自定义的类模型可以创建该类的一个实例,也就是对象。
类是实体对象的概念模型,因此通常是笼统的、不具体的。关于类和对象,初学者在理解上是存在一定难度的.如下表所示
类 | 对象 |
人 | 正在清洁的环卫工人小刘 |
教室里的学生张丽 | |
汽车 | 一辆黄色的宝马跑车 |
一辆白色的林肯轿车 | |
动物 | 一只叫“猫咪”的小花猫 |
一只叫“欢欢”的贵宾犬 |
类的定义格式
类的定义格式代码
[修饰符] class 类名{
1~n个构造方法;
0~n个字段;
0~n个方法;
}
定义一个Demo类
类名和方法名:类名 首字母大写 方法名首字母小写
class Demo{ String str = "Good"; //成员变量,也成为字段,类或对象所包含的数据,对类状态的一种描述 方法,相当于类或对象的特征或行为 public void show(){ System.out.println("输出"+str); } } </code></pre>
一个类可以包含以下类型变量:
● 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量
变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
● 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化
成员变量可以被类中方法、构造方法和特定类的语句块访问。
● 类变量:类变量也声明在类中,方法体之外,但必须声明为static类型
new运算符
new在 Java 中意思是新的,可以说是 Java 开发者最常用的关键字。在 Java 中 new 的操作往往意味着在内存中开辟新的空间,这个内存空间分配在内存的堆区。
堆是用来存放由 new 创建的对象和数组,即动态申请的内存都存放在堆区。栈是用来存放在方法中定义的一些基本类型的变量和对象的引用变量
Java 中一般使用 new 来创建对象,它可以动态地为一个对象分配地址.格式如下
类名称 对象名称 = new 类名称();
new 运算符是在运行期间为对象分配内存的,这使得内存的分配更加灵活和高效,你的程序在运行期间可以根据实际情况来合理地分配内存。
对象的引用、比较和销毁
对象是根据类创建的,在Java中,使用关键字new来创建一个新的对象,创建对象需要以下三步:
● 声明:声明一个对象,包括对象名称和对象类型。 ● 实例化:使用关键字new来创建一个对象。 ● 初始化:使用new创建对象时,会调用构造方法初始化对象。
一个类要想真正的进行操作,则必须依靠对象,对象的定义如下: 类名称 对象名称 = new 类名称(); 这样的格式就产生了对象
如果想要访问类中的属性和方法(方法的定义),则可以依靠以下语法:
访问类中的属性:对象.属性
调用类中的方法: 对象.方法()
对象的比较有“==”运算符和equals()方法两种。equals()方法是String类中的方法,用于比较两个对象引用所指的内容是否相等;而“==”运算符比较的是两个对象引用的地址是否相等。
对象的销毁利用的是Java中的垃圾回收机制,用户不必担心废弃的对象占用内存,垃圾回收器将回收无用的占用内存的资源。会被Java虚拟机视为垃圾的对象主要包括以下两种情况:
(1) 对象引用超过其作用范围;
(2) 将对象赋值为null;
虽然垃圾回收机制已经很完善,但垃圾回收器只能回收那些由new操作符创建的对象。所以Java中提供了一个finalize()方法,如果用户在类中定义了finalize()方法,在垃圾回收时首先调用该方法,并且在下一次垃圾回收动作发生时,才能真正的回收对象占有的内存。由于垃圾回收不受人为控制,Java还提供了System.gc()方法强制启动垃圾回收器,作用是告知垃圾回收器来清理。
JAVA类的方法
Java方法是语句的集合,它们在一起执行一个功能。
方法是解决一类问题的步骤的有序组合
方法包含于类或对象中
方法在程序中被创建,在其他地方被引用
方法的优点
- 使程序变得更简短而清晰。
- 有利于程序维护。
- 可以提高程序开发的效率。
- 提高了代码的重用性。
方法的命名规则 方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。 方法的定义 一般情况下,定义一个方法包含以下语法:
修饰符 返回值类型 方法名(参数类型 参数名){
方法体 return 返回值;
} </code></pre>
其中:
1、 访问修饰符:方法允许被访问的权限范围, 可以是 public、protected、private 甚至可以省略 ,其中 public 表示该方法可以被其他任何代码调用,其他几种修饰符的使用在后面章节中会详细讲解滴
2、 返回值类型:方法返回值的类型,如果方法不返回任何值,则返回值类型指定为 void ;如果方法具有返回值,则需要指定返回值的类型,并且在方法体中使用 return 语句返回值
3、 方法名:定义的方法的名字,必须使用合法的标识符
4、 参数列表:传递给方法的参数列表,参数可以有多个,多个参数间以逗号隔开,每个参数由参数类型和参数名组成,以空格隔开
根据方法是否带参、是否带返回值,可将方法分为四类:
无参无返回值方法
无参带返回值方法
带参无返回值方法
带参带返回值方法
如果方法不包含参数,且没有返回值,我们称为无参无返回值的方法。
方法的使用分两步:
第一步,定义方法
第二步,调用方法
当需要调用方法执行某个操作时,可以先创建类的对象,然后通过对象名.方法名();来实现
综合演示案例
创建人类,定义吃的方法并显示信息
class Person
{
public int age; //声明公共字段age
private String name; //声明私有字段name
public String getName() { return name; } public void setName(String name) { this.name = name; } /** * 定义无参构造函数,注意无返回值定义,方法与类同名 */ public Person() { System.out.println("构造方法"); } /** * 定义无参数的eat方法 */ public void eat() { System.out.println("吃"); } /** * 定义带参数的eat方法,实现方法重载 * @param s */ public void eat(String s) { System.out.println("吃"+s); }
public static void main(String[] args) { //创建对象,调用类的无参构造 Person person1 = new Person(); person1.age = 20; //给对象的公有字段直接赋值 person1.setName("张三"); //使用公共方法才能给对象的属性赋值 System.out.println("第一个人信息,姓名:"+person1.getName()+"年龄:"+person1.age); person1.eat(); //调用对象的无参方法 //创建第二个 Person person2 = new Person(); person1.age = 16; //给对象的公有字段直接赋值 person1.setName("李四"); System.out.println("第二个人信息,姓名:" + person2.getName() + "年龄:" + person2.age); person2.eat(" 馒头"); //调用对象的有参方法 }
} </code></pre>
作业
1.一个英雄可以有名称,血量,护甲,移动速度,还有 其他你想到的,作为新的属性,加入到英雄上面
class Hero{
String name;//名称
int hp;//血量
int armor;//护甲
int move;//移动
/** * 展示英雄信息 */ public void show(){ System.out.println("我的名字是"+name+"初始属性:\n血量"+hp+"\n护甲"+armor+"\n移动"+move); }
} </code></pre>
2.分析你的笔记本拥有的属性,比如品牌,颜色,配置信息等,添加展示信息的方法
class Computer{
String brand;//品牌
String color;//颜色
int card;//显卡
int cpu;//CPU
/** * 展示英雄信息 */ public void show(){ System.out.println("我的电脑品牌是"+brand+"颜色是"+color+"配置信息,显卡"+card+"CPU"+cpu); }
} </code></pre>