欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

从零开始学Java之六——类与对象

程序员文章站 2022-05-28 13:10:22
...

前言:

在面向对象中,类和对象是最基本、最重要的组成单元

一、类与对象的区别

类实际上是表示一个客观世界某类群体的一些基本特征抽象。对象就是表示一个个具体的东西。所以说类是对象的抽象,对象是类的具体
换个说法,类是对象的蓝图

二、类的定义

在 Java 中定义一个类,需要使用 class 关键字、一个自定义的类名和一对表示程序体的大括号。例:

public abstract/final class Dog{
	String name;
	int age;
	void bark(){
		
	}
}

例子中 / 表示或,意思是可以使用abstract或者final两个关键字修饰类,但是两者不可以同时出现。
对上述关键字进行描述:

1.public: 表示“共有”的意思。如果使用 public 修饰,则可以被其他类和程序访问。每个 Java 程序的主类都必须是 public 类,作为公共工具供其他类和程序使用的类应定义为 public 类。
2.abstract: 如果类被 abstract 修饰,则该类为抽象类,抽象类不能被实例化,但抽象类中可以有抽象方法(使用 abstract 修饰的方法)和具体方法(没有使用 abstract 修饰的方法)。继承该抽象类的所有子类都必须实现该抽象类中的所有抽象方法(除非子类也是抽象类)。
3.final: 如果类被 final 修饰,则不允许被继承。
4.class: 声明类的关键字。
5.Dog: 类的名称
6.String、int: 表示成员变量的类型
7.name、age: 表示成员变量的名称
8.bark: 成员方法名称

类的命名规则:

1.类的名字以下划线、或者字母开头,最好以字母开头。
2.第一个字母最好大写,若类名是由多个单词组成,则每个单词的首字母都最好大写
3.类名不能为Java中的关键字,如int,String等。

定义类:

1.声明一个类。编写类的最外层框架,声明一个名称为Dog的类

public class Dog{
	//类的主体	
}

2.编写类的属性:
通过在类中定义变量来描述类所具有的行为,这里的变量称为成员变量

public class Dog{
	String name;
	int age;	
}

3.编写类的方法
类的方法描述了类所具有的行为。

public class Dog{
	String name;
	int age;	
	void bark(){
		System.out.println("汪汪汪");
	}
}

其中成员变量和方法均可用以下关键字修饰:
public、protected、private: 用于表示成员变量的访问权限。
static: 表示该成员变量为类变量,也称为静态变量。
final: 表示将该成员变量声明为常量,其值无法更改。

可以在声明成员变量的同时对其进行初始化,如果声明成员变量时没有对其初始化,则系统会使用默认值初始化成员变量

初始化的默认数值如下:

类型 默认初始化值
整数型(byte,short,int,long) 0
单精度浮点型(float) 0.0f
双精度浮点型(double) 0.0d
字符型(char) “\u0000”
布尔型 false

数组引用类型的变量的默认值为 null。如果创建了数组变量的实例,但没有显式地为每个元素赋值,则数组中的元素初始化值采用数组数据类型对应的默认值。

三、对象的创建

对象是对类的实例化。对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为。

Java对象的创建方法分为显示创建和隐式创建:

显示创建:
1.使用 new 关键字创建,这是最常见的创建对象的方法,语法如下:

类名 对象名 = new 类名();

2.调用 java.lang.Class 或java.lang.reflect.Constuctor 类的 newlnstance() 实例方法,代码格式如下:

java.lang.Class Class 类对象名称 = java.lang.Class.forName(要实例化的类全称);
类名 对象名 = (类名)Class类对象名称.newInstance();

3.3. 调用对象的 clone() 方法。方法不常用,使用该方法创建对象时,要实例化的类必须继承 java.lang.Cloneable 接口。 调用对象的 clone() 方法创建对象的语法格式如下:

类名对象名 = (类名)已创建好的类对象名.clone();

4.调用 java.io.ObjectlnputStream 对象的 readObject() 方法

演示一下前三种创建对象的方法:

public class Dog implements Cloneable{
	// 实现 Cloneable 接口
	String name;
	int age;	
	void bark(){
		System.out.println("汪汪汪");
	}
	public static void main(String[] args)throws Exception {
		//使用new关键字创建对象
		Dog d1 = new Dog();
		// 调用 java.lang.Class 的 newInstance() 方法创建对象
		Class c1 = Class.forName("Dog");
		Dog d2 = (Dog)c1.newInstance();
		// 调用对象的 clone() 方法创建对象
        Dog d3 = (Dog)d2.clone();
	}
}

对上述示例的说明如下:
1.使用 new 关键字或 Class 对象的 newInstance() 方法创建对象时,都会调用类的构造方法。
2.使用 Class 类的 newInstance() 方法创建对象时,会调用类的默认构造方法,即无参构造方法。
3.使用 Object 类的 clone() 方法创建对象时,不会调用类的构造方法,它会创建一个复制的对象,这个对象和原来的对象具有不同的内存地址,但它们的属性值相同。

隐式创建
除了显式创建对象以外,在 Java 程序中还可以隐含地创建对象,例如下面几种情况。

1.String strName = “strValue”,其中的“strValue”就是一个 String 对象,由 Java 虚拟机隐含地创建。

2.字符串的“+”运算符运算的结果为一个新的 String 对象,示例如下:

String str1 = “Hello”;
String str2 = “Java”;
String str3 = str1+str2; //str3引用一个新的String对象

无论釆用哪种方式创建对象,Java 虚拟机在创建一个对象时都包含以下步骤:
1.给对象分配内存。
2.将对象的实例变量自动初始化为其变量类型的默认值。
3.初始化对象,给实例变量赋予正确的初始值。

注意:每个对象都是相互独立的,在内存中占有独立的内存地址,并且每个对象都具有自己的生命周期,当一个对象的生命周期结束时,对象就变成了垃圾,由 Java 虚拟机自带的垃圾回收机制处理。