在Java中,一切皆对象。
目录
一、类的定义和使用
在Java中,我们通过类来描述对象。
类的定义:Java类是面向对象编程中的基本构建模块,用于描述对象的属性(成员变量)和行为(方法)。
1.1类的定义格式
Java类的定义格式如下:
[访问修饰符] class 类名 {
// 成员变量(属性)
// 构造方法
// 方法
}
一个类应该有以下几部分组成:类声明、成员变量、成员方法、构造方法、访问修饰符。
1.2定义学生类
class Student{
//成员变量
public String name;
public String gender;
public short age;
public double score;
//方法
public void DoClass(){}
public void DoHomework(){}
public void Exam(){}
}
我们定义类时应该注意一下注意事项:
二、类的实例化
我们首先要知道,我们定义一个类时其实就是在计算机当中自定义了一个类型,就像int、double一样,只不过类这个类型时我们自己定义的而已,而int、double这样的类型是Java语言自带的内置数据类型。
有了类这个类型(可以理解为我们自己定义的一种自定义类型)之后,我们就可以利用类这个类型来定义实例(也称对象)了,这个过程就称为类的实例化。
举个例子:
下面有一个Teacher类,请看:
class Teacher{
//成员变量或字段
public String name;
public int age;
public int ID;
//成员函数
public void work(){
System.out.println("今天的工作是教学");
}
public void wages(){
System.out.println("本月的工资为10000");
}
}
我们现在实力化一个Teacher类对象,请看:
public class Test2 {
public static void main(String[] args) {
//通过new来实例化一个Teacher对象
Teacher t1 = new Teacher();
t1.name = "李华";
t1.age = 25;
t1.ID = 123456;
System.out.println(t1.name);
System.out.println(t1.age);
System.out.println(t1.ID);
t1.work();
t1.wages();
}
}
运行结果如下:
关于类的实例化这里有以下几点需要注意:
三、this引用
3.1this引用是什么
概念:this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。
下面是日期类对象,请看:
class Date {
public int year;
public int month;
public int day;
public void setDay(int year, int month, int day){
this.year = year;
this.month = month;
this.day = day;
}
public void printDate(){
System.out.println(this.year + "-" + this.month + "-" + this.day);
}
}
public class Test3 {
public static void main(String[] args) {
//先构造3个日期类对象
Date d1 = new Date();
Date d2 = new Date();
Date d3 = new Date();
//对每个对象的成员变量进行赋值
d1.setDay(23,8,30);
d2.setDay(23,8,31);
d3.setDay(23,9,1);
//对每个日期类对象进行打印
d1.printDate();
d2.printDate();
d3.printDate();
}
}
运行结果如下:
注意
:关键字this用于引用当前对象,即调用当前方法的对象。它可以在对象的成员方法中引用当前对象的成员变量和方法。
请看举例:
class MyClass {
private int value;
public void printValue() {
System.out.println(this.value); // 使用this引用当前对象的成员变量
}
}
3.2this引用特性
this引用有如下几个特性:
四、对象的构造及初始化
4.1如何初始化对象
我们先来看一个问题,如果一个对象没有对其成员变量赋值的话,那能不能打印其成员变量呢?依然是那日期类对象来进行举例:
运行结果如下:
可以看到这里并没有报错。因为如果我们没有显式的初始化对象的成员变量,那么编译器就会默认将对象的成员变量进行初始化。
4.2构造方法
我们也可以通过构造方法来对对象进行初始化。
构造方法概念:构造方法(也称为构造器)是一个特殊的成员方法,构造方法的名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。
请看举例:
//不带参数的构造函数
public Date(){
System.out.println("不带参数的构造方法");
}
//带参数的构造函数
public Date(int year,int month,int day){
System.out.println("带参数的构造方法");
}
我们要想实例化一个对象,就必须调用构造函数,因为只有调用完构造函数之后,才算真正实例化出了一个对象(调用完构造函数之后对象才算真正意义上的产生)。
另外,构造方法是可以构成重载的,如上(一个带参数、一个不带参数的构造方法)。
4.3构造方法特性
- 名字必须与类名相同
- 没有返回值类型,设置为void也不行
- 当创建对象时由编译器自动调用构造函数,并且在对象的生命周期内只调用一次。
- 如果我们自己写了构造方法(无论是带参数还是不带参数),编译器则不会自己生成构造函数。
- 当没有显式定义构造方法,编译器会自动为我们生成一个不带参数的构造方法
- 构造方法支持重载(根据自己需求来提供不同参数的构造方法)
- 大多数情况下,构造方法用public来进行修饰,特殊场景下需要用private来修饰。
4.4调用本类当中其它构造方法
什么是调用本类当中其它构造方法呢?请看举例:
class Date {
public int year;
public int month;
public int day;
//无参构造
Date(){
//调用本类当中其它构造方法
this(23,5,21);//不许放在构造方法里面而且是第一行
System.out.println("不带参数的构造方法");
}
//带参构造
Date(int year,int month,int day){
System.out.println("带参数的构造方法");
}
public void setDay(int year, int month, int day){
this.year = year;
this.month = month;
this.day = day;
}
public void printDate(){
System.out.println(this.year + "-" + this.month + "-" + this.day);
}
}
this(…)有两点需要注意:
- 必须放在构造方法中且是第一行
- 不能形成环
4.5默认初始化
默认初始化是指在创建对象时,如果没有显式地对成员变量进行初始化,Java会使用默认值来初始化它们。默认值根据成员变量的类型而定,例如,整型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。默认初始化确保了对象在创建时每个成员变量都有一个初始值。
请看举例:
运行结果如下:
4.6就地初始化
就地初始化是指在创建对象时,对成员变量进行显式的初始化。我们可以在对象创建的同时为成员变量赋予特定的值。
请看举例:
public class MyClass {
//当然,在这里进行就地初始化也是可以的
private int value;
private String str;
// 就地初始化块
{
value = 10;
str = "Hello";
}
// 构造方法1
public MyClass() {
// 存在就地初始化的成员变量的初始化语句
}
// 构造方法2
public MyClass(int value) {
// 存在就地初始化的成员变量的初始化语句
this.value = value;
}
}
所以,就地初始化后,编译器会将所有给成员初始化的这些语句添加到各个构造函数中。这样可以确保无论使用哪个构造函数创建对象,成员变量都得到了正确的初始化
。
以上就是本文类和对象的全部内容。
好了,本文到这里就结束了,再见啦友友们!!!