Java-类和对象

类的定义

类(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)和访问修饰符(publicprivate 等)控制,无需 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 = "男";
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值