java语言中 final和static 的 区别是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java语言中 final和static 的 区别是啥?相关的知识,希望对你有一定的参考价值。

请各位给个准确的答案

final 被修饰的变量为常量一旦赋值不能修改,被修改的方法为最终方法不能

被重写,被修饰的类是最终类,不能被继承

static 被修饰的变量和方法,为该整个类及其类的对象所共享,一个类或对

象修改了被定义的类或方法,其他的也会跟着变量。。这就是说被static修饰的

是大家共用的。。

就一块肥皂多个人用,每个人用都会少而不是像不用static修饰的是每个人有

每个人的肥皂,你用自己的和别人没有关系。。

祝你好运!

如果还是不很明白,到我空间转转也许会更明白。。。
参考技术A final是最终的意思, 也就是只要是他修饰的就不可在改变了
如果final用于修饰变量, 那么这就是声明了一个常量
如果用于修饰方法, 那么这个方法就不可以被子类重写
如果用于修饰类, 那么这个类就不可被继承

static 静态的, 他表示某些东西是静态加载的, 而非动态加载
如果static用于修饰一个变量, 那么这个变量就会变成一个类级别的变量,他会被存储在内存中的一个共有区间内,本类所有对象都会操作这一个变量(而不像没有static修饰的变量那个为每一对象都创建一个单独的变量)

static 用于修饰方法, 那么这个方法只要通过类名就能够直接访问了,而不需要创建这个类的对象

static 修饰类, 那么这个类将会是静态加载, 也就是不需要我们new采取加载,而是应用程序已启动,他就被接在到java虚拟机中了。

基本就是这些了, 不知道我表述的是否明白
参考技术B final表示最终的。用它修饰的类表示是最终的类,不能再被继承。用它修饰的变量只能被一次赋值,然后就不能再修改了。

static表示静态。静态的方法或变量是属于整个类所共有的,不属于任何对象。
静态的变量或变量是一个类执行时首先被加载的:静态变量、方法、代码块---成员变量、构造方法。
一个静态变量是类中的所有成员所共享的。就像是很多人都吃一块面包。
而非静态的变量,是每个调用它的成员都拥有对它的一份拷贝,也就是每个人都有一块面包,自己吃自己的,影响不到其他人。
参考技术C 在类的声明中使用final
使用了final的类不能再派生子类,就是说不可以被继承了。有些java的面试题里面,问String可不可以被继承。答案是不可以,因为 java.lang.String是一个final类。这可以保证String对象方法的调用确实运行的是String类的方法,而不是经其子类重写后的 方法。
2、在方法声明中使用final
被定义为final的方法不能被重写了,如果定义类为final的话,是所有的方法都不能重写。而我们只需要类中的某几个方法,不可以被重写,就在方法前加final了。而且定义为final的方法执行效率要高的啊。
3、在变量声明中使用final
这样的变量就是常量了,在程序中这样的变量不可以被修改的。修改的话编译器会抱错的。而且执行效率也是比普通的变量要高。final的变量如果没有赋予初值的话,其他方法就必需给他赋值,但只能赋值一次。
总结:
这个关键字并不是很难理解,final的英文意思是“最终的”。他修饰了什么东西都是最终的。不可以改变的。效率也比较高。通常在java的优化编程中往往会提及到这一点。

static 是静态修饰符,什么叫静态修饰符呢?在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。这样做有什么意义呢?
在Java程序里面,所有的东西都是对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但如果申明的是静态类 那么在调用的时候就不用再实例一次,就直接用class.xx 就可以调用成员变量.给你写一个简单的例子:
未声明为static
class ClassA
int b;
public void ex1()



class ClassB
void ex2
int i;
ClassA a = new ClassA();
i = a.b; //这里通过对象引用访问成员变量b
a.ex1; //这里通过对象引用访问成员函数ex1



声明为static
class ClassA
static int b;
static void ex1()



class ClassB
void ex2
int i;
i = ClassA.b; //这里通过类名访问成员变量b
ClassA.ex1; //这里通过类名访问成员函数ex1

Java_基础java中static与final关键字的区别

1.static关键字

经由static关键字修饰的成员为类成员,被所有对象所共享,通常通过类名来引用static成员。类加载的连接阶段将会为静态成员变量在jvm内存的方法区分配空间,并在类的初始化阶段赋初值。

一个类的static成员变量只有“一份”(存储在方法区),无论该类创建了多少对象。看如下的示例:

public class StaticDemo {
    public static void main(String[] args) {
        People p1 = new People(18);
        People p2 = new People(19);
        People p3 = new People(20);

    }

}


class People {
    private static int num;
    private int age;
    public People(int age) {
        this.age = age;
        System.out.println(++num);
    }
}

输出结果:

1
2
3

2.final关键字

1)final修饰变量:意为其值不可改(即为常量),在类的编译阶段成员常量就会被初始化,并保存在class文件的静态常量池中,待类加载的时候再将静态常量池中的常量读取到jvm内存方法区,保存在方法区的运行时常量池中。

2)final修饰方法:表示方法不能被重写。

3)final修饰类:表示该类为终极类,不能被继承。JDK中的一些基本类库被定义成final,例如String,Math,Integer等,这样可以防止对系统造成危害。

final和static关键字的区别:final可修饰局部变量,表示其值不可更改。static用于修饰类成员,所以不能修饰局部变量。

以上是关于java语言中 final和static 的 区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Java中 final和static修饰的变量有啥区别?

Java基础_final和static区别

java final static 和final区别

java 中的static和final怎么使用?它们的区别?

Java修饰符 abstract,static,final 的区别详解

Java中final与 static final 修饰的常量的区别