java中的类和对象

目录

一、类

1.1、类的定义

1.2、类的实例化 

1.3、this引用

1.3.1、为什么要使用this引用

1.3.2、this引用的特性

二、对象

2.1、对象的初始化

2.2、构造方法

 2.3、默认初始化

2.4、就地初始化

三、static成员

3.1、static修饰成员变量

3.2、static修饰成员方法 

四、代码块

4.1、普通代码块

4.2、构造代码块

4.3、静态代码块 


一、类

类是用来对一个对象进行描述的,主要用来描述该对象具有哪些属性和功能。

1.1、类的定义

类的定义格式如下:

//创建类
class 类名{
  成员变量;
  成员方法;
}

注意:类名每个英文单词首字母最好大写 

以下创建一个狗类:

class Dog {
    public String name;//名字
    public String color;//颜色
    //狗的属性
    public void bark(){
        System.out.println(name+"汪汪汪!");
    }
}

注意事项:

1. 一般一个文件当中只定义一个类

2. main方法所在的类一般要使用public修饰

3. public修饰的类必须要和文件名相同

4. 不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改。(1、找到src下的Dog类,右键点击。2、找到重构并点击。3、找到第一个重命名,修改名称)

 

1.2、类的实例化 

 定义了一个类,就相当于在计算机中定义了一种新的类型,用类类型创建对象的过程,称为类的实例化。(一般采用new关键字配合类名实例化对象)我们还是用上述狗类来举例:

public class Main {
    public static void main(String[] args) {
        Dog dog1=new Dog();//实例化dog1
        dog1.name="笨笨";
        dog1.color="白色";
        dog1.bark();
        Dog dog2=new Dog();//实例化dog2
        dog2.name="小黑";
        dog2.color="黑色";
        dog2.bark();
    }
}

结果如下:

 

 注意事项:1、new 关键字用于创建一个对象的实例.

2、 使用 . 来访问对象中的属性和方法.

3、同一个类可以创建多个实例.

1.3、this引用

this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。(注意:this引用的是调用成员方法的对象。

1.3.1、为什么要使用this引用

我们可以自定义一个Date类来表示日期,如下:

class Date {
    public int year;
    public int month;
    public int day;
    public void setDay(int year,int month,int day){//设置日期
        year=year;
        month=month;
        day=day;
    }
    public void printDay(){//打印日期
        System.out.println(year+"年"+month+"月"+day+"日");
    }
}
public class Main {
    public static void main(String[] args) {
        Date date=new Date();
        date.setDay(2024,7,19);
        date.printDay();
    }
}

其结果如下:

  

这并不是我们所预期的结果,仔细观察上述代码,我们发现:setDay中,形参名与成员变量名相同,这样我们就不清楚到底是谁对谁赋值。因此,我们就要用到this引用。

    public void setDay(int year,int month,int day){
        this.year=year;
        this.month=month;
        this.day=day;
    }
    public void printDay(){
        System.out.println(this.year+"年"+this.month+"月"+this.day+"日");
    }

其结果就符合预期了:

 

因此,在成员方法中引用成员变量时,推荐使用this引用。 

1.3.2、this引用的特性

1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型

2. this只能在"成员方法"中使用

3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象

二、对象

2.1、对象的初始化

我们知道,在Java方法内部定义一个局部变量时,必须要初始化,否则会编译失败。那对象呢?

public class Main {
    public static void main(String[] args) {
        Date date=new Date();
        date.printDay();
        date.setDay(2024,7,19);
        date.printDay();
    }
}

结果如下:

 

当直接创建一个对象,没有给成员变量赋值时,这些成员变量会默认为0,可以通过setDay为其赋值。那么就会有两个问题:

1. 每次对象创建好后调用SetDate方法设置具体日期,比较麻烦,那对象该如何初始化?

2. 局部变量必须要初始化才能使用,为什么字段声明之后没有给值依然可以使用?  

2.2、构造方法

2.2.1、定义

构造方法是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且 在整个对象的生命周期内只调用一次。它没有返回值类型,设置为void也不行,一般情况下使用public修饰。

注意:构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)

1、三个参数的构造方法

class Date {
    public int year;
    public int month;
    public int day;
    public Date(int year,int month,int day){//三个参数的构造方法
        this.year=year;
        this.month=month;
        this.day=day;
    }
    public void printDay(){
        System.out.println(this.year+"年"+this.month+"月"+this.day+"日");
    }
}
//
public class Main {
    public static void main(String[] args) {
        Date date=new Date(2024,7,19);
        date.printDay();
    }
}
//结果:2024年7月19日

2、无参构造方法

class Date {
    public int year;
    public int month;
    public int day;
    public Date(){//无参构造方法
        this.year=2024;
        this.month=7;
        this.day=19;
    }
    public void printDay(){
        System.out.println(this.year+"年"+this.month+"月"+this.day+"日");
    }
}
//
public class Main {
    public static void main(String[] args) {
        Date date=new Date();
        date.printDay();
    }
}
//结果:2024年7月19日

 2.3、默认初始化

在上文中提出的第二个问题:为什么局部变量在使用时必须要初始化,而成员变量可以不用呢?那是因为对象空间被申请好之后,对象中包含的成员已经设置好了初始值。

2.4、就地初始化

在声明成员变量时,就直接给出了初始值。

class Date {
    public int year=2024;
    public int month=7;
    public int day=19;
    public Date(){//无参构造方法

    }
    public void printDay(){
        System.out.println(this.year+"年"+this.month+"月"+this.day+"日");
    }
}

 注意:代码编译完成后,编译器会将所有给成员初始化的这些语句添加到各个构造函数中

三、static成员

在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对 象,是所有对象所共享的。

3.1、static修饰成员变量

static修饰的成员变量,称为静态成员变量。

特性:1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中

2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问

3. 类变量存储在方法区当中

4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)

class Student {
    public String name;
    public String sex;
    public static String classRoom="dxe301";
}
//
public class Main {
    public static void main(String[] args) {
        //可直接通过类名访问
        System.out.println(Student.classRoom);
        Student s=new Student();
        //也可通过对象访问
        System.out.println(s.classRoom);
    }
}
//结果:dxe301
       dxe301

3.2、static修饰成员方法 

Java中,被static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。静态成员一般是通过 静态方法来访问的。

特性:1. 不属于某个具体的对象,是类方法

2. 可以通过对象调用,也可以通过类名.静态方法名(...)方式调用,更推荐使用后者

3. 不能在静态方法中访问任何非静态成员变量

4. 静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this引用

四、代码块

使用 {} 定义的一段代码称为代码块。

4.1、普通代码块

public class Main {
    public static void main(String[] args) {
        {//直接在main使用
            int x=10;
            System.out.println(x);//10
        }
        int x=100;
        System.out.println(x);//100
    }
}

4.2、构造代码块

构造代码块:定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量。

class Student {
    public String name;
    public String sex;
    public static String classRoom="dxe301";
    public Student(){
        System.out.println("构造方法");
    }
    {
        System.out.println("构造代码块");
    }
}
//
public class Main {
    public static void main(String[] args) {
        Student stu=new Student();
    }
}

 结果如下:

4.3、静态代码块 

使用static定义的代码块,一般用于初始化静态成员变量。

class Student {
    public String name;
    public String sex;
    public static String classRoom="dxe301";
    public Student(){
        System.out.println("构造方法");
    }
    {
        System.out.println("构造代码块");
    }
    static {
        System.out.println("静态代码块");
    }
}
//
public class Main {
    public static void main(String[] args) {
        Student stu=new Student();
    }
}

结果如下:

 

注意事项:

1.静态代码块不管生成多少个对象,其只会执行一次

2 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的

3.如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)

4.实例代码块只有在创建对象时才会执行  

以上便是本篇文章的全部内容,感谢各位看官观看,如本篇文章对你有帮助,可以点点关注收藏支持一下,感谢支持!!!

 

  • 20
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值