引发对java关键字的再学习是在项目组遇到的一个问题导致的,通过不同的容器weblogic、ejb访问类中的同一static方法,得出的结果不一样,致使程序运行时产生重大灾难!(本文多处为别处摘录)
一、static
1、static 修饰成员字段
当类被虚拟机加载时,首先按照字段声明的先后顺序对static成员字段进行初始化
2、static 修饰成员函数
该成员函数不能使用this对象
static不能修饰构造函数
static不能修饰函数参数
static不能修饰局部成员变量
3、static 修饰语句块
当类被虚拟机加载时,按照声明顺序先后初始化static成员字段和static语句块
static所修饰的方法和字段是只属于类,所有对象共享
在static所修饰的函数和语句块中不能使用非static成员字段
二、final
1、final 修饰类
表示该类不可被继承
final不可修饰interface接口与abstract类
2、final 修饰方法
表示该方法不可被子类覆盖(即子类不可重写父类的final方法,但可以被继承)
final不可修饰构造函数
3、final 修饰成员属性
表示属性值第一次初始化后不可被修改
final属性可以直接初始化或在构造函数中初始化,如果是直接初始化则其值不可在其他函数中(包括构造函数)修改
4、final 修饰函数参数
参数值不能被函数修改
5、final 修饰函数中的局部变量
局部变量第一次初始化后不可改变其值
使用final的意义
第一、为方法"上锁",防止任何继承类改变它的本来含义和实现。设计程序时,若希望一个方法的行为在继承期间保持不变,而且不可被覆盖或改写,就可以采用这种做法。
第二、提高程序执行的效率,将一个方法设成final后,编译器就可以把对那个方法的所有调用都置入"嵌入"调用里(内嵌机制)。
在java中定义全局变量是通过static来实现的,常量是通过static final来实现
三、this&&super
this通常指代当前对象,super指代父类
下面给出不完整的示例
public class Father {
//public static int age = 32; static成员和static块加载顺序为声明先后
static{
System.out.println("father的静态块init");
//name="卫庄"; error
age = 30;
//this.age=30; error
}
public Father(){
this.name = "卫庄";
height=180;
//weight = 160; error
System.out.println("father的构造函数初始化");
}
public String name;
public static int age;
public static final String sex = "男";
public final int height;
public final int weight=150;
public void run(){
//static int i = 1; error
System.out.println("father run");
}
public final void sleep(){
System.out.println("father sleep");
}
public static void eat(){
int i = 1;
final int a = 3;
//a = 4 ; error
//this.name = "father"; error
//name = "father"; error
age = 32;
System.out.println("father eat");
System.out.println(age);
}
}
public final class Son extends Father{
static{
System.out.println("son的静态块init");
age = 13;
}
public Son(){
super();
name = "盖聂";
System.out.println("son的构造函数初始化");
}
public void run(){
System.out.println("son run");
}
public static void eat(){
System.out.println("son eat");
}
/* error
* public void sleep(){
System.out.println("son sleep");
}*/
public static void main(String []args){
Father f = new Son();
System.out.println(Father.age);
System.out.println(Son.age);
System.out.println(f.name);
System.out.println(f.height);
Father.eat();
f.sleep();
f.run();
f.eat();
}
}
分享到:
相关推荐
Java 中 static、this、super、final 的用法 静态方法(static method)是一种特殊的方法,它可以在不需要创建...static、this、super、final 是 Java 中四个非常重要的关键字,了解它们的用法是 Java 编程的基础。
在Java编程语言中,`static`, `this`, `super`, 和 `final` 是四个非常重要的关键字,它们分别代表不同的概念并具有特殊的用法。 一、`static` `static` 关键字用于声明类级别的成员(变量或方法),这意味着它们...
Java 中的 static 关键字 Java 中的 static 关键字是用于声明类的成员变量和成员方法的,它可以使得变量和方法属于类本身,而不属于某个对象。静态变量也称为类变量,静态方法也称为类方法。静态变量和静态方法可以...
Java中的`static`、`this`、`super`和`final`是四个非常重要的关键字,它们在编程中扮演着至关重要的角色。这篇文章将简要介绍这些关键字的基本用法及其应用场景。 1. **static** `static`关键字用于声明类级别的...
在Java编程语言中,`static`、`this`、`super`和`final`是四个非常重要的关键字,它们各自有着特定的用途和含义。 1. **static**: 静态关键字`static`用于声明类级别的变量和方法,即静态变量和静态方法。静态变量...
"Java 中 static、this、super、final 用法详解" ...Java 中的 static、this、super、final 关键字都是非常重要的,它们用于定义静态变量和静态方法,指代当前对象,访问父类的成员,和定义不可变的变量和方法。
Java开发中的`static`, `this`, `super`, 和 `final`是四个非常重要的关键字,它们在编程中扮演着各自独特的角色。接下来我们将深入探讨这些关键字的用法。 1. **static**: - **静态方法**:如示例中所示,`static...
在Java编程中,`static`、`this`、`super`和`final`是四个非常重要的关键字,它们各自有着特定的用途和含义。 1. **static关键字**: - `static`关键字主要用于声明静态成员(静态变量和静态方法)。静态成员属于...
Java中的关键字this、final以及super在编程中扮演着至关重要的角色。下面我们将深入探讨这些关键字的用法和意义。 首先,`this`关键字是Java中一个非常基础且实用的元素,它代表当前对象的引用。当类的成员变量与...
Java中的`static`、`this`、`super`和`final`是四个非常重要的关键字,它们在编程中扮演着不同的角色。以下是对这些概念的详细解释: ### 1. `static` `static`关键字用于声明类级别的成员,包括静态方法和静态...
### Java中static、this、super、...通过上述详细介绍,我们可以看出`static`、`this`、`super`和`final`关键字在Java编程中扮演着重要的角色,正确地理解和使用这些关键字能够帮助开发者编写出更加健壮、高效的代码。
在Java编程语言中,`static`、`this`、`super`和`final`是四个非常重要的关键字,它们各自有着特定的用途和用法。以下是对这些关键字的详细解释: 1. **static**: - **静态方法**:如文中所示,`static`修饰的...
Java拥有51个关键字,这些关键字在编程中扮演着核心角色,用于声明类型、控制流程、异常处理等。下面我们将逐一介绍这些关键字: 1. **abstract**:用于定义抽象类和抽象方法,表示该类不能被实例化,或方法没有...
6. 静态方法:静态方法可以通过类名和该类对象调用,因此静态方法中不能有 this 和 super 关键字。因为静态方法是独立于任何实例化对象,是属于类本身,所以静态方法必须被实现,不能是抽象的。 7. 静态方法经常...
在编程语言的学习中,了解和掌握关键字是至关重要的一步,特别是在Java这种强类型的语言中。本文将深入探讨Java中的关键字,这些关键字是Java语法结构的基础,它们被Java编译器特殊处理,有着特定的含义和功能。 ...