Java中的类基础详解

本文详细介绍了Java中的类基础,包括类的构造、构造函数中this的用法以及类的修饰符和控制符。一个.java文件中只能有一个public类,类由字段和方法组成。构造函数用于初始化对象,无参数时系统会生成默认构造函数,有参数时需匹配参数调用。this关键字用于区分局部变量和域,以及调用其他构造方法。类的修饰符包括访问修饰符(private、default、protected、public)和其他修饰符(abstract、static、final)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

可以有多个类,但是只能由一个public类

类 = 字段 + 方法

类的构造

没写构造函数时

写构造函数时

构造函数中this的用法

1.this指当前这个对象本身

2.this解决局部变量和域同名的问题

3.通过this调用其他构造方法

类的修饰符和控制符

第一类:访问修饰符(private、default、protected、public)

第二类:其他修饰符和非访问修饰符(abstract、static、final)

static字段

 final

 abstract

可以有多个类,但是只能由一个public类

在每个.Java程序中,可以拥有多个类,但是public类有且只能拥有一个,且这个public类的名字必须与文件名相同。如图所示:

此时,程序没有出现编译报错,但是当我们改变一下类的名字,如图:

此时,程序编译报错,错误 原因为:Test类是public的,应该被声明在一个叫Test.java的文件中,即文件名与主类名不相同导致的。

接下来,我们来看一下一个.java文件可以存在多个类的情况:

class Person1{
    public String name = "张三";
    public int age = 20;

    public void print(){
        System.out.println("姓名:"+name+" 年龄:"+age);
    }
}
public class Main {
    public static void main(String[] args) {
        Person1 person1 = new Person1();
        person1.print();
    }
}

 通过此代码,我们可以清楚的发现,在一个.java文件 中,出现了多个类(Person1和Main),再次强调一遍,一个.java文件中有且只能出现一个public类。

因为每个.java文件被执行的时候都会先执行public类,而且只执行public类中的代码,如果存在其他的类但是在public类中没有使用,就不会执行其他的类,但是这个类的写法必须正确,否则会编译报错;如果写了其他的类并在public类中使用了该类,那么也会执行其他类的相应代码。

而且除public类之外的其他类也可以写在public类之后,即使在主类中调用到该类。如图:

由图可以确定,定义的类可以放在public类之前和之后。

 类 = 字段 + 方法

如图:

由图可见,此代码中的name和age都属于Person1中的字段,print()和eat()都属于Person1的方法

字段 是类的属性,用变量来表示

字段(filed),通常叫做”类成员“,或”类成员变量“,有时也叫”域“,理解为”数据成员“,用来承载数据。

方法 是类的操作和功能,是用函数来表示的。

类的构造

类的构造可以用来给一个类的数值赋一个初值,用来初始化一个该类的对象。构造函数与类名同名,且不需要写返回值。

没写构造函数时

如果当我们没有写构造函数时,那么程序会自动生成一个默认的构造函数,但是这个构造函数里面什么都没有,类似于空值,函数中没有任何的参数,也没有任何的语句,如图:

    Person1(){}

 如果没有写构造函数,我们初始化一个新的对象的时候,不需要写参数。如图:

此时初始化对象时,就不需要写参数。

写构造函数时

如果我们自己写了构造函数,那么程序就不会自动给我们生成默认的构造函数了,并且如果我们自己写的构造函数中有参数,我们在new一个对象时,要写入参数,否则会编译报错,如果自己写的构造函数中不含有参数,相应的,我们在new一个对象时也不用写参数。如图:

如果我们自己构造了函数,且函数中含有两个参数,但是我们在实例化对象时没有给出参数,此时就会出现如图所示的编译报错,如果我们加上两个对应类型的参数,程序就不会再编译报错,如图:

 构造函数中this的用法

1.this指当前这个对象本身

例如,age和this.age是一样的,都能运行出相应的结果。

由运行结果所示,证实了上述说法。

2.this解决局部变量和域同名的问题

 此时,我明明都已经new了一个新的对象,并且也传入了类型对应的参数,为什么打印的时候会是这样呢?这是因为构造Person1这个函数时的形参变量名和前面定义Person1这个类时的字段名相同了,那么,该如何解决呢?这时,this关键词也发挥作用了,如图:

3.通过this调用其他构造方法

在构造函数时,this可以调用另一种构造方法,,并且这条调用语句必须放在第一行。

类的修饰符和控制符

相关作用:可以修饰类,也可以修饰类中的成员(字段,方法)。

第一类:访问修饰符(private、default、protected、public)

修饰类

当前类

同包

子类

其他类

Private

Default

Protected

Public

这四类访问修饰符之间的关系如上图所示

如果不加修饰符,则默认为default修饰。

第二类:其他修饰符和非访问修饰符(abstract、static、final)

其他修饰符/非访问控制符

作用

Abstract

修饰类,成员

Static

修饰内部类,成员

Final

修饰类,成员。局部变量

static字段

1.静态字段最本质的特点是,他们是类的字段,不属于任何一个对象实例。

2.它不保存在某个对象实例的内存区间中,而是保存再类的内存区域的公共存储单元。

3.类中的static变量可以通过了类名直接访问,也可以通过对象实例来访问,两种方法的结果是相同的因为这个static变量是存在最原本的类中的,它本身和用它来实例化的对象都可以访问。
例如System类的in和out对象,就是属于类的域,直接用类名来访问,即System.in和System.out 。


 final

  • final类:如果一个类被final修饰符所修饰和限定,说明这个类不能被继承,即不会拥有子类
  • final方法:final修饰符所修饰的方法,是不能被子类所覆盖的方法。
  • final字段和final局部变量:它们的值一旦给定,就不能够更改。并且它们是只读量,它们能且只能被赋值一次。
  • 如果一个字段被static final所同时修饰,它可以表示一个常量。如果不给定初始值,则按默认值进行初始化(引用类型为null,数值类型为0,Boolean类型为false)。

 abstract

  • abstract只能修饰类和方法,不能修饰变量。
  • 凡是用abstract修饰符修饰的类被称为抽象类。
  • 抽象类不能实例化,不能创建对象,设计抽象类就是用来被子类继承的。
  • abstract不能和final、private、static联合使用,只能单独使用abstract或者联合public abstract使用。
  • 抽象类方法在子类中必须被实现,否则子类仍然是abstract的。

 如果给此下文代码中的抽象类Person1实例化一个对象的时候,会发现编译报错,说明抽象类不能实例化对象。 

抽象类就是用来被继承的,子类可以是抽象类,也可以是非抽象类。

 

 同学们,Java中类这一节的内容有点难理解,一定要多下功夫,才能摸透这其中的点点滴滴。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值