目录
引入
基本类型
修饰符
一、访问修饰符(Access Modifiers)
1.public
2.protected
3.默认,无修饰符
4.private
二、非访问修饰符(Non-Access Modifiers)
1.static
2.final
3.abstract
4.@Override
引入
基本类型
先前已经剖析过Java中的基本数据类型,再次回忆:
整数类型:
byte
:8位,范围从-128到127。short
:16位,范围从-32,768到32,767。int
:32位,范围从-231-1(大约-2.147亿到2.147亿)。long
:64位,范围从-263-1。浮点类型:
float
:32位单精度浮点数。double
:64位双精度浮点数。字符类型:
char
:16位Unicode字符。布尔类型:
boolean
:表示true或false。引用数据类型(Reference Data Types)
引用数据类型包括类(class)、接口(interface)、数组(array)等。对于引用数据类型,需要创建对象或数组来初始化它们。
- 类对象
MyClass obj = new MyClass();
- 数组
int[] intArray = new int[5]; // 创建一个包含5个整数的数组 String[] strArray = {"apple", "banana", "cherry"}; // 创建一个包含3个字符串的数组并初始化
- 接口
List<String> list = new ArrayList<>(); // List是一个接口,ArrayList是它的一个实现
注意事项
- 当使用基本数据类型时,如果你没有显式地初始化它们,它们会有一个默认值(例如,
int
的默认值是0,boolean
的默认值是false
)---【但是底层本质都可以理解为0】- 对于引用数据类型,如果没有初始化,它们的默认值将是
null
。- 在初始化数组时,可以指定数组的大小(对于基本数据类型数组)或直接在声明时提供初始值(对于所有类型的数组)。
- 对于类对象,则需要使用
new
关键字来创建对象实例。
有了以上概念后,引入另一种“修饰”数据类型的符号,即修饰符。
修饰符
修饰符(Modifiers)是用于改变类、方法、变量、接口等元素的行为和可见性的关键字。这些修饰符主要分为两大类:访问修饰符(Access Modifiers)和非访问修饰符(Non-Access Modifiers)。
一、访问修饰符(Access Modifiers)
访问修饰符是Java等编程语言中用于控制类、字段、方法和构造函数的访问权限的关键机制。简单而言,就是你创建了一个数据类型之后,你希望它的状态是怎么样的,你想不想它能够被其他类访问或是你允不允许这个数据或方法能够被子类继承等等。
1.public
访问权限:任何地方都可以访问。(一个公开修饰)
应用对象:类、方法、变量等。
使用场景:当一个类、方法或变量需要被任何其他类或包访问时。
public的应用十分广泛,比如封装一个工具类时,就会应用public来修饰类里面的类、方法、变量:
示例:一个链表的节点创建类:
public class Node {public int data;public Node next;public Node() {//一个空的构造函数,当没有传参调用Node()时,就会默认调用这里//在这个类中,表示生成一个data为0,指向为null的节点}public Node(int value) {data=value;//传参后默认这一项}//重写toString方法@Overridepublic String toString() {return (this.next == null) ? this.data + " " : this.data + " " + this.next.toString();}}
可以调用试试:
public class Main {public static void main(String[] args) {Node node1=new Node(1); //这里表示生成一个节点,data值为1,next指向nullNode node2=new Node();//这里表示生成一个节点,data值为0(因为调用了空的构造器方法,被初始化为0),next指向nullnode1.next=node2;//将node1和node2链接起来System.out.println(node1.toString()); 打印这一条数组}
}
不出所料,输出结果为:
2.protected
访问权限:可以被同一包内的类访问,也可以被不同包中的子类访问。
应用对象:类成员(方法、变量等),注意类本身不能用protected修饰。
使用场景:当希望成员能够在同一个包中访问,或者只允许子类访问时。
3.默认,无修饰符
访问权限:只能被同一包内的类访问。
应用对象:类、方法、变量等。
使用场景:当希望类或成员只能在包内使用时。
4.private
访问权限:只能被定义它们的类内部访问--决定了它们不能够被继承的特性
应用对象:类成员(方法、变量等),注意类本身不能用private修饰。
使用场景:当希望某个类的成员对外部完全隐藏,只允许在类内部使用时。
二、非访问修饰符(Non-Access Modifiers)
1.static
作用:表示类成员(方法、变量)属于类本身,而不是属于类的某个实例。
应用对象:类成员(方法、变量)、代码块。
使用场景:常用于定义工具类中的方法或变量,以及类的静态变量和静态代码块。
【相当于被建造出来的零件,被多次调用时,只会初始化一次,可以直接"类名.静态方法",而不用被限制"new对象后才能使用"】
2.final
作用:表示常量(变量),或不可被重写的方法,或不可被继承的类。
应用对象:类、方法、变量、接口中的方法(Java 8及以后,接口中的默认方法也可以用final修饰,但意义不大,因为默认方法已经是具体实现了)。
使用场景:当希望某个变量的值在初始化后不能被修改,或某个方法不允许被子类重写,或某个类不允许被继承时。
3.abstract
作用:表示抽象类或抽象方法。抽象类不能被实例化,抽象方法没有具体实现,由子类去实现。
应用对象:类、方法。
使用场景:在面向对象编程中,抽象类和方法用于定义类的模板或接口,而具体的实现由子类提供。
4.@Override
作用:表示当前方法是重写父类的方法。这是一个注解(Annotation),而不是传统的修饰符,但它也用于修改方法的行为。
应用对象:方法。
使用场景:在子类中重写父类的方法时,使用@Override注解可以确保正确地重写了父类的方法。
总结,Java中的修饰符种类繁多,以上给出几个最常用的基本类型。