类的定义
类(Class)通俗地理解为「设计图」或「模板」,它定义了某⼀类事物的共同特征和⾏为。⽽根据这个设计图创建的具体事物,就是对象(Object)
// 1.
定义类(设计图)
public class Car {
//
属性(特征)
public String color;
public String brand;
//
⽅法(⾏为)
public void start() {
System.out.println(brand + "汽⻋启动了!");
}
public void accelerate() {
System.out.println(color + "的汽⻋正在加速...");
}
}
总结:
public class ClassName {
//
属性、成员变量
//
构造⽅法
//⾏为、成员⽅法
}
类定义不能用static
1. static
的语义与类的定义冲突
-
static
表示“属于类而非实例”,而类本身已经是顶级结构,不需要再通过static
声明其归属。 -
类的定义要么是顶层的(直接属于包),要么是嵌套的(作为其他类的成员)。嵌套类中,
static
可以修饰(表示静态嵌套类),但顶层类不需要。
2. 顶层类的本质
顶层类(非嵌套类)默认就是“静态”的,因为它不依赖于任何实例。例如:
class Outer {
static class Nested {} // 静态嵌套类
class Inner {} // 非静态内部类(依赖外部类实例)
}
不允许写成 static class Outer
,因为顶层类本身就是独立的。
3. 语言设计的一致性
-
在 Java、C# 等语言中,
static
用于修饰类成员或嵌套类,而非顶层类。这是为了保持语法一致性。 -
如果顶层类用
static
修饰,会导致语法歧义,同时导致程序无法运行
4. 替代方案:包作用域
-
顶层类的作用域由包(
package
)和访问修饰符(public
、private
等)控制,无需static
。 -
例如,
public class Foo
的可见性由public
决定,而非static
。
总结:
顶层类:不能加 static
,因为默认就是独立的。
嵌套类:可以用 static
表示不依赖外部类实例。
这是语言设计者为保持语义清晰和一致性做出的选择
对象的定义
package Text_4;
public class Dog {
public String name;
public int age;
public String brand;
public void Behave(){
System.out.println(name+" "+age+"个月大"+"它正在吃饭");
}
public static void main(String[] args) {
Dog dog1=new Dog();
dog1.name="小黄";
dog1.age=18;
dog1.Behave();
}
}
访问对象当中的成员:
1. 使⽤对象的引⽤+点号来访问对象当中的属性
2. 使⽤对象的引⽤+点号来访问对象当中的⽅法(⾏为)
3. 对⽐⽅法章节当中讲到的静态⽅法,静态⽅法如果在类外进⾏调⽤,使⽤类名+点号的⽅式进⾏访 问
构造方法
Java的构造⽅法(构造方法不能加static)( Constructor )通俗理解为「对象的出⽣说明书」或「初始化⼯具」。 它在对象创建时被⾃动调⽤,负责为对象的属性赋予初始值,确保对象⼀“出⽣”就具备必要的信 息。
语法定义:
1.构造⽅法没有返回值,连void都不用写
2.构造⽅法的⽅法名和类名⼀致,比如类叫Student
,构造方法就叫Student()
3.构造⽅法可以传⼊不同的参数,已定义带参数的构造方法,此时Java不会提供默认无参构造方法
4.自动调用:用new
创建对象时自动执行
// 1. 定义类(婴⼉模板)
public class Baby {
// 属性
String name; //姓名
String gender; //性别
double weight; //体重
// 构造⽅法(出⽣说明书)
public Baby(String babyName, String babyGender) {
name = babyName; // 必须提供姓名和性别
gender = babyGender;
}
//
可选:补充其他属性(如体重)
public void setWeight(double babyWeight) {
weight = babyWeight;
}
}
// 2. 创建对象(婴⼉出⽣)
public class Hospital {
public static void main(String[] args) {
// 必须通过构造⽅法初始化姓名和性别
Baby baby1 = new Baby("⼩花", "⼥");
baby1.setWeight(3.5); // 补充体重
Baby baby2 = new Baby("⼩明", "男"); // 必须填写姓名和性别
}
}
5.可以重载:一个类可以有多个不同参数的构造方法
public class Baby {
// 构造⽅法1:必须提供姓名和性别
public Baby(String name, String gender) {
/*
...
*/
}
// 构造⽅法2:允许不提供姓名(默认未知)
public Baby(String gender) {
this.name = "没想好";
this.gender = "男";
}
}