`
编程足球
  • 浏览: 257714 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

java 关键字 final

    博客分类:
  • java
 
阅读更多
1. final 数据
package com.lgf.keyword;
/**
 * 测试类
 * @author lgf
 */
class Value {
  int i; 
  public Value(int i) 
  { 
	  this.i = i; 
  }
}

/**
 * @author lgf
 * 一个永不改变的编译时常量
 * 一个在运行时候被初始化,并且不希望值被改变
 * 
 * 对于基本类型,final使得数值恒定不变
 * 对于对象引用,final使得引用恒定不变(引用)
 */
public class FinalData {
  private String id;
  public FinalData(String id) 
  { 
	  this.id = id; 
  }
  private final int valueOne = 9;
  private final static int VALUE_TWO = 99;
  
//  final对象
  private final Value valueObjFinal = new Value(22);

  // Arrays:
  private final int[] a = { 1, 2, 3, 4, 5, 6 };
  
  public static void main(String[] args) {
	FinalData finalData = new FinalData("fd1");
	//! finalData.valueOne++; //Error: valueOne 为final对象,无法进行修改
	System.out.println("FinalData.VALUE_TWO = " + FinalData.VALUE_TWO);
	
	System.out.println("finalData.valueObjFinal.i = " + finalData.valueObjFinal.i);
//	valueObjFinal 对象是静态的,当是对象成员不是静态的
    finalData.valueObjFinal.i++; // 
    System.out.println("finalData.valueObjFinal.i = " + finalData.valueObjFinal.i);
//  ! finalData.valueObjFinal = new Value(0);// final 对象不能修改其引用
    
//    对数组也是引用
    for(int i = 0; i < finalData.a.length; i++){
    	finalData.a[i]++; // Object isn't constant! 可以修改其值
    }
    //! finalData.a = new int[3]; // 不能修改其引用
  }
} 



package com.lgf.keyword;
/**
 * 可以在生成对象时候在进行定义final的值
 * 但是在构造函数中必须进行赋值
 * 实际使用前得到正确的初始化
 * @author lgf
 */
public class FinalBlank {
  private final int i = 0; // 进行初始化
  private final int j; // 不初始化
  
  /**
   * 该类中存在未初始化的final参数,必须在构造函数中初始化
   */
  public FinalBlank() {
	j = 1; 
  }
  public FinalBlank(int x) {
    j = x; // Initialize blank final
  }
  public static void main(String[] args) {
	FinalBlank blankFinal = new FinalBlank();
	FinalBlank blankFinal2 = new FinalBlank(47);
    System.out.println("blankFinal.j = " + blankFinal.j);
    System.out.println("blankFinal.j = " + blankFinal2.j);
  }
} 


2. final 方法参数
package com.lgf.keyword;

class Gizmo {
  public void spin() {}
}

/**
 * 可以对方法的参数设置为final
 * 保证其不会被修改
 * @author lgf
 *
 */
public class FinalArguments {
  void with(final Gizmo g) {
    //! g = new Gizmo(); // g 是final的,不能在方法中进行修改
  }
  void without(Gizmo g) {
    g = new Gizmo(); // g 不是是final的,能在方法中进行修改
    g.spin();
  }
   void f(final int i) { 
//	   i++; // Can't change
   } 
  // 不能对i的值进行修改.仅仅可以对其进行使用
  int g(final int i) { 
	  return i + 1; 
  }
  public static void main(String[] args) {
    FinalArguments bf = new FinalArguments();
    bf.without(null);
    bf.with(null);
  }
}


3. overriding
package com.lgf.keyword;

class WithFinalFunction {
  // Identical to "private" alone:
	private final void f() { 
		System.out.println("WithFinalFunction.f()"); 
	}
	// Also automatically "final":
	private void g() { 
		System.out.println("WithFinalFunction.g()"); 
	}
}

/**
 * 下面的f  和 g 方法都不是进行overwrite
 * 而是单纯的重新定义新的方法 f 和 g 方法
 * @author lgf
 */
class OverridingPrivate extends WithFinalFunction {
	public final void f() {
		System.out.println("OverridingPrivate.f()");
	}
	public void g() {
		System.out.println("OverridingPrivate.g()");
	}
}


class OverridingPrivateChildern extends OverridingPrivate {
	
//	无法overwrite final方法
//	public final void f() {
//		System.out.println("OverridingPrivate2.f()");
//	}
	public void g() {
		System.out.println("OverridingPrivateChildern.g()");
	}
}

public class FinalOverridingIllusion {
	public static void main(String[] args) {
		OverridingPrivateChildern op2 = new OverridingPrivateChildern();
	    op2.f();
	    op2.g();
	    OverridingPrivate op = op2;
	    op.f();
	    op.g();
	    WithFinalFunction wf = op2;
	    //wf.f();
	    //! wf.g();
	}
} 


4. final class
package com.lgf.keyword;
/**
 * 类内所有 private 方法都自动成为 final。
 * @author lgf
 */
final class Dinosaur {
  int i = 7;
  int j = 1;
  private void privateFunction() {}
  public void publicFunction() {}
}

/**
 *final类无法被继承
 * @author lgf
 */
//! class Further extends Dinosaur {}
// error: Cannot extend final class 'Dinosaur'

分享到:
评论

相关推荐

    Java关键字final、static使用总结

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

    Java关键字大全 Java关键字

    Java关键字大全 Java关键字大全是Java编程语言中最基本和最重要的组成部分。这些关键字是Java语言的基础构建块,用于定义类、方法、变量、控制流、异常处理等。了解和掌握Java关键字是每一个Java开发者必备的技能。...

    java关键字final使用方法详解

    Java中的`final`关键字是一种非常重要的修饰符,它用于声明变量、方法或类,以确保它们的不可变性。在深入探讨`final`的使用方法之前,我们需要理解为什么在编程中会需要不可变性。 不可变性在软件设计中起着至关...

    java关键字总结文档

    ### Java关键字总结 Java是一种广泛使用的面向对象编程语言,它具备简单性、可移植性、高性能等特点。在Java中,关键字具有特殊的语法含义,不能用作标识符(例如变量名或方法名)。以下是对给定文件中提到的Java...

    Java关键字、标识符、注释、转义字符.docx

    Java 关键字、标识符、注释、转义字符详解 Java 语言中有四个重要的概念:关键字、标识符、注释和转义字符。这些概念是 Java 语言的基础,理解这些概念对于编写 Java 代码非常重要。 一、Java 关键字 Java 关键字...

    java关键字final用法知识点

    Java中的`final`关键字是一种非常重要的修饰符,它用于创建不可变的对象或阻止进一步的修改。在本文中,我们将深入探讨`final`关键字在不同场景下的使用,包括变量、方法、参数和类的修饰。 1. **变量** - **局部...

    Java关键字分类解释

    ### Java关键字分类解释 #### 一、类与接口定义关键字 - **class**: 在Java中,`class`关键字用于声明一个类。类是面向对象编程的基本单元,它定义了一组属性(成员变量)和方法(成员函数),这些共同构成了一个...

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

    首先,让我们来谈谈“Linux中Java变量与java关键字”。在Java编程中,变量是存储数据的容器,它们可以是基本类型(如int、float、boolean等)或引用类型(如对象)。在Linux环境下,Java程序的运行与Windows或Mac...

    说一说java关键字final和transient

    在Java编程语言中,`final` 和 `transient` 是两个非常重要的关键字,它们分别用于不同的场景。让我们深入了解这两个关键字的含义、用法以及在实际编程中的应用。 首先,我们来谈谈`final`关键字。`final` 可以用于...

    Java关键字大全

    Java关键字大全 Java语言中有多种关键字,每个关键字都有其特定的用途和作用。下面是Java关键字大全的详细解释: 1. abstract关键字 abstract关键字可以修改类或方法。abstract类可以扩展(增加子类),但不能...

    Java关键字详细解

    这篇文档《Java关键字详细解》将深入探讨Java中的关键字及其用途。 首先,我们来看看Java中的主要关键字。`public`、`private`、`protected`是访问修饰符,用于控制类、方法和变量的访问权限。`public`可以被任何...

    浅析对Java关键字final和static的理解

    在Java编程语言中,`final`和`static`是两个非常重要的关键字,它们分别用于定义不同类型的特性。下面我们将深入探讨这两个关键字的含义和用法。 首先,`final`关键字在Java中具有三个主要用途:修饰类、方法和变量...

    java关键字总结

    接下来,关键字final用于声明常量,即一旦被赋值后不可更改的变量。final可以修饰基本数据类型变量、引用类型变量、方法和类。当final修饰基本类型变量时,该变量不可变。当final修饰引用类型变量时,该引用不可变,...

    Java final关键字

    在Java编程语言中,`final`关键字扮演着一个至关重要的角色,它被用来声明一个变量、方法或类为不可变的。在这个学习demo中,我们将深入理解`final`关键字的各种用法及其背后的原理。 首先,`final`关键字用于变量...

    JAVA关键字列表

    JAVA关键字列表 Java是一种面向对象的编程语言,具有多种关键字,用于控制程序的执行、定义变量、类和方法等。本文档系统列举了Java的关键字及其用法分类,总共分为以下几个类别:访问控制、类、变量修饰符、流程...

    java关键字、保留字

    ### Java关键字详解 #### 概述 Java是一种广泛使用的面向对象编程语言,它拥有丰富的关键字集,用于控制程序的行为和结构。Java关键字是由Java语言预定义的标识符,具有特殊的含义,不能用作变量名、方法名或类名等...

    Java关键字及其作用

    Java 关键字是编程语言中预定义的具有特殊含义的标识符,它们是构建和管理程序结构的关键元素。本文将详细解析 Java 中的访问控制关键字,以及类、方法和变量修饰符。 首先,我们来看看访问控制关键字: 1. **...

    java提高篇之关键字final编程开发技术共5页.pdf

    在这个"java提高篇之关键字final编程开发技术共5页.pdf"的资料中,我们将会深入探讨`final`的关键特性和应用场景。 1. **不可变性**: `final`关键字可以应用于变量,一旦被声明并赋值后,就不能再更改。这在多...

Global site tag (gtag.js) - Google Analytics