Java笔记 第四章 Java面向对象编程基础 第三部分(对象概述)
一开始学习面向对象的时候,总是分不清类和对象,容易把概念混淆。后面发现其实很简单,用一句话概括:类是程序员在编程中所用来描述某一些具有共同特征属性的事物的抽象体,相当于所要创建的对象模板,比如说人类;而对象是类的一个具体的、实际存在的实例。比如说中国人,美国人,相对于“人”这一个类来说,就更具体一些了。他们有共同特征:会说话。但说的语言不一样,中国人说汉语,美国人说英语。属性一样,属性值不一样,这里后面会讲。又比如员工类Employee是程序员在程序中定义的,具有员工特性的一类人的抽象体。具体某个员工“张三”、“李四”,就是员工类的对象,是类的具体表现。因此,没有类就无法创建对象,而光有类没有对象也是无法使用的。
下面讲解如何利用定义好的类来声明并创建对象,以及如何正确使用对象。
1、对象的声明及创建
对象的声明如同变量的声明一样,可以看作是程序员在程序中声明了一个自定义类型的变量,使用该变量保存该类的对象。
对象声明的语法格式如下:
类名 对象名;
创建对象是为了给对象分配内存空间,并进行初始化。
使用new关键字可以完成对象的创建:
对象名 = new 类构造方法();
在使用的时候,通常将对象的声明与创建写在同一句中,一次性完成。
类名 对象名 = new 构造方法();
学习任务:自定义一个Employee雇员类,在类中实现三个雇员对象的声明和创建。
对象的声明和创建:
</pre><p></p><p> <img src="https://img-blog.csdn.net/20151223173247124?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p> </p><p>2、调用对象的方法</p><p>在创建了类的对象以后,就可以通过对象调用其内部的方法,从而实现操作。</p><p>学习任务:创建三个雇员类对象,使用对象中的方法来操作对象的属性值。</p><p>调用对象的方法示例:<span style="font-family:Calibri">ObjectSkill.java</span></p><p><span style="color:rgb(127,0,85)"></span></p><pre name="code" class="java">package com.book;
public class ObjectSkill
{
public static void main(String[] args)
{
System.out.println("The Employee Information Show"+"\n");
//使用Employee构造方法创建不同的对象
EmployeeInformation e1 = new EmployeeInformation();
EmployeeInformation e2 = new EmployeeInformation("zhangsan",6000.00,"2015/5/20");
EmployeeInformation e3 = new EmployeeInformation("lisi",5000.00,"2015/12/20");
//显示雇员e1对象的信息
System.out.println("Show the e1 employee information:");
System.out.println("name:"+e1.getName());
System.out.println("salary:"+e1.getSalary());
System.out.println("hireday:"+e1.getHireDay()+"\n");
//显示雇员e2对象的信息
System.out.println("Show the e2 employee information:");
System.out.println("name:"+e2.getName());
System.out.println("salary:"+e2.getSalary());
System.out.println("hireday:"+e2.getHireDay()+"\n");
//显示雇员e3对象的信息
System.out.println("Show the e3 employee information:");
System.out.println("name:"+e3.getName());
System.out.println("salary:"+e3.getSalary());
System.out.println("hireday:"+e3.getHireDay()+"\n");
//改变e1雇员的信息后输出
System.out.println("Show the e1 employee information after modified:");
e1.setName("wangwu");
e1.setSalary(3000.00);
e1.setHireDay("2015/12/20");
System.out.println("name:"+e1.getName());
System.out.println("salary:"+e1.getSalary());
System.out.println("hireDay:"+e1.getHireDay()+"\n");
}
}
class EmployeeInformation //自定义子类雇员类
{
//定义变量
private String name;
private double salary;
private String hireDay;
//定义方法1,采用无参数的构造方法
public EmployeeInformation()
{
name = "admin";
salary = 8000.00;
hireDay = "2015/1/10";
}
//定义方法2,采用带参数的构造方法
public EmployeeInformation(String name,double salary,String hireDay)
{
this.name = name;
this.salary = salary;
this.hireDay = hireDay;
}
//用于获取雇员信息的方法,采用无参数 带返回值的构造方法
public String getName()
{return name;}
public double getSalary()
{return salary;}
public String getHireDay()
{return hireDay;}
//用于设置雇员信息的方法
public void setName(String name)
{this.name = name;}
public void setSalary(double salary)
{this.salary = salary;}
public void setHireDay(String hireDay)
{this.hireDay = hireDay;}
}
3、对象的生存周期
在Java语言中,对象的生存周期是由Java虚拟机控制的。当使用“new Object()”语句生成一个新的对象时,Java虚拟机会在计算机内存中声明一块区域,用来存储对象,只有Java的垃圾回收器才能决定,在适当的时候回收对象,并释放该对象所占用的内存。
4、对象的清理
在使用构造函数创建对象时,所创建的对象获取了内存等各种系统资源。因此当不再使用该对象的时候,就应该释放对象所占用的系统资源。Java语言实现了自动执行垃圾收集的公作,但是在实际使用当中,还是会出现内存泄漏的情况。在这种情况下,程序员就应该养成良好的习惯,当程序中有不再需要使用的对象时,就应该对该对象赋值null,这样会通知垃圾回收器有需要回收的对象。但要注意的是,垃圾回收器并不会立刻进行收集,同时程序员是无法对垃圾回收器进行直接控制的。
在程序中调用垃圾回收器有两种方式,分别是使用System.gc()方法和Runtime.getRuntime().gc()方法。调用这两种方法同样不会让垃圾回收器立刻执行,只是给垃圾回收器一个信息、发送一个请求,通知其有需要回收的对象,以便释放占用的资源。