在Java中,声明类就是声明一个引用类型。
Java中的类:
一个简单的创建:
public class People{
//属性(变量)
String name; //默认public访问类型
int static age;
int heigth;
//行为(方法)
void drinking(){ //无static
}
void eat(){
}
void sleeping(){
}
}
可以把一个类看作一个人,他有姓名、年龄的基本类型,同时也有吃、喝等动作(成员方法)
一个类中可以包含:
- 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。 //变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
- 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。 //成员变量可以被类中方法、构造方法和特定类的语句块访问。
- 类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。 //只能用类名去访问 (类名.类变量) //虽然用 (对象名.类变量)也可以,但不提倡这么用
小结:
实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
Java 中静态变量和实例变量区别:
静态变量属于类,该类不生产对象,通过类名就可以调用静态变量。
实例变量属于该类的对象,必须产生该类对象,才能调用实例变量。
每声明一个类,就会有一个class对象,每个类只有一个class对象。
(类在堆里的字节数:对象头(8个字节)+基本数据类型的字节总数(实例变量)+内存填充(总和为8的倍数); //方法不影响,不在堆上存放。)
一个类只有一个构造方法。
若this调用构造方法:必须位于代码首行。
普通方法不能调用构造方法。
构造方法中实际上用了this的引用。
Static修饰的方法只能访问静态变量。
Static不能修饰局部变量。
对象的创建:
//第一种方式
People p1=new People();
//第二种方式
People p2;
p2=new People();
分析里面四个动作:
1)右边的“new People”,是以People”类为模板,在堆空间里创建一个People类对象。
2)末尾的()意味着,在对象创建后,立即调用People类的构造函数,对刚生成的对象进行初始化。构造函数是肯定有的。如果你没写,Java会给你补上一个默认的构造函数。 //如果自己写了,则调用的是自己写的构造函数。
3)左边的“People p1 ”创建了一个People类引用变量。所谓People类引用,就是以后可以用来指向People对象的对象引用。
4)“=”操作符使对象引用指向刚创建的那个People对象。
如图分析可知:
//只是对象引用的拷贝
// p1的指向为 0X456
p1=p2;
我们可以获得以下结论:
(1)一个对象引用可以指向0个或1个对象;
(2)一个对象可以有N个引用指向它。
访问权限:
同包子类 同包非子类 不同包子类 不同包非子类
public ∨ ∨ ∨ ∨
protect ∨ ∨ ∨ ×
private × × × ×
在前面都不加时,默认包访问权限 (src包) ,就算继承也不行。