`
liulanghan110
  • 浏览: 1072759 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JAVA static和Final

    博客分类:
  • JAVA
 
阅读更多

 

1 Static 关键字
       

        Static
可以用来修饰属性、方法、构造静态块。

 
        1.
static 修饰属性时,可以创建具体的对象来调用该属性,也可以直接通过类名调用该属性。当创建对象调用该属性时,每个对象共同拥有一个静态成员 变量,也就是说当其中任何一个对象修改该属性的值时,其他对象的属性值也同时改变。这也就是可以直接通过类名调用该属性的原因,因为无论创建多少对象,所 有对象都共用一个相同静态成员变量。既然每个对象的该属性都有相同的值,直接通过类名调用就显得更简单明了一些。

 

        2.Static 修饰方法时与修饰属性时相类似,可以创建具体的对象调用该方法,也可以直接通过类名调用该方法。


       
值得注意的一点,当static 修饰方法时,方法中的若有属性,则属性也应该是静态的,或者为常量。

 

当运行该程序时,程序报错,错误原因是因为属性name 不是静态的。究其原因,我们会发现如果直接能通过类名调用一个方法,就说明用该类创建的所有对象共 用一个相同的方法,方法的输出结果必须是相同的,当你改变属性值,该方法就会有不同的输出结果,与能直接用类调用该方法相矛盾。所以String name 应该改为static String name


      
静态的方法可以被隐藏但不能被重写, 静态属性,静态方法都没有多态( 可以参考一下jave 的官方文档http://download.oracle.com/javase/tutorial/java/IandI/override.html)


      3.
静态块在类被加载时级执行,优先于主函数。


      4.
关于主函数要加static 的一点看法


当类被加载时,静态的属性和方法即被加载,而非静态成员只有在创建对象时才被加载,这也就是为什么主函数要加static 的原因。由于非静态成员 只有在创建时被加载,当一个类中没有static 修饰的方法时,类加载时所有的方法都不会被加载,直接导致程序无法运行,所以必须找到一个入口,当类加载 时,该入口即被加载,在方法体中才会创建对象,调用方法,程序才能正常运行。

 

 

 

当一个类被加载后,它的静态变量生命周期是什么,是整个应用程序执行结束(比如java web程序,从类加载到服务器关闭还是该线程执行完毕)还是别的什么?


静态变量在内存中只有一个,JAVA虚拟机加载类的时候为其分配内存,位于方法区,被类的所有实例共享,其生命周期取决于类的生命周期。。。当类被卸载。。。静态变量也被销毁
取决于类加载器。如果换了一个类加载器,这个类会被重新加载,相对应的,类中的static也会重新初始化。不过这种情况,对大部分人来讲,在平时写代码的时候,不会碰到,所以如果搞不清楚,那就直接理解成一直存在,直到服务器关闭
和线程无关

 

 

静态变量

 

静态变量是类中的一种特殊变量,他在运行是可以说是从属于类,也就是说由该类定义生成的所有对象共用同一个静态变量, 内存 中只有一个版本。这对于要求在程序运行过程中,只有一个对象副本存于内存非常重要,如在实现单例模式时,为了实现只有一个类对象存于内存中,我们把内对象定义为一个静态变量;为了确保这个执行过程中,只有一个 Connection 对象村与内存中,我们把 Connection 定义为类静态变量。

 

静态代码块

 

静态代码块是以变量 static 表示的一段代码块,他是在第一次创建该类对象或第一次调用该类静态方法时执行,整个程序运行过程中最多执行一次。

 

静态方法

 

静态方法跟静态变量有点类似,也可以说是从属于类的方法,不用定义类实例对象就可以通过类名调用该方法。因此,我们也很容易知道,静态方法只能操作类的静态成员(包括静态变量和静态方法)或者其自己定义的内部成员。

 

非静态变量

 

非静态变量是属于特定类实例对象的,每个对象都有一个自己的副本。区别于静态变量的所有对象共用一个副本

 

非静态方法

 

非静态方法也可以说是属于对象的,只有类定义的对象才可以调用它,非静态方法可以操作静态变量,非静态变量及静态方法。

 


2 Final 关键字


      final
可以修饰属性、方法、类。  


     1
.当一个类被final 修饰时,该类是一个终态类不能被继承。


     2
.当一个属性被final 修饰时,该属性是一个常量,定义时需要赋初值,或者在所有的 构造器方法里赋值。当以对象作为final 修饰的属性时,对象的地址不能改变,但对象的内容可以改变。

 

     

public class test {
	private static final User user = new User();
	public static void main(String argc[]){
		//user里面的属性可以改变,不错
		user.setName("test");
		//user的地址不能变,报错
		user = new User();
	}
}

class User{
	private String name;
	public String getName() {
    	return name;
    }
	public void setName(String name) {
    	this.name = name;
    }
}
 

     3 .当一个方法被final 修饰时,该方法不能被重写,即override

 

分享到:
评论

相关推荐

    java中final和static讲解及实例

    java中final和static讲解及实例

    java中final和static的区别

    Java 中 final 和 static 的区别 final 关键字在 Java 中有多种用法,包括修饰变量、方法、类等。下面是 final 关键字的各种用法: 1. final 修饰变量:表示该变量一旦被初始化,程序无法修改变量的值,该变量变成...

    java中final和static的总结

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

    java中final关键字和static关键字详细用法

    Java中的`final`和`static`关键字是编程中非常重要的两个修饰符,它们分别用于不同的场景,以确保代码的稳定性和高效性。 首先,`final`关键字主要用于表示不可变性。它可以用来修饰类、方法和变量。对于类,如果一...

    final和static用法详解JAVA

    Java 中的 final 和 static 关键字详解 final 关键字是 Java 中的一种访问修饰符,用于修饰类、方法和变量,以确保它们不能被修改或继承。下面是 final 关键字的详细解释: 1. final 类 final 类不能被继承,也...

    static与final的异同

    在Java编程语言中,`static`和`final`都是关键字,它们用于定义不同的特性,但同时也有一些相似之处。下面我们将详细探讨这两个关键字的区别和用法。 首先,`static`关键字是用来声明类级别的变量或方法,这意味着...

    Java编程中static和final关键字的陷阱.pdf

    Java编程中static和final关键字的陷阱.pdf Java编程中static和final关键字的陷阱是Java开发中两个重要的关键字,但是它们的使用也存在一些陷阱,需要开发者注意掌握。 static关键字可以用于修饰属性、方法和类。...

    java中final与static的用法

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

    static、this、super、final的JAVA用法

    Java 中 static、this、super、final 的用法 静态方法(static method)是一种特殊的方法,它可以在不需要创建对象的情况下被调用。Java 中的静态方法使用 static 关键字来修饰,例如 public static void main...

    Java关键字final、static使用总结

    在 Java 编程语言中,final 和 static 是两个非常重要的关键字,它们可以用来修饰类、方法、变量等,了解它们的使用方法和限制非常重要。本文将详细总结 final 和 static 的使用方法和限制。 一、final 关键字 ...

    final关键字和static_用法

    `static`关键字在Java中主要用于创建静态成员,包括静态变量和静态方法。与普通成员不同,静态成员属于类级别,而不是实例级别。这意味着无论创建了多少个类的实例,静态成员只有一个副本存在于内存中。 #### 二、...

    JAVA访问控制 、 static和final.mp4

    JAVA访问控制 、 static和final.mp4

    javafinal和static总结.docx

    Java 中的 final 和 static 关键字详解 Java 中的 final 和 static 关键字是两个重要的关键字,它们在 Java 编程中扮演着重要的角色。本文将详细介绍 final 和 static 关键字的使用方法和注意事项。 一、final ...

    Java中static、this、super、final用法简谈

    Java中的`static`、`this`、`super`和`final`是四个非常重要的关键字,它们在编程中扮演着至关重要的角色。这篇文章将简要介绍这些关键字的基本用法及其应用场景。 1. **static** `static`关键字用于声明类级别的...

    static、final、abstract和interface使用总结

    在Java编程语言中,`static`、`final`、`abstract`和`interface`是四个非常重要的关键字,它们分别代表不同的特性,用于定义类、变量和方法的行为。下面是对这些关键字的详细解释: 1. **static(静态)** - **...

    Java中static、this、super、final用法.doc

    在Java编程语言中,`static`、`this`、`super`和`final`是四个非常重要的关键字,它们各自有着特定的用途和含义。 1. **static**: 静态关键字`static`用于声明类级别的变量和方法,即静态变量和静态方法。静态变量...

    static and final.

    ### Static (静态) 和 Final (最终) 在 Java 中的应用 #### Static (静态) 在 Java 编程语言中,`static` 关键字用于定义类成员(变量和方法)的访问特性,表明这些成员属于类本身而不是类的实例。具体而言: - *...

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

    Java 中的 `final` 关键字是一个至关重要的概念,它被用来声明类、方法和变量,以确保它们在程序执行过程中不可更改。深入理解 `final` 关键字可以帮助开发者写出更加安全、高效的代码。 首先,`final` 关键字可以...

Global site tag (gtag.js) - Google Analytics