`

Java中static、final关键字与static代码块

    博客分类:
  • Java
阅读更多
1. Java中static关键字

可以修饰类,属性,方法。

1. static修饰属性时,无论多少引用都公用一个属性。
一个成员变量是static的,可以通过 类名.成员变量名 来使用。
public class StaticTest {
    public static void main(String[] args){
        MyStatic myStatic = new MyStatic();
        MyStatic.a = 10; // 类名,不是引用名
        System.out.println(myStatic.a);
    }
}
class MyStatic{
    static int a;
}
10

2. 一个方法是static的,可以通过 类名.方法名 来使用。
public class StaticTest2 {
    public static void main(String[] args){
        // MyStatic2 test = new MyStatic2();
        // test.output();
        MyStatic2.output();
    }
}
class MyStatic2{
    public static void output(){
        System.out.println("output");
    }
}
output

3. 子类是不能重写父类的静态方法的。(只能继承):是隐藏不是继承。
1) 父类对象指向子类的引用,调用父类的静态方法。
2) 子类对象指向子类的引用,调用子类的静态方法。
3) 父类对象指向子类的引用,调用子类的非静态方法。
4) 子类对象指向子类的引用,调用子类的非静态方法。
public class StaticTest3 {
    public static void main(String[] args){
        M m = new N();
        m.output();
    }
}
class M{
    public static void output(){
        System.out.println("M");
    }
}
class N extends M{
    public static void output(){
        System.out.println("N");
    }
}
M


2. Java中final关键字

可以修饰类,属性,方法。

1. Final修饰类的时候,该类是一个终态类,不能被继承。
public class FinalTest{
    public static void main(String[] args){
        F f = new F();
    }
}
final class E // 该类不能被继承{
}
class F extends E{
}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	The type F cannot subclass the final class E

2. Final修饰方法的时候,该方法是一个终态方法,不能被重写(Override)。
public class FinalTest2{
    public static void main(String[] args){
        H h = new H();
        h.output();
    }
}
class G{
    public final void output(){
        System.out.println("G");
    }
}
class H extends G{
    public void output(){
        System.out.println("H");
    }
}
Exception in thread "main" java.lang.VerifyError: class org02.H overrides final method output.()

3. Final修饰属性的时候,该属性不能被改写。
public class FinalTest3{
    public static void main(String[] args){
        People people = new People();
        // The final field People.age cannot be assigned
        // people.age = 20;
        // people.address = new Address();
        people.address.name = "shanghai";
        System.out.println(people.address.name);
    }
}
class People{
    final int age = 10;
    final Address address = new Address();
}
class Address{
    String name = "beijing";
}
Shanghai

补充:
final类型的变量必须赋初值。(可以直接赋值,可以在构造方法中赋值。(但是不能两者都存在))
如果是有参数的构造方法,必须给final类型的变量赋值(因为不知道会调用哪个方法)。
对于final类型的成员变量,一般有两种类型的赋值方法:
a) 在声明final成员变量时就赋值。
b) 在声明final成员变量时不赋值,在类的所有构造方法中都为其赋值。


3. Java中static代码块

代码块是在加载的时候执行的,所有无论生成几个对象,只会执行一次代码块。

不能在静态的方法中访问非静态的成员变量。(可以通过类去调用静态方法,但不知道要操作的成员变量是哪个对象中的)
静态方法只能访问静态变量,非静态方法既可以访问静态方法,也可以访问非静态方法。
this不能引用static属性,this是非静态的,只能是当前对象。
public class StaticTest4{
    public static void main(String[] args){
        new S();
        new S();
    }
}
class P{
    static{
        System.out.println("P static block");	
    }
    public P(){
        System.out.println("P constructor");
    }	
}
class Q extends P{
    static{
        System.out.println("Q static block");
    }
    public Q(){
        System.out.println("Q constructor");
    }
}
class S extends Q{
    static{
        System.out.println("S static block");
    }
    public S(){
        System.out.println("S constructor");
    }
}
P static block
Q static block
S static block
P constructor
Q constructor
S constructor
P constructor
Q constructor
S constructor
分享到:
评论

相关推荐

    深入理解Java中的final关键字_动力节点Java学院整理

    需要注意的是,`final` 关键字与 `finally` 关键字不同,`finally` 用于异常处理,确保代码块在任何情况下都能执行。同时,`final` 也与 `Object` 类中的 `finalize()` 方法区分开,`finalize()` 是在对象被垃圾收集...

    Java中的static关键字

    Java 中的 static 关键字 Java 中的 static 关键字是用于声明类的成员变量和成员方法的,它可以使得变量和方法属于类本身,而不属于某个对象。静态变量也称为类变量,静态方法也称为类方法。静态变量和静态方法可以...

    final关键字和static_用法

    通过上述分析,我们可以看到`final`关键字在Java中扮演着非常重要的角色,它不仅可以帮助我们编写更加安全稳定的代码,还可以提高程序的执行效率。正确地使用`final`可以大大增强代码的可靠性和性能。 ### Java中的...

    java中final和static的区别

    Java 中 final 和 static 的区别 final 关键字在 Java 中有多种用法,包括修饰变量、方法、类等。...final 关键字用于表示不可变的变量、方法、类等,而 static 关键字用于表示静态的成员变量、方法、代码块等。

    举例讲解Java中final关键字的用法

    Java中的`final`关键字是一个...总结来说,`final`关键字在Java中扮演着确保数据不变性和控制继承的角色,帮助开发者维护代码的稳定性和安全性。理解并恰当使用`final`关键字对于编写健壮、高效的Java代码至关重要。

    Java关键字final、static使用总结

    ### Java关键字final、static使用总结 #### 一、final关键字详解与...综上所述,`final`和`static`关键字在Java编程中有着非常重要的作用,合理地运用这些关键字可以帮助我们编写出更加健壮、高效、易于维护的程序。

    Linux中Java变量与java关键字。MyEclipse快捷键大全。Java方法

    在Java中,方法是实现特定功能的代码块,可以被多次调用。方法分为实例方法和静态方法,通过return语句返回结果。重载(Overloading)和重写(Overriding)是Java中关于方法的两个重要概念,前者是同一类中方法名...

    学习Java的static与final关键字

    static 关键字是 Java 中的一个静态修饰符,用于修饰成员变量、方法和代码块。静态成员变量和静态方法是隶属于类的,而不是直接隶属于对象的。 分类: 1. 静态变量:也称作类变量,属于类的成员变量。 2. 静态方法...

    MLDN魔乐JAVA_10static关键字.rar

    在Java编程语言中,`static`关键字是一个非常关键的元素,它有着丰富的含义和用途。本教程将深入探讨`static`关键字的各个方面,以便你更好地理解和应用它。 首先,`static`关键字主要用于声明类级别的变量和方法,...

    java中final与static的用法

    在Java编程语言中,`final`与`static`是两个非常关键且常用的关键字,它们各自具有独特的功能和用途,可以极大地增强代码的稳定性和可维护性。下面将详细解析这两个关键字的用法及其在Java中的重要性。 ### 一、`...

    Java中final关键字的用法总结

    Java中的final关键字是一个非常重要的概念,它用于定义不可变性,确保对象或代码段的不可修改性。在Java中,final可以用来修饰类、方法、变量和参数,以实现特定的编程需求。以下是对final关键字在各个场景下用法的...

    Java this、final等关键字总结

    `static`关键字用于创建类级别的变量、方法和代码块,它们不依赖于类的实例。静态变量由类加载时初始化,所有类的实例都可以共享这些变量。静态方法不能访问非静态成员,因为它们不与特定对象关联。Java中的`main`...

    浅谈Java中static关键字的作用

    Java 中 static 关键字的作用 Java 中的 static 关键字是一个非常重要...static 关键字在 Java 中有多种用途,包括修饰成员变量、成员方法、static 代码块等。对 static 关键字的理解和使用是 Java 编程的基本功之一。

    Java中static、this、super、final用法

    Java 中的 static、this、super、final 用法是 Java 语言中四个重要的关键字,它们在 Java 编程中扮演着不同的角色,下面我们将详细介绍每个关键字的用法。 一、static static 关键字在 Java 中有多种用法: 1. ...

    Java面向对象程序设计static关键字.pptx

    首先,static关键字可以用来修饰变量、方法和代码块。static修饰的变量和方法可以用类名直接调用,而不需要创建对象实例。static修饰的代码块只执行一次,优先级仅低于静态变量。 static关键字的作用 static关键字...

    【Java编程教程】详解Java final 关键字.pdf

    Java中的`final`关键字是一个非常重要的概念,它用于在编程中实现不可变性。下面是对`final`关键字的详细解释: ## Java最终变量 当一个变量被声明为`final`时,这意味着它的值一旦被赋值后就无法再改变。这在Java...

    Java中static关键字的作用和用法详细介绍

    静态代码块(static代码块)** 静态代码块是一组在类加载时执行的静态语句,它们在类加载时按照出现的顺序依次执行,且只执行一次。静态代码块常用于初始化静态变量或执行一些类级别的设置。在上述示例中,静态代码...

    Java并发--final关键字.docx

    总结,`final`关键字在Java中起到了锁定变量、方法和类的作用,保证了数据的不可变性和代码的不可篡改性。在编写并发程序时,合理使用`final`可以提高程序的并发安全性和性能。尤其是在多线程环境中,`final`变量...

    java中final和static的总结

    在Java编程语言中,`final` 和 `static` 是两个非常重要的关键字,它们分别具有不同的含义和用法,但都对代码的结构和行为产生深远影响。本文将深入探讨这两个关键字,并结合实际示例来解释它们的应用场景。 首先,...

    JAVA中的保留关键字

    在Java编程语言中,关键字与保留关键字是极其重要的组成部分,它们定义了语言的基本结构和语法规则。对于初学者来说,熟悉这些关键字对于理解和编写正确的Java程序至关重要。 #### 关键字(Keyword) Java关键字是...

Global site tag (gtag.js) - Google Analytics