🎇个人主页:Ice_Sugar_7
🎇所属专栏:快来卷Java啦
🎇欢迎点赞收藏加关注哦!
类和对象
- 🍉类的定义
- 🍌类的实例化
- 🍉this引用
- 🍉对象的构造及初始化
- 🍌构造方法
- 🍌就地初始化
- 🍉访问限定符
- 🍉包
- 🍌导入包中的类
- 🍌自定义包
- 🍉写在最后
🍉类的定义
// 创建类
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会自动提供一个不带参数
的默认的构造方法
,但如果写了,那就不会提供
默认构造方法会将内置类型和自定义类型分别初始化为0
和null
到这里,我们可以知道,对象实例化过程主要分为两步:
①为对象分配内存:在堆区
为对象开辟一块内存空间,并返回一个引用(即对象地址
),这个引用变量本身存储在栈区
②调用合适的构造方法
🍌就地初始化
就是在声明成员变量时,直接给出初始值
。代码编译完成后,编译器会将所有给成员初始化的这些语句添加到各个构造方法中
如果构造方法中已经有对成员初始化的语句,那么就会覆盖掉就地初始化的值
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 语句
🍉写在最后
以上就是本篇文章的全部内容,如果你觉得本文对你有所帮助的话,那不妨点个小小的赞哦!(比心)