[Java开发之路](1)final关键字

在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。下面就从这三个方面来了解一下final关键字的基本用法。

1.修饰类

final修饰类时,则该类不能被继承


package com.qunar.bean;

 

public final class Student {

}


package com.qunar.bean;

 

// Remove final modifier from Student

public class Qunar extends Student{

 

public static void main(String[] args){

}

}

在使用final修饰类的时候,要注意谨慎选择,除非这个类真的在以后不会用来继承或者出于安全的考虑,尽量不要将类设计为final类。

2.修饰方法

final修饰方法,则该方法不允许被覆盖(重写)

使用final方法的原因有两个:第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率,在早期的Java实现版本中,会将final方法转为内嵌调用,但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。

如果只有在想明确禁止该方法在子类中被覆盖的情况下才将方法设置为final的。

注:类的private方法会隐式地被指定为final方法。


package com.qunar.bean;

 

public class Student {

private String name;

private int age;

private String sex;

public final void play(){

System.out.println("Student");

}

}


package com.qunar.bean;

 

public class Qunar extends Student{

// Remove final modifier from Student.play

public void play(){

System.out.println("Qunar");

}

public static void main(String[] args){

Qunar qunar = new Qunar();

qunar.play();

}

}

3.修饰属性

final修饰属性则该类的属性不会隐式的初始化(类的初始化属性必须有值)或在构造方法中赋值(但只能选其一)


package com.qunar.bean;

 

public class Student {

private String name;

// 报错 final filed age may not hava been initialized

// final private int age;

final private int age = 10;

private String sex;

public final void play(){

// final filed Student.age cannot been assigned

// age = 30;

System.out.println("Student");

}

}

4.修饰变量

final修饰变量则该变量的值只能赋一次值,即变为常量

时间: 2024-10-27 18:10:02

[Java开发之路](1)final关键字的相关文章

java开发之路的困惑

问题描述 已经毕业快一年了,算上大四也已经有了2年左右的开发经验.现在的公司是一个比较正规软件公司,名字就不说了,每个项目大概在400万左右,目前这个项目已经验收.由于这个项目的特殊性还有比较多的开发需要完成,加上项目组上3个项目经理离职,在现场只有我一个人,需要同时兼任项目经理的职责,目前公司给我的待遇算上全部的补贴在6500左右.在开发上,能够使用公司的框架正常开发,现在的开发全部都是一些业务逻辑上的开发,总感觉没有学习到什么技术,除了写sql语句熟练了.由于在大学基础没有学好,总感觉自己的

[Java开发之路](9)对象序列化与反序列化

1. 对象序列化 当你创建对象时,只要你需要,它会一直存在,但是程序终止时,无论何时它都不会继续存在.尽管这样做是非常有意义的,但是在某些情况下,如果程序不运行时扔能存在并且保存其信息,那将对我们非常有用.这样,在下次程序运行时,该对象将被重建并且拥有的信息与程序上次运行时它所拥有的信息相同.当然,我们也可以通过将信息写入文件或者数据库,但是如果能将一个对象声明为是"持久性"的,并为我们处理掉所有的细节,这将会显得十分方便. Java的序列化是将那些实现了Serializable接口的

[Java开发之路](5)异常详解

1. 异常分类 在Java程序设计语言中,异常对象都是派生于Throwable类的一个实例.其是如果Java中的异常类不能满足需求,用户可以创建自己的异常类. 下图是Java异常层次结构的一个简化示意图. 从图上可以看出,所有的异常都是继承于Throwable类,但是在下一层立即分解为两个分支:Error和Exception. (1)Error Error描述了Java运行时系统的内部错误和资源耗尽错误.应用程序不应该抛出这种类型的错误,如果出现了这样的内部错误,除了通告用户,并尽力使程序安全的

[Java开发之路](15)注解

1. 简介 注解(也被称为元数据),为我们在代码中添加信息提供了一种形式化的方法.注解在一定程度上是把元数据与源代码文件结合在一起,而不是保存在外部文档中这一大趋势之下所催生的. 它可以提供用来完整的描述程序所需的信息,而这些信息是无法使用Java来表达的.因此,注解使得我们能够以将编译器来测试和验证的格式,存储有关程序的额外信息.注解可以用来生成描述符文件,甚至是新的类定义.通过使用注解,我们可以将这些元数据保存在Java源代码中,并利用Annotation API为自己的注解构造处理工具.

[Java开发之路](10)DOM解析XML文档

对象序列化的一个重要限制是它只是Java的解决方案:只有Java程序才能反序列化这种对象.一种更具操作性的解决方案是将数据转化为XML格式,这可以使其被各种各样的平台和语言使用. 1. 简介 DOM 是用与平台和语言无关的方式表示XML文档的官方 W3C 标准.DOM 是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构, 然后才能做任何工作. 由于它是基于信息层次的,因而 DOM 被认为是基于树或基于对象的.DOM 以

[Java开发之路](3)Java常用类

1.包装类 大家对基本数据类型都非常熟悉,例如 int.float.double.boolean.char 等.基本数据类型是不具备对象的特性,比如基本类型不能调用方法.功能简单...,为了让基本数据类型也具备对象的特性, Java 为每个基本数据类型都提供了一个包装类,这样我们就可以像操作对象那样来操作基本数据类型.  基本类型和包装类之间的对应关系: 包装类主要提供了两大类方法:     1. 将本类型和其他基本类型进行转换的方法     2. 将字符串和本类型及包装类互相转换的方法 pac

[Java开发之路]反射机制

简介 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. Java反射机制:"程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言".从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言.但是Java有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以

[Java开发之路](14)反射机制

1. Class类 普通对象构造方式: // 创建Book实例对象 Book book = new Book(); 对于Class的实例对象如何构造呢? Class的构造函数是私有的,只有JVM才能创建实例对象 // Class的构造函数是私有的,只有JVM才能创建Class实例对象 Class class1 = new Class(); // 错误 public final class Class<T> implements java.io.Serializable, java.lang.r

[Java开发之路](16)学习log4j日志

1. 新建一个Java工程,导入Jar包(log4j-1.2.17.jar) Jar包下载地址:点击打开链接 2. 配置文件:创建并设置log4j.properties # 设置 log4j.rootLogger = debug,stdout,D,E   # 输出信息到控制台 log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.append