1.Static关键字
谈到static,我们通常会说它是一个静态修饰符,究竟什么才是静态修饰符,这个解释起来有些棘手,也很难让人理解它的意思。这就像让我们解释一个成语的意思,我们直接从成语词典里读出它的释义一样,生涩难懂,让人摸不着头脑。所以,当我们解释一个词时,往往要将其具体化——这个词有什么作用,应用在哪,会产生什么样的效果。
Static可以用来修饰属性、方法、构造静态块。
1.当static修饰属性时,可以创建具体的对象来调用该属性,也可以直接通过类名调用该属性。当创建对象调用该属性时,每个对象共同拥有一个静态成员变量,也就是说当其中任何一个对象修改该属性的值时,其他对象的属性值也同时改变。这也就是可以直接通过类名调用该属性的原因,因为无论创建多少对象,所有对象都共用一个相同静态成员变量。既然每个对象的该属性都有相同的值,直接通过类名调用就显得更简单明了一些。
用Static修饰的属性适用于单值情况,比如简单画图板重绘时存放信息的队列,五子棋用于存储棋子坐标和其他信息的二维数组…
2.Static修饰方法时与修饰属性时相类似,可以创建具体的对象调用该方法,也可以直接通过类名调用该方法。
值得注意的一点,当static修饰方法时,方法中的若有属性,则属性也应该是静态的,或者为常量。
public class Student {
String name;
public Student(){};
public Student(String name){
this.name=name;
}
public static void study(){
System.out.println(name+"is playing now!");
}
}
public class Teacher {
public static void main(String [] args){
Student stu=new Student("张三");
Student st=new Student("李四");
//Student.name="张三";
st.study();
stu.study();
}
}
当运行该程序时,程序报错,错误原因是因为属性name不是静态的。究其原因,我们会发现如果直接能通过类名调用一个方法,就说明用该类创建的所有对象共用一个相同的方法,方法的输出结果必须是相同的,当你改变属性值,该方法就会有不同的输出结果,与能直接用类调用该方法相矛盾。所以String name应该改为static String name。
静态的方法可以被隐藏但不能被重写,静态属性,静态方法都没有多态(可以参考一下jave的官方文档http://download.oracle.com/javase/tutorial/java/IandI/override.html)。
3.静态块在类被加载时级执行,优先于主函数。
4.关于主函数要加static的一点看法
当类被加载时,静态的属性和方法即被加载,而非静态成员只有在创建对象时才被加载,这也就是为什么主函数要加static的原因。由于非静态成员只有在创建时被加载,当一个类中没有static修饰的方法时,类加载时所有的方法都不会被加载,直接导致程序无法运行,所以必须找到一个入口,当类加载时,该入口即被加载,在方法体中才会创建对象,调用方法,程序才能正常运行。
2 Final关键字
final可以修饰属性、方法、类。
1.当一个类被final修饰时,该类是一个终态类不能被继承。
2.当一个属性被final修饰时,该属性是一个常量,定义时需要赋初值,或者在所有的 构造器方法里赋值。
当以对象作为final修饰的属性时,对象的地址不能改变,但对象的内容可以改变。
3.当一个方法被final修饰时,该方法不能被重写,即override。
分享到:
相关推荐
"Java关键字与标识符小结" Java语言中,关键字和标识符是两个重要的概念。关键字是被Java语言赋予了特殊含义的单词,总共有50个。它们被用来定义数据类型、流程控制、访问权限修饰符、类、函数、变量修饰符、类之间...
10. `final` 关键字用于声明不可变的类、方法或变量。这意味着类不能被继承,方法不能被重写,变量一旦赋值后不能修改。 11. `finally` 无论是否发生异常,都会执行的代码块,通常用于确保资源的释放。 12. `float...
final关键字用于声明不可改变的变量、方法和类。一旦声明为final,就不能再改变其值或被重写。 10. **this 和 super**: `this`关键字用于引用当前对象,而`super`则用于引用父类的成员,包括变量、方法和构造器...
2. **接口的成员变量默认为public static final**:接口中的变量自动被声明为公共(public)、静态(static)和常量(final)。这意味着你可以直接通过接口名访问这些变量,而无需创建接口的实例。 3. **多继承特性...
接口的数据成员一定要赋初值,且此值将不能再更改,允许省略final关键字。接口中的方法必须是“抽象方法”,不能有方法体,允许省略public及abstract关键字。 例如,声明一个Insurable 接口,用于计算保险费用: ...
### Java笔试题小结 #### 1. Java 字符串(String) **问题**: String 类的特点是什么?与 StringBuffer 的区别? **分析与解答**: `String` 类在 Java 中是不可变的,即一旦创建了一个字符串对象,其内容就不能...
5.7 本章小结 本章主要讲解了 Java 语言程序设计中接口和多态的概念、语法和应用。接口是一种抽象机制,提供了一种定义类之间的“协议”的方式,允许类之间实现多继承,同时免除 C++ 中的多继承那样的复杂性。多态...
11.2.4 理解final关键字 296 11.2.5 总结:类的修饰符 297 11.3 方法的修饰符 297 11.3.1 方法的访问控制符 298 11.3.2 public:没有限制的修饰符 299 11.3.3 protected:仅对子类和同包的类可见 300 11.3.4 ...
11.2.4 理解final关键字 296 11.2.5 总结:类的修饰符 297 11.3 方法的修饰符 297 11.3.1 方法的访问控制符 298 11.3.2 public:没有限制的修饰符 299 11.3.3 protected:仅对子类和同包的类可见 300 11.3.4 ...
接口的基本定义和使用 本篇文章主要讲述了接口的基本定义、使用形式、设计模式、与抽象类的区别等知识...6. 小结 本篇文章总结了接口的基本定义、使用形式、设计模式、与抽象类的区别等知识点,希望对读者有所帮助。
7.7 static关键字 7.7.1 静态方法属于类 7.7.2 静态内部类的限制 7.8 native方法的陷阱 7.9 小结 第8课 异常捕捉的陷阱 8.1 正确关闭资源的方式 8.2 finally块的陷阱 8.2.1 finally的执行规则 8.2.2 ...
1.5 小结 11 第2章 基本数据类型——构建Java 大厦的基础 12 2.1 源代码注释 12 2.1.1 单行注释 12 2.1.2 区域注释 12 2.1.3 文档注释 13 2.2 基本数据类型 14 2.2.1 整型 15 2.2.2 浮点型 17 ...
在这个示例中,我们将final关键字添加到Father类的静态变量str上,这样可以确保str的值不会被修改。但是,这并不影响常量池的工作机制。输出结果表明,静态块已经执行,并且字符串"Hello,world"已经被添加到了常量池...
#### 四、小结 本文详细介绍了Java中的基本数据类型,包括标识符、关键字以及具体的数据类型如逻辑类型、整数类型等。通过这些基础知识的学习,可以帮助开发者更好地理解和使用Java语言的基础语法。此外,通过对...
**10.1.5 枚举小结** - 枚举是一种引用类型,因为它隐式继承自`java.lang.Enum`类。 - 枚举是JDK 5.0之后新增的特性,使用并不频繁。 - 枚举值是常量,具有默认的`public static final`修饰符。 - 使用枚举类型的...
18. @static标记:指明关键字为静态属性或方法。 19. @var标记:用于声明变量类型。 20. @version标记:指明版本信息。 21. @todo标记:标记待改进或未实现的部分。 22. @throws标记:指出函数可能抛出的异常及...
### 小结 通过上述介绍可以看出,NetBeans 的 Java 代码编辑器不仅提供了高效的代码模板、智能代码提示与自动完成功能,还有强大的代码生成能力。这些特性极大地方便了 Java 开发者,显著提高了开发效率。无论是...
5. **Java类的高级特性**:包括继承的运行顺序、super关键字的使用、递归、方法覆盖和重载、多态的深入理解、static修饰符(静态成员和静态方法)、final修饰符、内部类以及内存分配的讨论,特别是String类的特殊性...