前情回顾:
- 【2023,学点儿新Java-22】Java中package的作用是什么 | Java中import的用法 | Java中的权限修饰符:private、protected、public
- 【2023,学点儿新Java-21】Java中default的语法格式 | 父类私有的方法能被重写吗?| 详解:this的用法、super的用法 | new在创建对象和数组时分别做了什么?
- 【2023,学点儿新Java-20】流程控制语句关键字及其介绍:while、do、break、continue、return
- …
- 更多Java系列文章,可参阅博主主页哦!
“上敬战死的英灵”,
“下敬涂炭的生灵”,
“中间的敬,人世间的良心”。
——《我的团长我的团》
🎯作者主页: 追光者♂🔥
🌸个人简介:
💖[1] 计算机专业硕士研究生💖
🌟[2] 2022年度博客之星人工智能领域TOP4🌟
🏅[3] 阿里云社区特邀专家博主🏅
🏆[4] CSDN-人工智能领域优质创作者🏆
📝[5] 预期2023年10月份 · 准CSDN博客专家📝
- 无限进步,一起追光!!!
🍎感谢大家 点赞👍 收藏⭐ 留言📝!!!
🌿本篇初步介绍了Java中的其它修饰符,具体先介绍了static、native以及final这三个修饰符,即它们所修饰的内容以及其各自的特性。注:此处不要求完全掌握,在后面的讲解中也会进一步深化对这些修饰符的理解!(其余修饰符,下一篇会继续介绍~~)
🕝目录
- 🍄一、Java中的其他修饰符
- 🍑1.1 static:静态的
- 💧1.1.1 初步介绍
- 💧1.1.2 进一步介绍
- 🍑1.2 native:原生的
- 💧1.2.1 初步介绍
- 💧1.2.2 进一步介绍
- 🍑1.3 final:最终的
- 💧1.3.1 初步介绍
- 💧1.3.2 进一步介绍
🍄一、Java中的其他修饰符
🍑1.1 static:静态的
💧1.1.1 初步介绍
static:静态的
,可以修饰成员变量、成员方法、代码块、成员内部类
-
(1)成员变量,属性: static修饰的成员变量称为“类变量,或静态变量”,它的值是该类所有对象的共享的,存储在方法区,它的get/set方法也是静态的,如果在静态方法中,类变量与局部变量重名时,使用“
类名.
”进行区别。 -
(2)成员方法: static修饰的成员方法称为“类方法,或静态方法”,它不能被重写,可以被继承,调用它可以用“
类名.
”进行调用,在静态方法中,不能出现this,super,不能直接使用本类的非静态的属性、非静态的方法、非静态的成员内部类。 -
(3)代码块: static修饰的代码块称为“静态代码块”,它是在类初始化时执行,因为它的代码会被编译器合并到()类初始化方法中,它只执行一次,子类的初始化时,如果发现父类没有初始化,会先初始化父类。
-
(4)成员内部类static修饰的成员内部类称为“静态内部类”,静态内部类中可以包含静态成员;静态内部类 在外部类外面使用时,使用“
外部类名.静态内部类
"即可。
语法格式:
【修饰符】 class 类{
【修饰符】 static 数据类型 静态变量;
static{
静态代码块;
}
【修饰符】 static 返回值类型 方法名(【形参列表】)【throws 异常列表】{
}
【修饰符】 static class 静态内部类{
}
}
💧1.1.2 进一步介绍
在Java中,static
是一种修饰符,用于修饰类的成员变量和成员方法,它可以使得 被修饰的成员变量和成员方法 不与任何对象关联,而是与类关联,也就是说,它们不属于任何对象,是类公用的。被static修饰的成员也叫类变量和类方法。
其中,
- 类变量属于类,是所有对象共享的,只占用一份内存空间;
- 而成员变量属于对象,每个对象都会有自己的一份拷贝;
类方法也属于类,不依赖于任何对象,可以直接通过类名调用,而非对象引用。
以下是一个使用static修饰符的示例,其中包含一个类变量 和一个类方法:
public class Example {
public static int count = 0; // 类变量
public static void increment() { // 类方法
count++;
}
}
在上面的示例代码中,count
类变量 是所有Example类的对象共用的,increment
方法中使用了count变量并将其自增,而该方法不依赖于任何对象,可以直接通过Example.increment()
方法来调用,而不是对某个对象进行调用。
我们也可以通过对象来访问类变量(不过这并非标准做法),例如:
Example ex1 = new Example();
ex1.count++; // 可以这样访问,但是不建议
需要注意的是,使用static修饰的成员不同于普通成员,与对象产生的关联变成了与类产生的关联,这使得它可以直接通过类名调用并在不实例化对象的情况下被访问。
这种机制可以节省内存,加快执行速度,并且其生命周期随着类的加载而开始,随着类的卸载而结束。
简单小结一下,static修饰符 可以让变量和方法 不依赖于任何对象而直接与类相关联,可以节省内存,加快执行速度,同时也有助于实现单例模式、工厂模式等常见的编程模式。
🍑1.2 native:原生的
💧1.2.1 初步介绍
native
:本地的,原生的。只能修饰方法,表示这个方法的方法体 不是用Java语言实现的, 但是可以和普通的Java方法一样去调用和重写它。
💧1.2.2 进一步介绍
在Java中,native是一种非访问修饰符,用于声明一个方法是由外部定义的,即该方法不在Java程序中实现,而是在外部通过其它语言来实现。
如果一个方法被声明为native,则在Java程序中 只需提供该方法的声明,而其具体实现则由外部语言完成。一般而言,外部语言实现的方法 需要底层操作系统的支持。因此,这种方式可以让Java程序与操作系统进行交互。
使用native的一种情况是 在Java程序中使用操作系统特定的功能,例如访问磁盘、网络等。Java提供了一些类库来处理这些任务,但如果需要更高的性能或功能,那么可以使用native方法。
下面是一个使用native修饰符的示例:
public class NativeExample {
public native void showMsg(); // 声明一个native方法
public static void main(String[] args) {
NativeExample example = new NativeExample();
example.showMsg(); // 调用native方法
}
static {
System.loadLibrary("NativeExample"); // 加载Native库
}
}
在上面的示例代码中,showMsg
方法被声明为native方法,表示在Java程序中只有该方法的声明,不会提供具体的实现。
方法体中的实现会由其它语言来完成,而具体的实现 是由其它外部语言来编写的。main方法中使用example.showMsg()
来调用该方法,但实际上showMsg
的实现是由外部语言来完成。
在程序中,我们可以通过System.loadLibrary
来加载包含该方法实现的库文件,该库文件可以由C/C++等语言编写。
需要注意的是,native并不是一种Java语言特性,而是Java虚拟机的一个特性,它允许Java程序与其他语言进行交互。使用native修饰符时,需要保证外部语言的实现正确,并且与Java程序的接口保持一致,否则会出现运行时错误。
也小结一下:native修饰符 用于声明Java程序中的一个方法 是由外部语言实现的,可以与操作系统或其它的外部库进行交互,通过这种方式可以扩展Java程序的功能和性能。但也需要注意保证外部语言实现的正确性,以免出现运行时错误。
🍑1.3 final:最终的
💧1.3.1 初步介绍
final:最终的,可以修饰类、方法、变量
- (1)
类(包括外部类、内部类
):不能被继承 - (2)
方法
:不能被子类重写,可以被继承 - (3)
变量(包括成员变量和局部变量
):值不能修改,即为常量。建议常量名大写,每个单词之间使用_分割,形式:XXX_YYY_ZZZ
💧1.3.2 进一步介绍
在Java中,final是一种修饰符,可以用于类、变量和方法,它的含义取决于修饰的对象。
当用于类
时,final表示该类不能被继承。例如:
final class Example {
// ...
}
当用于变量
时,final表示 该变量的值无法修改,即该变量变成了常量。例如:
final int COUNT = 10;
当用于方法
时,final表示该方法不能被子类重写(覆盖)。例如:
class Animal {
final void scream() {
System.out.println("Animal screams!");
}
}
class Cat extends Animal {
// 编译报错,无法重写final方法
void scream() {
System.out.println("Cat meows!");
}
}
需要注意的是,final修饰的变量 在声明时必须赋初值,而且一旦赋初值之后,就不能再修改了。同时,final修饰的方法 不能被子类重写,但是它依然能被子类继承并使用。
简言之,final修饰符 可以用于表示类不能被继承,变量的值无法被修改,方法无法被子类重写。它的使用可以保证程序的安全性和可靠性,同时也有助于代码优化和调试。
持续更新 ing~ ~
关注博主,第一时间收到干货文章!
🍒 热门专栏推荐:
- 🥇Python&AI专栏:【Python从入门到人工智能】
- 🥈前端专栏:【前端之梦~代码之美(H5+CSS3+JS.】
- 🥉文献精读&项目专栏:【小小的项目 (实战+案例)】
- 🍎C语言/C++专栏:【C语言、C++ 百宝书】(实例+解析)
- 🍏Java系列(Java基础/进阶/Spring系列/Java软件设计模式等)
- 🌞问题解决专栏:【工具、技巧、解决办法】
- 📝 加入Community 一起追光:追光者♂社区
持续创作优质好文ing…✍✍✍
记得一键三连哦!!!
求关注!求点赞!求个收藏啦!