Java中类是编译器识别的模板,对象是new创建的实例;类名须PascalCase且不能为关键字;构造方法名须与类名一致;static成员属类,实例成员属对象。Java 中的类与对象不是抽象概念,而是编译器可识别、JVM 可执行的具体结构。类是模板,对象是实例;没类就 new 不出对象,没对象就调用不了非静态成员。
class 关键字和合法标识符名类定义以 class 开头,后接类名(遵循 PascalCase),不能是关键字(如 int、class 自身)、不能含空格或特殊符号。类体用 {} 包裹,即使为空也不能省略。
class Person {
String name;
int age;
}
常见错误包括:
class Person {} 写成 Class Person {}(大小写敏感)person_info 或数字开头 2ndPerson,编译直接报错 error: class, interface, or enum expected
error: illegal start of type
new + 构造方法调用对象不是声明出来的,是运行时通过 new 运算符在堆上分配内存并初始化得到的。哪怕类没显式写构造方法,编译器也会插入一个无参默认构造方法;一旦写了任意构造方法,这个默认构造就消失。
Person p1 = new Person(); // 调用默认构造
Person p2 = new Person("Alice", 30); // 调用自定义构造
容易踩的坑:
Person p; 只是声明引用变量,此时 p == null,访问 p.name 抛 NullPointerException
persom()),它就变成普通方法,new Person() 找不到匹配构造,编译失败this(...) 必须是第一行,否则报 error: call to this must be first statement in constructor
static 修饰的字段或方法属于类本身,在类加载时初始化,所有对象共享一份;不加 static 的才是实例成员,每个对象独立拥有。
class Counter {
static int count = 0; // 类变量,所有 Counter 对象共用
int value = 0; // 实例变量,每个对象一份
static void
incCount() { count++; } // 静态方法只能访问静态成员
void incValue() { value++; } // 实例方法可访问两者
}
典型误用:
main)中直接访问 value,报 error: non-static variable value cannot be referenced from a static context
static,导致多对象间互相覆盖new Counter().count 访问静态字段——语法合法但语义误导,应统一用 Counter.count
new,要么在类还没加载时就试图用它的静态成员。