java的类和对象

目录

提示栏

1.类和对象中的基本概念

1)类

类的定义模式

一个文件中可以定义多个类,但建议只定义一个类,通过这点我们就引出了“public class  ****(类名)”和“class  *****(类名)”的区别。

public class  **** :如果类的定义中包含public,那么类名就一定要和文件名相同。

class  ***** :若不包含public则可以随意。

注意:不论带不带public,类名的书写形式都是大驼峰

下面我们举例来定义一个狗类:

class Dog{
    public String name;//名字(成员变量)
    public int age;//年龄(成员变量)
    public float weight;//重量(成员变量)
    public void barks(){
        System.out.println(name+"在叫");//成员方法
    }
}

其中涉及到的成员和成员方法在下面会说明。

2)成员与对象

在一个类中,我们可以设定多个成员,如上面的狗类中,我们设定了狗的名字,年龄,重量。可以很明显的看出来成员的设置的方法:public+成员类型+成员名。那么又有小伙伴要问了,设置这么多成员我要怎么用呢?这就涉及到接下来我们要讲的“对象”了。让我们先看段代码。

public static void main(String[] args) {
        Dog dog1 = new Dog();
        dog1.name = "大黄";
        dog1.age = 10;
        dog1.weight = 15.5;
        dog1.barks();
        Dog dog2 = new Dog();
        dog2.name = "小黑";
        dog2.age = 5;
        dog2.weight = 30.5;
        dog2.barks();
    }

上面这段代码中的“dog1和dog2”就被称为对象,不难看出一个类名可以定义多个对象,而一个对象也可以对多个成员进行赋值。我们把赋值的这个过程叫做对象的实例化

有一点细节需要关注,就是对象实例化的区域:在类之中,在成员之外。

3)成员方法

定义完成员和对象后,不用说我们的下一步就是要输出我们定义的值,有些朋友会想那还不容易,直接利用System.out.println()就可以输出了,但在你需要对多个对象进行较长的输出时,这种方法就会降低效率,而成员方法就可以解决这个问题。我们还是拿狗类举例:

public void barks() {
        System.out.println(name+"在叫");//成员方法
    }
    public void eat(){
        System.out.println(name+"在吃东西");
    }
    public void text(){
        System.out.println(name+age+"岁了");
    }

我们通过成员方法定义了狗的三个属性和行为,当我们想输出这些语句时,只需要根据“对象名.成员方法名()”这种形式就可以输出了。也就意味这我们只需要修改对象名就可以改变语句,大大提高了效率。

4)构造方法

说到构造方法,我们可以与之前的成员方法做一个类比。但二者又有本质上的区别。且听我细细道来。

构造方法 ( 也称为构造器 ) 是一个特殊的成员方法, 名字必须与类名相同,在创建对象时,由编译器自动调用,并且 在整个对象的生命周期内只调用一次
在上一段对构造方法概念的叙述中,对象的生命周期只调用一次这句话可能过于抽象,接下来我就来解释一下:
public Date(int year, int month, int day){
this.year = year;
this.month = month;
this.day = day;
System.out.println("Date(int,int,int)方法被调用了");
}
public void printDate(){
System.out.println(year + "-" + month + "-" + day);
}
public static void main(String[] args) {
// 此处创建了一个Date类型的对象,并没有显式调用构造方法
Date d = new Date(2021,6,9); // 输出Date(int,int,int)方法被调用了
d.printDate(); // 2021-6-9
}

每个new的对象都只能调用一次构造方法,如果想调用超过一次,则需要多个new的对象。

下面我总结了构造方法的四则特性
因为构造方法可以重载的这个特性,构造方法也分为无参构造方法和含参构造方法。
public class Date {
public int year;
public int month;
public int day;
// 无参构造方法
public Date(){
this.year = 1900;
this.month = 1;
this.day = 1;
}
// 带有三个参数的构造方法
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}

无参构造方法可以理解为将对象的实例化在构造方法中进行了,当然,如果main中再次对其进行赋值,输出的结果就为第二次赋值的值。有参构造方法换句话说就是将实例化的过程简化到参数列表中,需要实现这种方法需要用到“this”,接下来我会说明。

2.this引用

为什么要有this呢?

public void setDay(int year, int month, int day){
year = year;
month = month;
day = day;
}

当我们的形参名不小心与成员变量名相同,编译器就会蒙逼,不知道调用谁。

这时候就需要用到this

如图,只需要在成员前加上this.就可以巧妙的解决上述问题,但神通广大的this也有缺陷,就是它只能用在成员方法。

3.封装

1)概念:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行 交互

2)

Java 中主要通过类和访问权限来实现封装: 类可以将数据以及封装数据的方法结合在一起 ,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用 Java 中提供了四种访问限定符:
注意:一般情况下成员变量设置为 private ,成员方法设置为 public
3)封装扩展之包
有时我们需要创建多个类,当类越来越多的时候,我们查找一个我们需要的类时,就会像大海捞针。这时候包的作用就体现出来了。
如图所示,不难看出其实包就相当与一个文件夹,把相关的信息归为一类,而这里的信息就是类。
既然包这么重要,那我们改如何创建包呢?
第一步:创建包
第二步:命名
包名一般由点号加小写字母组成。
现在我就可以在包中加入我们想写的类了。那么又有一个问题了,既然包中存在着多个类,又有多个包,那么不同包之间的子类能不能相互引用,从而达到提高效率的目的呢?答案是可以的。
接下来我来介绍两种引用的方式:
A类:
B类:
这里需要注意的是,如果同时引用两个包而着两个包的名字又恰好相同,那么编译器就会报错。
如图:

不同的包相互引用其实也是有前提条件的,不同的权限决定了包之间访问的程度,可以参考前面访问限定符的那张图。

下面是一些常见包的举例:

4.static成员

Java 中,被 static 修饰的成员,称之为 静态成员 ,也可以称为类成员,其不属于某个具体的对
象,是所有对象所共享的
那我们要在什么时候使用static呢?使用static有什么影响呢?听我娓娓道来。
举个例子,如果在大一班级中有张三,李四,王五三个同学,我们想通过对象的实例化来输出他们的身高,年龄,班级等信息,根据前面提到的方法,这似乎没有什么难的,但聪明的你是否发现了一个异样,这三名同学的班级是相同的,重复实例化未免太麻烦,这时就要用到static。
通过图可以知道,只要在定义成员变量时publi之后加一个static,就可以使它变为静态成员变量,从而达到直接访问的目的(不论通过类名访问还是对象访问都是可以的,但我建议通过类名访问)
static除了能修饰成员变量外还可以修饰成员方法
注意:不能在静态方法中访问任何非静态成员变量
要使用static修饰的变量,就要对其进行初始化,而这里有两种初始化的方式,分别为:就地初始化和静态代码块初始化
就地初始化:
public class Student{
private String name;
private String gender;
private int age;
private double score;
private static String classRoom = "Bit306";
在了解静态代码块初始化之前我们要知道什么是代码快, 使用 {} 定义的一段代码称为代码块
// 静态代码块
static {
classRoom = "bit306";
System.out.println("I am static init()!");
}

上述静态代码块就对静态成员进行了初始化,而静态代码块也有几点注意事项:

好了本次对java中类和对象的讲解就到此结束了,感谢观看!!!!

记录栏

思考栏


评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值