Java类_包和层次结构
类
image.png
- 类是一个模板,它描述一类对象的行为和状态
- 语义上表达的是一类实体(对象)的抽象
- 在Java中的惯例是一个⽂件中存放一个public类
对象
▸ 对象:对象是类的⼀个实例
▸ 语义上是表达⼀个java类的实体
▸ 对象是⼀般情况下Java语⾔⾥的”⼀等公⺠”
▸ 对象可以赋值到⼀个变量
▸ 对象是通过new语句进⾏创建
JAVA方法和成员变量
- 方法:类中定义的该类的实例对象所具有的行为
- 静态方法: 只属于类本身的方法
- <返回类型> 方法名(<参数类型> 参数名, …) {代码; return <返回值>;}
- 一个方法由 “方法名 + 参数类型” 确定
- 相同方法名,不同参数类型, 是不同的方法 (重载override)
- 成员变量即对象或类中的变量, 其作用域在类中,或对象中
- 可以用修饰符控制方法和成员变量的作用域
修饰符
1、访问权限修饰符
Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。
-
default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
-
private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
-
public : 对所有类可见。使用对象:类、接口、变量、方法。
-
protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
2、非访问修饰符
-
static 修饰符,用来修饰类方法和类变量。
-
final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
-
abstract 修饰符,用来创建抽象类和抽象方法。
-
synchronized 和 volatile 修饰符,主要用于线程的编程。
1、static 修饰符
静态变量:static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。
静态方法:static 关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。
对类变量和方法的访问可以直接使用 classname.variablename 和 classname.methodname 的方式访问。
如下例所示,static修饰符用来创建类方法和类变量。
public class InstanceCounter {
private static int numInstances = 0;
protected static int getCount() {
return numInstances;
}
private static void addInstance() {
numInstances++;
}
InstanceCounter() {
InstanceCounter.addInstance();
}
public static void main(String[] arguments) {
System.out.println("Starting with " +
InstanceCounter.getCount() + " instances");
for (int i = 0; i < 500; ++i){
new InstanceCounter();
}
System.out.println("Created " +
InstanceCounter.getCount() + " instances");
}
}
以上实例运行编辑结果如下:
Starting with 0 instances
Created 500 instances
2、final 变量:
-
final 变量能被显式地初始化并且只能初始化一次。被声明为 final 的对象的引用不能指向不同的对象。但是 final 对象里的数据可以被改变。也就是说 final 对象的引用不能改变,但是里面的值可以改变。
-
final 修饰符通常和 static 修饰符一起使用来创建类常量。
final 方法
类中的 final 方法可以被子类继承,但是不能被子类修改。
声明 final 方法的主要目的是防止该方法的内容被修改。
如下所示,使用 final 修饰符声明方法。
public class Test{
final int value = 10;
// 下面是声明常量的实例
public static final int BOXWIDTH = 6;
static final String TITLE = "Manager";
public void changeValue(){
value = 12; //将输出一个错误
}
}
包和层次结构
- “包”: 用来表示具有层次结构的命名空间
- “package com.jirengu.java-system;”
- 层次结构
- 包 —> 类 (对象) —> 方法 —> 代码块