1. 程式人生 > >區域性內部類訪問的區域性變數不必用final修飾,java8中

區域性內部類訪問的區域性變數不必用final修飾,java8中

java8中,區域性內部類訪問的區域性變數不必用final修飾,這一點和Java7是不一樣的。
下面這段程式碼在Java8中是正確的:

public class LocalInnerClassTest {

        public static void main(String[] args) {
            LocalInnerClassTest.echo("I like ...");
        }


        public static void echo(String wordYouSay) {
            class Person {
                public
void say() { System.out.println(wordYouSay); } } Person person = new Person(); person.say(); } }

然而,在Java7中,這段程式碼不能通過編譯,會報如下錯誤:

Cannot refer to a non-final variable wordYouSay inside an inner class defined in a different method
這算是Java8(編譯器)提供的一項改進吧。想想,總是要無緣無故給傳給區域性內部類的區域性變數新增一個final修飾,也確實有點兒惱人,這點兒改進多少讓人省點心(語法糖的妙處)。
轉載自:

http://blog.csdn.net/l294265421/article/details/50448339

相關推薦

區域性部類訪問區域性變數不必final修飾java8

java8中,區域性內部類訪問的區域性變數不必用final修飾,這一點和Java7是不一樣的。 下面這段程式碼在Java8中是正確的: public class LocalInnerClassTest { public static vo

Java8 區域性部類訪問區域性變數不必final修飾

Java8中,區域性內部類訪問的區域性變數不必用final修飾,這一點和Java7是不一樣的。 下面這段程式碼在Java8中是正確的: public class LocalInnerClassTes

java:面向物件-區域性部類訪問區域性變數的問題

* 區域性內部類訪問區域性變數必須用final修飾* 區域性內部類在訪問他所在方法中的區域性變數必須用final修飾,為什麼? 因為當呼叫這個方法時,區域性變數如果沒有用final修飾,他的生命週期和方

區域性部類訪問外部變數為什麼需要使用final修飾

因為生命週期的原因。方法中的區域性變數,方法結束後這個變數就要釋放掉,final保證這個變數始終指向一個物件。首先,內部類和外部類其實是處於同一個級別,內部類不會因為定義在方法中就會隨著方法的執行完畢而跟隨者被銷燬。問題就來了,如果外部類的方法中的變數不定義final,那麼

Java進階——Java 區域性部類訪問區域性變數為什麼必須加final關鍵字

Java 區域性內部類訪問區域性變數為什麼必須加final關鍵字 疑問 在Java中,區域性內部類如果呼叫了方法中的變數,那麼該變數必須申明為final型別,如果不申明,則編譯就會出錯。 這裡的內部類指的是方法內部類或匿名內部類,不包含靜態內部類和成員內部類

部類訪問區域性變數的時候為什麼變數必須加上final修飾

這裡的區域性變數就是在類方法中的變數,能訪問方法中變數的類當然也是區域性內部類了。 我們都知道,區域性變數在所處的函式執行完之後就釋放了,但是內部類物件如果還有引用指向的話它是還存在的。例如下面的程式碼: class Outer{

部類引用外部類區域性變數final修飾

為什麼內部類引用外部類的區域性變數時,此變數要用final修飾 程式碼    public void test() {        final int i = 3;        run

Java部類訪問區域性變數時的final問題

JAVA用了也快三年了,內部類訪問區域性變數的情況也沒少遇到。也一直知道要給變數加個final修飾符,不然通過不了編譯。但一直也沒深究過為什麼要加。昨天好奇的上網查了下,並翻閱了下相關的書籍(Core Java 8th),終於算是搞明白了,在這裡簡單說明下。 說先我們來

java部類訪問區域性變數為什麼要定義區域性變數final

因為方法內定義的變數是區域性變數,離開該方法,變數就失去了作用,也就會自動被消除,而內部類卻不會離開它所在方法就失去作用,它有更廣的生命週期,下面通過一個例項加以說明: 如例中所示,在外部類Outer中聲明瞭一個內部類TimerPrint,這個類中的方法引用了方法start

為什麼java部類訪問區域性變數必須宣告為final

先丟擲讓我疑惑了很久的一個問題 程式設計時,線上程中使用區域性變數時候經常編譯器會提示:區域性變數必須宣告為final package test;   publicclass ThreadTest {       publicvoid function(Stri

為什麼部類訪問區域性變數需要加final修飾

先看一段程式碼: public void myRun(final String name){ new Runnable() { public vo

“全棧2019”Java第九十八章:區域性部類訪問作用域成員詳解

難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第九十八章:區域性內部類訪問作用域成員詳解 下一章 “全棧2019”Java第九十九章:區域

Accessing Outside Variables with the Final Keyword部類訪問外部變數

Sometimes you want to access information available outside of the inner class. Consider the following example. You’ve got a screen with

對內部類引用外部方法變數final修飾的理解

  Last modified 2015-12-14; size 569 bytes  MD5 checksum d52c1f747d7b708cb19cd659e3d5d9ac  Compiled from "JavaDemo.java"class JavaDemo$1 extends JavaDemo$I

java提高篇(十)-----詳解匿名部類 ,形參為什麼要final

在java提高篇-----詳解內部類中對匿名內部類做了一個簡單的介紹,但是內部類還存在很多其他細節問題,所以就衍生出這篇部落格。在這篇部落格中你可以瞭解到匿名內部類的使用、匿名內部類要注意的事項、如何初始化匿名內部類、匿名內部類使用的形參為何要為final。 一、使用

區域性變數部類訪問時必須final修飾的問題

今天隨手寫了點東西,又遇到了這個問題,就是在當內部類想要訪問區域性變數的時候 ,Java就要求該區域性變數必須用final關鍵字進行修飾。之前寫程式的時候經常遇到這樣的問題,當時只是奔著快點結局問題的目的也沒仔細的思考它本質的原因。 但是我想Java如此的設計肯定有其目的,

區域性部類為什麼只能訪問final區域性變數對於成員變數卻可以隨便訪問

區域性內部類為什麼只能訪問final區域性變數,對於成員變數卻可以隨便訪問? http://kingquake21.iteye.com/blog/1033436 部落格分類:  Java innerclas

為什麼匿名部類區域性部類只能訪問final修飾區域性變數

匿名內部類是形如下面程式碼中的類(Inner):   匿名內部類必須繼承一個父類或實現一個介面,但最多隻能實現一個介面。 上圖中,匿名內部類的父類就是Outer類。 而區域性內部類是定義在方法中、程式碼塊中、構造器中的類。 形如下圖中的類:    

匿名部類訪問部類方法區域性變數

        匿名內部類不能訪問外部類方法中的區域性變數,除非變數被宣告為final型別   1. 這裡所說的“匿名內部類”主要是指在其外部類的成員方法內定義,同時完成例項化的類,若其訪問該成員方法中的區域性變數,區域性變數必須要被final修飾。   2. 原因是編

Java部類詳解 及 區域性部類和匿名部類只能訪問區域性final變數的原因

說起內部類這個詞,想必很多人都不陌生,但是又會覺得不熟悉。原因是平時編寫程式碼時可能用到的場景不多,用得最多的是在有事件監聽的情況下,並且即使用到也很少去總結內部類的用法。今天我們就來一探究竟。下面是本文的目錄大綱:   一.內部類基礎   二.深入理解內部類   三.內部類的使用場景和好處