「JavaSE」类和对象1

发布时间:2024年01月12日

🎇个人主页Ice_Sugar_7
🎇所属专栏快来卷Java啦
🎇欢迎点赞收藏加关注哦!

🍉类的定义

// 创建类
class ClassName{
	field; // 字段(属性) 或者 成员变量
	method; // 行为 或者 成员方法
}

●class为定义类的关键字
●ClassName为类名
●{}中为类的主体

比如定义一个学生类:

class Student {
    public String name;  //名字
    public String sex;   //性别
    public int age;      //年龄

    public void Study() {
        System.out.println(name + "在学习");
    }
}

关于类,有几点需要注意:
①一般一个文件当中只定义一个类
②main方法所在的类一般要使用public修饰
③public修饰的类必须要和文件名相同

🍌类的实例化

定义一个类,就相当于定义了一个新的类型(自定义类型),有点像结构体。要使用它的话,就需要对类进行实例化,创建对象
在java中使用new,配合类名来实例化对象,使用.访问对象的成员变量和成员方法

public static void main(String[] args) {
    Student student = new Student();  //实例化一个对象
    student.name = "Sugar";
    student.sex = "male";
    student.age = 21;
    student.Study();
}

🍉this引用

this引用是成员方法传参时一个隐藏的形参,指向当前对象。也就是说,谁调用成员方法,this就指向谁
成员方法中所有成员变量的操作,都是通过该引用去访问(建议访问成员变量时前面加上this)

注意:这里的成员方法指的是非静态成员方法,静态成员方法没有this指针(后面讲)

public 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);
	}
}

🍉对象的构造及初始化

Java当中局部变量定义后需要初始化才能使用,不然会报错
但是类中的成员变量,在类实例化后,如果不进行初始化,那么对于内置类型,会自动初始化为0;对于引用类型,则会初始化为null,这种初始化方式与接下来要讲的构造方法息息相关

🍌构造方法

构造方法是一个特殊的成员方法,方法名就是类名,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次

    public Student(String name, String sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

注意:
①构造方法没有返回值类型,设置为void也不行
②一般使用public修饰
③可以重载,根据不同的需求提供不同参数的构造方法

如果你没写构造方法,那Java会自动提供一个不带参数默认的构造方法,但如果写了,那就不会提供
默认构造方法会将内置类型和自定义类型分别初始化为0null

到这里,我们可以知道,对象实例化过程主要分为两步:
①为对象分配内存:在堆区为对象开辟一块内存空间,并返回一个引用(即对象地址),这个引用变量本身存储在栈区
②调用合适的构造方法

🍌就地初始化

就是在声明成员变量时,直接给出初始值。代码编译完成后,编译器会将所有给成员初始化的这些语句添加到各个构造方法中
如果构造方法中已经有对成员初始化的语句,那么就会覆盖掉就地初始化的值

    public String name = "Sugar";  //名字
    public String sex = "male";   //性别
    public int age = 21;      //年龄

    public static void main(String[] args) {
        Student student = new Student("Zhangsan");       
        student.Print();
    }

运行结果:
在这里插入图片描述


🍉访问限定符

不同访问限定符修饰的成员变量/成员方法,他们的访问权限不同,如下表:
在这里插入图片描述
其中,default是默认的访问限定符。如果某个成员变量/方法没有用限定符修饰,那么编译器会自动加上(不用自己写)


🍉包

在面向对象体系中,为了更好地管理类,把多个类收集在一起成为一组,称为软件包包是类、接口等的封装机制的体现

包还有一个重要的作用:在同一个工程中允许存在同名的类,只要处在不同的包中就ok

🍌导入包中的类

Java 中已经提供了很多现成的类供我们使用
比如Date类,我们可以使用 java.util.Date 导入 java.util 这个包中的 Date类

import java.util.Date;

class Test {
    public static void main(String[] args) {
        Date date = new Date();
        // 得到一个毫秒级别的时间戳
        System.out.println(date.getTime());
    }
}

如果需要使用 java.util 中的其他类, 可以使用 import java.util.*,它会自动识别是不是包里的类
但是最好还是显式指定要导入的类名,不然可能会出现冲突,比如:

import java.util.*;
import java.sql.*;
public class Test {
	public static void main(String[] args) {
	// util 和 sql 中都存在一个 Date 这样的类, 此时就会出现歧义, 编译出错
		Date date = new Date();
		System.out.println(date.getTime());
	}
}

这种情况下就要用完整的类名,如下:

import java.util.*;
import java.sql.*;
public class Test {
	public static void main(String[] args) {
		java.util.Date date = new java.util.Date();
		System.out.println(date.getTime());
	}
}

🍌自定义包

基本规则:

●在文件的最上方加上一个 package 语句指定该代码在哪个包中
●包名需要尽量指定成唯一的名字(通常会用公司的域名的颠倒形式)
●包名要和代码路径相匹配。例如创建 com.Bilibili.demo1 的包,那么会存在一个对应的路径 com/Bilibili/demo1 来存储代码
●如果一个类没有 package 语句,那么这个类会被放到一个默认包src

我们在包中新建一个类test1
在这里插入图片描述

然后可以看到我们磁盘上的目录结构已经被 IDEA 自动创建出来了
在这里插入图片描述

同时还可以看到,新创建的 test1.java 文件的最上方,出现了一个 package 语句
在这里插入图片描述


🍉写在最后

以上就是本篇文章的全部内容,如果你觉得本文对你有所帮助的话,那不妨点个小小的赞哦!(比心)

文章来源:https://blog.csdn.net/Ice_Sugar_7/article/details/135536709
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。