目录
一、类
类是用来对一个对象进行描述的,主要用来描述该对象具有哪些属性和功能。
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.实例代码块只有在创建对象时才会执行
以上便是本篇文章的全部内容,感谢各位看官观看,如本篇文章对你有帮助,可以点点关注收藏支持一下,感谢支持!!!