`
YOUNG918
  • 浏览: 189468 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于java中final方法,类,成员变量的讨论

    博客分类:
  • java
阅读更多
1.定义及编程技巧
/*
* final方法是在派生类中不能被覆盖的方法,final类是不能被覆盖的类。一个类可以含有final方法
* final类和final方法使用final声明
* 技巧:final static 类型成员变量。static使得变量只存在一个拷贝。final使得它不能改变。
* */
2.关于final成员赋值的讨论:
a.final 成员能且只能被初始化一次
b.final成员必须在声明时或者在构造方法 中被初始化,而不能在其它的地方被初始化。
eg:

package mypackage;

public final class FinallyTest
{
private final int params;
  
         public FinallyTest()
         {
         params=5;
         }

public FinallyTest(int para)
         {
         params=para;
         }
         public static void main(String[] args)
         {
         FinallyTest ft=new FinallyTest(20);
         System.out.println(ft.params);
         }
}

eg2:

package mypackage;

public final class FinallyTest
{
private final int params;
         public FinallyTest()
         {
            this(10);
         }
         public FinallyTest(int para)
         {
         params=para;
          }
         public static void main(String[] args)
         {
         FinallyTest ft=new FinallyTest();
         System.out.println(ft.params);
         }
}

上面是两个final初始化的例子。下面我们看一下两种错误的例子

eg3

package mypackage;

public final class FinallyTest
{
private final int params=11;//此处已经赋值
         public FinallyTest()
         {
            this(10);
         }
         public FinallyTest(int para)
         {
  
params=para;
         }

         public static void main(String[] args)
         {
         FinallyTest ft=new FinallyTest();
         System.out.println(ft.params);
         }
}

Error(18,3): variable params is declared final; cannot be assigned

eg4:

package mypackage;

public final class FinallyTest
{
private final int params;
         public FinallyTest()
         {
          this(10);
         }
         public FinallyTest(int para)
         {
   

this.setParams(para);//不能用函数给它赋值必须直接赋值
         }
public void setParams(int b)
{
params=b;
}
         public static void main(String[] args)
         {
         FinallyTest ft=new FinallyTest();
         System.out.println(ft.params);
         }
}

Error(22,2): variable params is declared final; cannot be assigned

eg5

package mypackage;

public final class FinallyTest
{
private final int params;
         public FinallyTest()
         {
          this(10);
         }
         public FinallyTest(int para)
         {
         }
         public static void main(String[] args)
         {
         FinallyTest ft=new FinallyTest();
         System.out.println(ft.params);
         }
}

Error(10,19): variable params might not have been initialized

3.几点说明:

在java中,普通变量系统是自动初始化的,数值变量自动初始化为0,其余类型变量自动初始化为空。但是final类型的变量必须显示初始化,且初始化的方法必须是在申明时或者在构造方法中直接赋值,而不能通过调用函数赋值。

关于构造方法重载的问题,如果程序中没有显示的说明构造方法,那么就有默认的构造方法。如果程序中显示的声明了构造方法,那么默认的构造方法就不再存在

分享到:
评论

相关推荐

    java中final和static的总结

    这是因为内部类会捕获封闭作用域中的变量的副本,而`final`确保变量在内部类中不可变。 接下来,我们讨论`static`关键字。`static`主要用于表示与类相关联的成员,而不是类的实例。其主要特性包括: 1. **静态变量...

    JAVA类与对象及数组习题及答案.pdf

    在本段内容中,我们将会讨论Java编程语言的基础知识点,包括类和对象的使用、基本数据类型、数组、方法的定义和调用等。 首先,我们来看看关于Java的类、对象以及数组的概念。Java是一种面向对象的编程语言,它的...

    类的方法练习

    14. 实例变量与局部变量:实例变量是类的成员变量,静态变量在类加载时创建,局部变量在声明时必须初始化。选项C(静态变量在方法执行时创建)是错误的。 15. 构造方法调用:构造方法不能像普通方法那样被调用,...

    accp5.0java第七章 类的方法

    1. **this**:在类的内部,`this`关键字引用当前对象的引用,常用于区分成员变量和局部变量,以及调用本类的其他方法。 九、final关键字 1. **final方法**:声明为`final`的方法不能被子类重写,确保行为的不可变性...

    static and final.

    - **全局变量**:虽然 Java 没有全局变量的概念,但 `public static` 的成员变量和方法在某种程度上可以被视为全局变量和全局方法,因为它们可以在不创建类实例的情况下被任意类访问。 - **私有静态变量**:可以...

    JAVA面试笔试题汇总-6

    - **成员变量的默认值**:Java中,成员变量(包括实例变量和静态变量)都有默认值。对于基本数据类型的成员变量,默认值取决于类型,如int类型成员变量的默认值为0,boolean类型的默认值为false。 - **初始化成员...

    Java内部类应用详解

    - **访问限制**:只能访问定义该内部类的方法内的最终(final)局部变量。 示例代码如下所示: ```java class Outer { public void doSomething() { final int i = 10; class Inner { public void seeOuter() ...

    thinking in java读书笔记(2)

    在 Java 中,继承是一种实现复用的方式,但是它也有其局限性,例如,子类不能继承父类的 private 成员变量和成员方法。组合则提供了一种更加灵活的方式来实现复用。 六、结论 继承和复用是 Java 编程中的两个非常...

    JAVA讲义第3章.pdf

    第三章的内容主要涉及到Java编程语言的高级特性,包括面向对象编程的三大特性(封装、继承和多态)、访问控制符的使用、抽象类和接口的概念,以及静态成员变量和方法的定义。本章还涉及到关键字super的使用,以及在...

    面向对象的应用用于灵活应用的各个场景笔记总结.docx

    static 关键字在 Java 中用于修饰成员变量和成员方法,具有以下特点: * 静态成员变量随着类的加载而加载,优先于对象的存在,被类的所有对象共享。 * 静态成员方法只能访问静态成员变量或静态成员方法。 * 静态...

    圆周长的java代码

    在这个类内部,声明了一个`final`类型的成员变量`PI`,其值为3.14159f。这里`final`关键字表示`PI`是一个常量,其值在初始化之后不能改变。 ```java public class Const { final float PI = 3.14159f; ``` #### ...

    浅谈Java中方法的参数传值.zip

    在Java中,可以使用final关键字修饰方法参数,确保该参数在方法内部不可修改。这对于防止意外修改参数值和提高代码可读性非常有用: ```java public void useFinalParam(final int num) { num = 10; // 编译错误,...

    2.接口与抽象类的介绍他们之间的异同点及接口是项目分层与618大促接口的实现.docx

    final 关键字可以修饰类、成员变量、方法和局部变量。final 修饰类时,表示该类不能被继承;final 修饰成员变量时,表示该变量的值不能被修改;final 修饰方法时,表示该方法不能被重写;final 修饰局部变量时,表示...

    final关键字的使用

    ### Final关键字详解 #### 一、Final的基本概念...通过上述讨论,我们可以看出`final`关键字在Java编程中的重要作用及其与其他关键字之间的区别。正确理解并使用`final`可以帮助开发者编写更加健壮和易于维护的代码。

    day10-final、接口、多态.pdf

    成员变量的赋值可以在声明时完成,也可以在构造方法中完成。这为初始化提供了灵活性,同时确保了这些变量一旦赋值后不可更改。 接着,我们来讨论接口。在Java中,接口是一个引用类型,它定义了一组方法规范,但不...

    java中与继承有关的程序内存分析

    9. **抽象类与接口**:Java中的抽象类可以有非抽象方法和实例变量,而接口只能包含常量和抽象方法。子类继承抽象类时必须实现所有抽象方法,而实现接口则必须提供接口中所有方法的实现。这两种方式都可以用来实现...

    Java相关知识的学习(关键字)(多态)

    Java编程语言中,`final`关键字是一个非常重要的概念,它具有三个主要的使用场景:修饰类、修饰变量和修饰方法。 12.1 修饰类:当`final`关键字用于修饰一个类时,这意味着该类不能被其他类继承。这在设计不可变类...

    java base

    总结一下,`static` 关键字在 Java 中扮演着关键角色,它使得我们可以无需创建对象就能访问类的成员,这对于工具方法、常量定义以及控制程序流程非常有用。理解和熟练运用 `static` 关键字是掌握 Java 基础的关键...

    Java学习笔记(更新)

    总结一下,Java的`this`关键字帮助我们访问和操作当前对象,继承提供了代码复用和扩展的机制,`static`关键字定义了类级别的成员,而`final`关键字则用于创建不可变的对象、防止方法覆盖和禁止继承。这些核心概念...

    JavaSE基础入门视频教程33天之(13) part1

    在类中,`final`修饰的成员变量需要在声明时或构造器中初始化,而在局部变量中,`final`同样要求立即初始化。视频教程中提到了`final`修饰成员变量和局部变量的用法,强调了它们在确保数据安全性和代码可预测性上的...

Global site tag (gtag.js) - Google Analytics