当前位置:网站首页 >> 作文 >> 2023年java中final关键字实用

2023年java中final关键字实用

格式:DOC 上传日期:2023-04-22 08:32:17
2023年java中final关键字实用
时间:2023-04-22 08:32:17     小编:zdfb

在日常的学习、工作、生活中,肯定对各类范文都很熟悉吧。相信许多人会觉得范文很难写?以下是小编为大家收集的优秀范文,欢迎大家分享阅读。

java中final关键字篇一

面向对象程序设计的学习心得

推荐度:

欧式家具特点(详解)

推荐度:

写给对象的跨年文案

推荐度:

《面向个体的教育》的心得体会

推荐度:

面向学院的活动策划书

推荐度:

相关推荐

在java中通过final关键字来声明对象具有不变性(immutable),这里的对象包括变量,方法,类,与c++中的const关键字效果类似。

immutable指对象在创建之后,状态无法被改变

可以从三个角度考虑使用final关键字:

代码本身:不希望final描述的对象所表现的含义被改变 安全:final对象具有只读属性,是线程安全的 效率:无法修改final对象本身,对其引用的操作更为高效

final 变量

定义final object a,则a只能被初始化一次,一旦初始化,a的数据无法修改,若a为引用类型,则不能重新绑定其他对象。

未被初始化的final变量被称为blank final,若为成员变量,则必须被初始化或在构造器中赋值。

例子:

class circle { static final double pi = 3.1415926; final int radius = 5; final int xpos; final int ypos; public circle(int x, int y) { xpos = x; ypos = y; }}

final 方法

定义final method,则该方法无法被重载,方法设计者不希望由于对方法的重载导致其他相关功能出现异常。

例子:

class baseclass { public final void method() {}}class derivedclass extends baseclass { public final void method() {} // 编译出错}

需要注意的是,final方法的定义不一定能够产生inline的效果,因为方法是否inline取决于jvm的策略,而非final关键字,通过final的设计提高方法效率是不准确的。

final 类

final class x定义的类x无法被继承。

在java中,string类被设计成final,其定义如下

复制代码 代码如下:

public class final string extends object implements serializable, comparable

, charsequence

为什么string被设计成final? 一个string类的实例被初始化后,其在堆上的内容无法被改变,string类提供的任何修改string对象的方法都只能够产生一个新的string对象,大大简化了对string的操作,是代码更易于阅读和理解; string final是实现string interning(值只有一份)的必要条件,因为通常代码中存在大量的string对象,不同的引用会指向相同的字符串空间,若string不为final,则当一个字符串空间的内容改变时,所有的引用都需要知道这一情况,这一机制的实现是十分复杂的,无疑会影响效率。string interning能够节省内存空间,同时也节省时间花销; string只读,则不必担心非常重要的内容被篡改。

内部类与final

在一个方法内定义匿名内部类时,内部类只能访问方法内的final类型变量,使得java编译器能够提前捕获变量的值,并在内部类保存一份副本,当方法销毁时,内部类的内存空间依然完整。

例子:

public class wrapper { public static void main(string[] args) { // object obj = null; //编译出错 final object obj = null; new thread(new runnable() { public void run() { obj = "hello"; } }).start(); }}

ps:内部匿名类无法访问外面的非 final 的变量的问题

这个听起来有点拗口,其实我更多的是想说 java 内部类的一些特性。

之所以会想起这个题目只要是最近在阅读 jdk 源码中关于 http keepalive 的代码时,其中一个源文件 无意中看到下面这段代码。

final boolean result[] = {false};ileged(new egedaction() { public object run() { try { inetaddress a1 = ame(h1); inetaddress a2 = ame(h2); result[0] = (a2); } catch (unknownhostexception e) { } catch (securityexception e) { } return null; }});return result[0];

java 的匿名内部类无法访问对应的函数的非 final 变量。要想访问外部的 local variable, 这个variable 又必须要先定义成 fianl, 但是一定义成 final 就不能在匿名内部类中修改这个变量的值,所以要想匿名内部类返回一些有用的值时不是那么的容易。这段代码使用了一个非常巧妙的方法,这里使用数组的方式绕过这个限制,虽然我们无法修改 result 这个变量的引用,但是我们可以修改 result 指向的那个数组的内容。

只是想记录一下内部匿名类修改外部变量的一个小技巧。不过既然已经到了这里,不妨继续的看看内部类都有哪些特性或者限制吧。

在继续本文前,我觉得非常有必要的明确下本文中涉及的一些 java 术语,这些术语不太好翻译成中文,所以我们还是用英文来描述。

// this is classpublic class javaterm { // field or member variable private int field; // constructor public javaterm() { } // method public void method() { // local variable int localvariable = 0; // local class class localclass { public localclass() { } } // anonymous class new runnable() { public void run() { } }; }}

我们今天更多的将关注于 local class 和 anonymous class,它们都属于 inner class。

java 允许我们在一个 class 里面再定义一个 class, 称为嵌套类(nested class), nested class 又可以分为两类,一类是 static nested class, 另外一个是 non-static nested class, 又称为 inner class。inner class 又可以分为 local class 和 anonymous class。

anonymous class 的一些限制

一个 anonymous class 可以访问包含它的类的类变量(field/member variable) 一个 anonymous class 不能访问包含它的作用于中的不是 final 的本地变量(local variable) 和 nested class 一样,anonymous class 中定义的 variable 会覆盖包含这个内部类的作用域中的同名的 variable 你不能定义静态的初始化方法 一个 anonymous class 可以有静态的成员变量。这个成员变量必须是常量(用 final 修饰)。 一个 anonymous class 不可以有构造函数

s("content_relate");

【java中通过final关键字面向对象的详解】相关文章:

java中final关键字用法的讲解

11-24

java面向对象三大特征详解

10-04

java的面向对象

09-30

java中class对象详解

10-01

java面向对象编程讲解

11-23

java面向对象编程的方法资料

12-06

php面向对象的魔术方法详解

09-07

java语言面向对象的4大特征

01-19

java中finally关键字

09-27

全文阅读已结束,如果需要下载本文请点击

下载此文档
a.付费复制
付费获得该文章复制权限
特价:5.99元 10元
微信扫码支付
已付款请点这里
b.包月复制
付费后30天内不限量复制
特价:9.99元 10元
微信扫码支付
已付款请点这里 联系客服