java static关键字

本文详细解释了Java中static关键字的两种主要用途:为特定域分配单一存储空间及使方法独立于类的任何实例存在。文章同时介绍了如何声明static方法和字段,并探讨了它们与非static成员之间的交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     java 中的static关键字有两种作用,作用一是:只想为某特定域分配单一的存储空间,而不去考虑究竟要去创建多少对象,甚至不需要去创建对象。作用二是:希望某个方法不与包含它的类的任何对象关联在一起。也就是即不创建这个类的对象也能调用其中的方法。

    当声明一个实物是static是,这个域或方法就意味中不与包含它的类的任何对象相关联。所以,即没有创建某个类的任何对象,也可以调用static方法和访问static域。通常,我们必须创建一个对象,并用创建的对象来访问其中的数据或方法。因为非static方法或域必须知道他们一起运作的对象。当然,由于static方法使用前不需要创建任何对象;所以对于static方法不能简单地调用其非static方法或域而没有指定某个命名对象,来直接访问非static方法和域。也就是说在同一个类中存在一个static字段和一个非static字段,一个static方法和非static方法。static方法可以调用static字段,但不可以调用非static字段。非static方法可以调用static和非static字段。

    只需要将static关键字放在定义之前,就可以第一静态字段和方法。例如一下定义static方法:

public class test {
 private static int i = 10;//static 字段
ublic void add(){
  i++;
 }

 public static void main(String[] args) {//static方法
test.i++;
  test t1=new test();
  t1.add();
  test t2=new test();
  System.out.println("i:"+t1.i+" "+t2.i);
 }
}

我们在看看这段代码在控制台输出的结果。i:12 12。在这里t1.i和t2.i指向同以存储空间,所以输出的值相同。引用static字段的方法有两种,一种是像以上代码t1.i。另一种方法是直接通过类名引用像test.i++;,而这对非static成员则不行。使用类名来引用变量是首选方式,不紧是因为强调了static结构,而且在某些情况下它还为编译器进行优化提供了更好的机会。类似逻辑也适用于static方法。

     尽管static作用于某个字段会改变数据创建的方式(因为一个static字段对每个类来说都只有一份存储空间,而对非static字段对每个类的对象都一个存储空间)。但是static作用于某个方法,差别却没那么大。static方法的一个重要用法就是不用创建任何对象就可以通过类名直接调用它。

 

### Java 关键字概述 Java 是一种强类型的面向对象编程语言,其中的关键字是预定义的、具有特殊含义的保留词。这些关键字在语法上受到严格保护,用户无法将其作为自定义标识符使用。以下是完整的 Java 关键字列表及其主要用途。 --- #### **1. 控制流关键字** 控制流关键字用于管理程序执行路径。 - `if` / `else`: 条件分支语句[^1]。 - `switch` / `case` / `default`: 多路条件分支语句。 - `for` / `while` / `do...while`: 循环结构。 - `break`: 跳出循环或开关语句。 - `continue`: 提前结束当前迭代并进入下一次循环。 --- #### **2. 数据类型关键字** 数据类型关键字用于声明变量的数据类型。 - 基本数据类型:`byte`, `short`, `int`, `long`, `float`, `double`, `char`, `boolean`[^2]。 - 高级数据类型:`class`, `interface`, `enum`。 注意:基本数据类型的大小范围由 JVM 定义,不依赖于底层操作系统的架构。 --- #### **3. 访问修饰符关键字** 访问修饰符决定了类、方法或变量的可见性可访问性。 - `public`: 表示无限制访问。 - `protected`: 可供同一包中的其他类以及子类访问。 - `private`: 仅限于同一个类内部访问。 - 默认(无修饰符):仅供同一包内的类访问。 --- #### **4. 类与接口相关关键字** 这些关键字主要用于定义类、接口及相关特性。 - `class`: 定义一个新的类。 - `interface`: 定义一个新的接口。 - `extends`: 继承父类。 - `implements`: 实现一个或多个接口。 - `abstract`: 抽象类或抽象方法,不能用于静态、私有或最终方法[^3]。 - `final`: 方法不可被重写,或者类不可被继承。 - `static`: 属于类本身而非某个特定实例的方法或变量。 --- #### **5. 对象相关关键字** 涉及对象创建引用的操作。 - `new`: 创建新对象实例。 - `this`: 引用当前对象,常用于区分同名局部变量成员变量[^4]。 ```java public class Example { private int value; public void setValue(int value) { this.value = value; // 使用 "this" 明确指向实例变量 } } ``` - `super`: 引用父类的相关属性或方法。 ```java public class Parent { protected String name; } public class Child extends Parent { public void display() { System.out.println(super.name); // 使用 super 引用父类成员 } } ``` --- #### **6. 异常处理关键字** 异常处理机制的核心组成部分。 - `try` / `catch` / `finally`: 捕获处理运行时错误。 - `throw`: 手动抛出异常。 - `throws`: 声明可能抛出的异常类型。 --- #### **7. 其他重要关键字** - `synchronized`: 支持多线程环境下的同步控制。 - `transient`: 标记不需要序列化的字段。 - `volatile`: 确保多线程环境下变量的一致性。 - `package`: 定义命名空间以组织类文件。 - `import`: 导入外部库或类。 --- ### 总结 上述列举了 Java 中的主要关键字及其典型应用场景。每种关键字都有其独特的功能,在实际开发中需根据需求合理选用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值