一、类
首先我们要先了解一下什么是类?类主要是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性,哪些功能。 下面我们来举个例子:
class Person {
public int age; //成员属性
public String name;
public String sex;
public void eat() { //成员方法
System.out.println("吃饭!");
}
public void sleep() {
System.out.println("睡觉!");
}
}
在上述代码中,class为定义类的关键字,Person为这个类的类名,{ }中的内容为类的主体,类中包含的内容称为类的成员。变量信息主要是对类进行描述的,称之为类的成员属性或者类成员变量。方法主要说明类具有哪些功能,称为类的成员方法。
• 类名注意采用大驼峰定义
二、类的实例化
定义了一个类,就相当于在计算机中定义了一种新的类型(
类是用户自定义了一个新的类型)。
用类类型创建对象的过程,称为类的实例化
。对于上述的Person类,举个实例化的例子:
public class Main{
public static void main(String[] args) {
Person person = new Person(); //通过new实例化对象
person.eat(); //成员方法调用需要通过对象的引用调用
person.sleep();
}
}
※注意事项
• new 关键字用于创建一个对象的实例;
• 使用 .
来访问对象中的属性和方法;
• 同一个类可以创建多个实例。
三、类的成员
1)在类中但是方法外部定义的变量称为 "字段" 或 "属性" 或 "成员变量",用于描述一个类中包含哪些数据。对于一个对象的字段如果没有显式设置初始值, 那么会被设置一个默认的初值。
• 对于各种数字类型,
默认值为
0;
• 对于 boolean
类型
,
默认值为
false;
• 对于引用类型(String, Array,
以及自定制类
),
默认值为
null。
null 在
Java
中为
"
空引用
",
表示
不引用任何对象
,
类似于
C
语言中的
空指针
,
如果对
null
进行
操作就会
引发异常
。
很多时候我们不希望字段使用默认值,
而是需要我们
显式设定初值
。举个例子:
class Person {
public String name = "李四";
public int age = 20;
}
class Test {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name);
System.out.println(person.age);
}
}
// 执行结果:
李四
20
2)方法中还有一种特殊的方法称为 构造方法 (construction method) 。在实例化对象的时候会被自动调用到的方法,方法名字和类名相同,用于对象的初始化。
四、关键字
1)static关键字:
1.
修饰属性。
Java中的
静态属性和类相关,
和具体的实例无关。
即
同一个类的不同实例共用同一个
静态属性
。
2.
修饰方法。如果在任何方法上应用 static
关键字,此方法称为静态方法。静态方法
属于类
,而不属于类的对象;即可以
直接调用
静态方法,而
无需创建类的实例
。静态方法可以
访问
静态数据成员,并可以
更改
静态数据成员的值。
3. 修饰代码块。静态代码块不管生成多少个对象,其只会
执行一次
,且是
最先
执行的。
※注意事项:
• 静态方法
和实例无关
,而是和
类
相关;
• 静态方法
不能
直接使用非静态数据成员或调用非静态方法(
非静态数据成员和方法都是和
实例
相关的);
• this和
super
两个关键字
不能
在静态上下文中使用(
this
是当前实例的引用,
super
是当前实例父类实例的引用,
也是和当前实例相关);
•
main 方法
为
static
方法。
2)this关键字:this引用的是调用成员方法的对象。
1. this
引用的类型:对应类类型引用,即那个
对象调用
就是那个对象的引用类型;
2. this
引用只能在
"
成员方法中
使用
";
3. this
引用
具有final属性
,在一个成员方法中,不能再去引用其他的对象。
※this
表示当前对象
引用
(
注意不是当前对象
)。
可以借助
this
来访问对象的
字段和方法
(普通方法和构造方法)。
注:
需要在一个构造方法当中,调用当前类的另外一个构造方法的时候,通过
this()
的形式调用;
必须放在
第一行
,且
只能调用一个
。
3)
private/ public 这两个关键字表示
"
访问权限控制
" 。
被
public
修饰的成员变量或者成员方法,
可以直接被类的调用者使用;被 private
修饰的成员变量或者成员方法,
不能被类的调用者使用。
即类的使用者根本不需要知道
也不需要关注一个类都有哪些
private
的成员,
从而让类调用者以更低的成本来使用类。
五、包
包
(package)
是组织类的一种方式。使用包的主要目的是保证类的
唯一性
。
前面已经说了类中的
public
和
private,private
中的成员只能被
类的内部
使用;
如果某个成员不包含
public
和
private
关键字,
此时这个成员可以在
包内部
的其他类使用,
但是不能在包
外部的类使用。
六、访问限定符
Java
中对于字段和方法共有
四种
访问权限:
1)private:
类内部
能访问,
类外部不能访问;
2)default 默认
(
也叫包访问权限
):
类内部
能访问,
同一个包
中的类可以访问,
其他类不能访问;
3)protected:
类内部
能访问,
子类和同一个包
中的类可以访问,
其他类不能访问;
4)public :
类内部和类的调用者
都能
访问。
七、类和对象的内存布局
举个例子:
class TestDemo{
public int a;
public static int count;
}
public class Main{
public static void main(String[] args) {
TestDemo t1 = new TestDemo();
t1.a++;
TestDemo.count++;
System.out.println(t1.a);
System.out.println(TestDemo.count);
System.out.println("============");
TestDemo t2 = new TestDemo();
t2.a++;
TestDemo.count++;
System.out.println(t2.a);
System.out.println(TestDemo.count);
}
}
则上述代码的内存布局如下图所示: