`

java final 总结 自己mark

阅读更多
一、final
 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。
final类不能被继承,没有子类,final类中的方法默认是final的。
final方法不能被子类的方法覆盖,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final不能用于修饰构造方法。
注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。

1、final类
 final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。

2、final方法
如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
使用final方法的原因有二:
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
例如:
public class Test1 {

public static void main(String[] args) {
// TODO 自动生成方法存根
}

public void f1() {
System.out.println("f1");
}
//无法被子类覆盖的方法
public final void f2() {
System.out.println("f2");
}

public void f3() {
System.out.println("f3");
}

private void f4() {
System.out.println("f4");
}
}

public class Test2 extends Test1 {

public void f1(){
System.out.println("Test1父类方法f1被覆盖!");
}

public static void main(String[] args) {
Test2 t=new Test2();
t.f1();
t.f2(); //调用从父类继承过来的final方法
t.f3(); //调用从父类继承过来的方法
//t.f4(); //调用失败,无法从父类继承获得

}
}

3、final变量(常量)
 用final修饰的成员变量表示常量,值一旦给定就无法改变!
 final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。
 从下面的例子中可以看出,一旦给final变量初值后,值就不能再改变了。
 另外,final变量定义的时候,可以先声明,而不给初值,这中变量也称为final空白,无论什么情况,编译器都确保空白final在使用之前必须被初始化。但是,final空白在final关键字final的使用上提供了更大的灵活性,为此,一个类中的final数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。
package org.leizhimin;

public class Test3 {
private final String S="final实例变量S";
private final int A=100;
public final int B=90;

public static final int C=80;
private static final int D=70;

public final int E; //final空白,必须在初始化对象的时候赋初值

public Test3(int x){
E=x;
}

/**
* @param args
*/
public static void main(String[] args) {
Test3 t=new Test3(2);
//t.A=101; //出错,final变量的值一旦给定就无法改变
//t.B=91; //出错,final变量的值一旦给定就无法改变
//t.C=81; //出错,final变量的值一旦给定就无法改变
//t.D=71; //出错,final变量的值一旦给定就无法改变

System.out.println(t.A);
System.out.println(t.B);
System.out.println(t.C); //不推荐用对象方式访问静态字段
System.out.println(t.D); //不推荐用对象方式访问静态字段
System.out.println(Test3.C);
System.out.println(Test3.D);
//System.out.println(Test3.E); //出错,因为E为final空白,依据不同对象值有所不同.
System.out.println(t.E);

Test3 t1=new Test3(3);
System.out.println(t1.E); //final空白变量E依据对象的不同而不同
}

private void test(){
System.out.println(new Test3(1).A);
System.out.println(Test3.C);
System.out.println(Test3.D);
}

public void test2(){
final int a; //final空白,在需要的时候才赋值
final int b=4; //局部常量--final用于局部变量的情形
final int c; //final空白,一直没有给赋值.
a=3;
//a=4; 出错,已经给赋过值了.
//b=2; 出错,已经给赋过值了.
}
}

4、final参数
当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。
public class Test4 {
public static void main(String[] args) {
new Test4().f1(2);
}

public void f1(final int i){
//i++; //i是final类型的,值不允许改变的.
System.out.print(i);
}
}
分享到:
评论

相关推荐

    java中final类型等的应用

    - **定义**:final是Java中的一个关键字,用于声明变量、方法或类。 - **特点**: - 当用于声明变量时,表示该变量的值一旦被初始化后就不能改变。 - 当用于声明方法时,表示该方法不能被子类重写。 - 当用于声明...

    Java面试题总结.doc

    Java面试题总结主要涵盖Java基础知识,包括修饰符的解析、垃圾回收算法、JVM版本、字符类型、常用包的介绍以及方法的重载与重写等核心概念。下面将对这些知识点进行详细阐述: 1. **Java修饰符**:Java中的访问修饰...

    java高级工程师面试总结

    ### Java高级工程师面试总结 #### Java基础 - **Hashtable和HashMap的区别**: - `Hashtable`是线程安全的,而`HashMap`不是。这意味着在多线程环境中使用`Hashtable`时无需额外的同步措施,但这也使得其性能较低...

    java入门程序集 java入门程序集

    根据提供的文件信息,我们可以总结出一系列关于Java编程的基础知识点,主要涵盖了Java程序的基本结构、语法特点以及简单的程序设计实例。 ### Java程序基本结构 #### 1. HelloWorld.java 这是一个非常典型的Java...

    最新总结java面试题

    ### 最新总结Java面试题详解 #### 一、基础概念 **题目1:** Java中的对象引用和垃圾回收机制。 **解析:** 1. **对象引用:** 在Java中,对象通过引用变量来访问。根据《Java语言规范》,Java中有四种不同类型的...

    JAVA核心知识点整理.docx

    "JAVA核心知识点整理" ...Java核心知识点涵盖了Java虚拟机、Java内存模型、Java多线程编程、Java垃圾回收、Java内存管理等方面,本文对这些知识点进行了详细的整理和解释,为Java开发者提供了系统化的学习资源。

    求最大公约数最小公倍数的java程序类的继承.doc

    Java编程基础知识点总结 本文将从Java编程的角度,总结最大公约数和最小公倍数的计算方法,并探讨Java中类的继承机制。...* 《Java高级编程》 by Mark Grand * 《面向对象编程》 by Timothy A. Budd

    JAVA内存分配与管理是Java的核心技术之一

    final字段在编译时可能会被Java编译器优化,比如通过字符串常量池进行存储。 10. **JVM的GC算法**: 不同的JVM实现可能采用不同的垃圾回收算法,如Serial GC、Parallel GC、CMS GC、G1 GC等。每种算法都有其特定的...

    八皇后算法的java实现源代码

    #### 五、总结 通过以上分析可以看出,给定的Java代码实现了八皇后问题的一个有效解决方案。它采用了一种递归加回溯的方法来寻找所有可能的解,并且在程序设计上较为简洁明了。这种解决问题的方法不仅适用于八皇后...

    Java面试八股文十万字总结.docx

    ### Java面试核心知识点详解 #### 一、Java基础篇 ...- **对象头内容**:包括Mark Word、类型指针等。 - **JVM调优参数**:堆大小、GC日志输出等。 - **JVM垃圾回收器**:Serial、Parallel、CMS、G1等。...

    面试的27个经典问题(Java方面)

    Java有多种垃圾收集器,如Serial、Parallel、Concurrent Mark Sweep (CMS) 和Garbage First (G1)。 4. **什么是Java虚拟机(JVM)?** JVM是Java程序的运行环境,它解析.class文件并执行字节码,实现跨平台运行。 ...

    java成神之路

    - **Final**: 表示该变量不可被修改,对于类来说则表示不能被继承。 **4. 垃圾回收** - **内存分配策略**: 如新生代、老年代的分配策略。 - **垃圾收集器**: 如G1收集器的特点和适用场景。 - **GC算法**: 如标记-...

    java笔试面试题汇总

    Java中存在多种垃圾回收算法,如标记-清除(Mark-Sweep)、复制(Copy)、标记-整理(Mark-Compact)等,每种算法都有其适用场景和优缺点。理解这些算法的工作原理对于优化应用程序性能至关重要。 ### 2. Java线程...

    霸屏天下源码java-java-notes:笔记

    霸屏天下源码java 面试的 Java 修订版 参考资料 Java - 完整参考 [第 9 ...Java ...:check_mark_button: ...:check_mark_button: ...创建自己的异常子类 :check_mark_button: 链式异常 :check_mark_button: 适度的话题

    2019年一线互联网公司Java高级面试题总结

    - CMS (Concurrent Mark Sweep): 并发标记清除算法。 - G1 (Garbage First): 采用分区算法,适用于大型堆。 #### 3. 字节码与类加载机制 - **字节码**: - `.class`文件中的二进制数据,由编译器生成。 - **类...

    java_汇总知识点1

    - Final关键字:final用于声明变量不可变,类不可继承,方法不可覆盖。 - 内部类和外部类互访:内部类可以访问外部类的所有成员,包括私有成员;外部类访问内部类需通过实例化内部类对象。 2. **Spring框架**: ...

    java offer收割指南

    String 类不能被继承,因为它被 final 修饰。 3. String,Stringbuffer,StringBuilder 的区别。 String 是不可变的,Stringbuffer 和 StringBuilder 是可变的。Stringbuffer 是线程安全的,而 StringBuilder 不是...

Global site tag (gtag.js) - Google Analytics