1. 程式人生 > >java中類的定義位置與分類

java中類的定義位置與分類

在java中,類最常見的定義位置是檔案中,一個檔案中可以定義多個類,但是隻能有一個public的類,而且java檔名必須和這個public類相同。看看下面程式碼

package com.senmu.pack_a
//TestA.java
public class TestA{}
class TestB{}
class TestC{}

這裡有一個TestA.java的原始檔,裡面定義了三個class。可以看出一個原始檔裡能定義多個class,但是有且只能有一個public類,非public類的名字只要符合java識別符號規則就可以,public類的名字必須和原始檔名一致。至於為什麼有這個規定,很多網上的帖子都說是為了方便JVM根據檔名找到main函式入口,個人覺得這種說法不太可信也不太合理。原因如下,JVM讀取的是編譯後的.class檔案而不是.java原始檔,而定義在一個原始檔中的多個類編譯後都生成了由各自類名命名的.class檔案。在我看來當初java的設計者這樣規定的主要目應該是為了給原始碼閱讀提供便利,試想一下如果一個原始檔中可以有多個public的class而且名字與原始檔名不一致,那麼當我們在閱讀程式碼時想要了解某個引用類的定義情況應該去哪找這個類的原始碼呢?當有了這個規定之後我們就可以根據import的包名和類名準確找到原始檔的位置。至於原始檔中的其他非public類,他們只能被本包內的類使用,使用範圍有限,命名也就沒有嚴格要求了。

類除了可以定義在檔案中還可以定義在其他類中。定義在其他類中的類成為內部類,內部類又可以分成成員內部類和內嵌內部類,其區別在於是否被static修飾符修飾。成員內部類可以訪問外部類的所有成員屬性和方法,內嵌內部類和普通類沒有什麼區別只是加了外部類命名限定而已。如下面程式碼。

package com.senmu.pack_a
//TestA.java
public class TestA{
    private int f1;
    private int f2;

    public TestA(int f1,int f2){
        this.f1 = f1;
        this
.f2 = f2; } public int cal{ return new TestAInner1().cal();//在外部類中可以像普通類一樣使用 } public class TestAInner1{ public int cal(){ return f1+f2;//成員內部類可以直接訪問外部類的所有公有及私有屬性。 } } public static class TestInner2{ public int cal(){ //return f1+f2 編譯錯誤,因為內嵌內部類不能訪問外部類的成員屬性。
return 0; } } }
package com.senmu.pack_b
import com.senmu.pack_a.TestA;
//TestB.java
public class TestB{
    private TestA.TestAInner ti = new TestA.TestAInner();//TestA.TestInner是內嵌內部類,可以和普通類一樣使用
    public void test(){
        TestA ta = new TestA();
        ta.new TestInner1().cal();//在其他類中使用TestA的成員內部類。

    }
}

最後,java中的類還可以定義在方法中,定義在方法中的類只能在方法中使用,可以看到所有對方法可見的變數。

package com.senmu.pack_a
//TestA.java
public class TestA{
    private int f1;
    private int f2;

    public TestA(int f1,int f2){
        this.f1 = f1;
        this.f2 = f2;
    }
    public int cal(int a){
        class MethodInner{
            public int test(){
                return a + f1 +f2;//方法中內部類可以訪問對方法可見所以變數
            }
        }
        return new MethodInner().test();//方法中的內部類只能在本方法中使用。
}

相關推薦

java定義位置分類

在java中,類最常見的定義位置是檔案中,一個檔案中可以定義多個類,但是隻能有一個public的類,而且java檔名必須和這個public類相同。看看下面程式碼 package com.senmu.pack_a //TestA.java public cl

JAVA、例項Class物件

類       類是面向物件程式語言的一個重要概念,它是對一項事物的抽象概括,可以包含該事物的一些屬性定義,以及操作屬性的方法。面向物件程式設計中,我們都是以類來編碼。   例項 簡單理解,就是new,就是對類的例項化,建立這個類對應

Java的比較排序方法(應用Comparable介面Comparator介面)

引言 在平時寫Java的程式的時候,如果要進行一些基本型別的變數的比較,可以很方便得呼叫’Math.max()’、Math.min()等方法,如果要對陣列或者列表進行排序,也可以用Arrays.sort()和Collections.sort()等已經封裝好的方法來進行。但是,如果是一個自

【Class】Java、例項Class物件

文章轉載自http://www.cnblogs.com/flyme/p/4571030.html 類       類是面向物件程式語言的一個重要概念,它是對一項事物的抽象概括,可以包含該事物的一些屬性定義,以及操作屬性的方法。面向物件程式設計中,我們都是以類來編碼。

java定義物件的建立

1.類的定義: 修飾符   class  類名  {      成員變數;      成員方法; } 通常類名的用英文表示,並且首字母大寫。 類的修飾符分為可訪問控制符和非訪問控制符。 可訪問控制符是:公共類修飾符public 非訪問控制符有:抽象類修飾符abstract;

201671010145 2016-2017-3《Java程序設計》Java對象的區別

import -c indent cin ria wid let isp ans 1.什麽是類呢? 書面語句:類是一種事物,或者一類相同物體的抽象.類是對一個或者幾個相似對象的描述,它把不同對象具有的共性抽象出來.也可以說類是同一類對象的原型. 例如:人就是一個類,因為它是

接口(三)java的接口嵌套接口

strong span class .... 定義 成員 抽象 數列 多個 一、接口 1. 接口簡介 接口: 是java的一種抽象類型,是抽象方法的集合。接口比抽象類更加抽象的抽象類型。 接口語法: [修飾符] [abstract] interface 接口名 [exten

第6篇 Java的接口抽象

集合 conn event int str ckey 實現類 bst div 接口 Interface 在JAVA編程語言中是一個抽象類型,是抽象方法的集合。接口通常以interface來聲明。一個類通過實現接口(implements)的方式,從而實現接口的抽象方法。 接

Java基本資料型別包裝,字串轉換

儲存範圍大小: byte-short-char-int-long-float-double 低階到高階自動型別轉換: int i = 5; float f = i; double d = i; 高階到低階強制型別轉換: int a = 20; byte b = (byte) a;

java方法物件方法區別

public class Test { /** * 下面這個方法就是靜態方法,應該就是樓主所說的類方法~~ * 靜態方法必須定義成static的,在類Test被例項化以前就已經存在於記憶體中 * 靜態方法使所有該類的例項也就是物件共有的方法 */ public static void f1() {

詳談Java

Java作為一種面嚮物件語言。支援以下基本概念: 多型 繼承 封裝 抽象 類 物件 例項 方法 過載 本節我們重點研究物件和類的概念: 物件:物件是類的一個例項(物件不是找個女朋友),有狀態和行為。 例如:一條狗是一個物件,它的狀態有:顏色、名字、品種;行為:搖

Java的基礎語法定義

Java中的基礎語法 首先Java是一個完全的面嚮物件語言。這一點決定了Java程式是由一系列的物件組成的,這些物件通過呼叫彼此的方法來完成程式的執行。 接下來理解一下Java中的幾個概念: 類:類是一個模板,在類中定義了一種物件的行為(方法、函式)和狀態(

java 方法物件方法

public class Test { /** * 下面這個方法就是靜態方法,應該就是樓主所說的類方法~~ * 靜態方法必須定義成static的,在類Test被例項化以前就已經存在於記憶體中 * 靜態方法使所有該類的例項也就是物件共有的方法 */ public s

Java物件的關係區別

什麼是類?類就是具備某些共同特徵的實體的集合,它是一種抽象的資料型別,它是對所具有相同特徵實體的抽象。在面向物件的程式設計語言中,類是對一類“事物”的屬性與行為的抽象。什麼是物件?物件就是一個真實世界中的實體,物件與實體是一一對應關係的,意思就是現實世界的每一個實體都是一個物

Java之間的關係以及自己的理解

網上關於此類的討論非常多,發現對於該問題的理解各有各的說法,而各個說法中又相去甚遠。通過瀏覽這些討論以及對《O'Reilly - UML 2.0 In A Nutshell (2007)》的參考,發表一下自己的看法 類間關係有很多種,在大的類別上可以分為兩種:縱向關係、橫向

java屬性物件屬性

1,定義    類屬性:又叫做靜態屬性,即被static修飾。    物件屬性:又叫例項屬性,非靜態屬性。    如果一個屬性宣告成類屬性,那麼所以的物件,都共享這麼一個值。    給所以英雄設定一個類屬性叫做“版權(copyright)”,那麼無論有多少具體的英雄,所以的英

Java定義物件使用Collections工具的Sort方法

Collections工具類中的sort方法有兩種形式: (1) sort(List<T> list) (2) sort(List<T> list, Comparator<? super T> c) 第一種方法中List型別的物件必須實現Comparable介面,此外,

java的構造方法預設構造方法的關係

先看程式碼1: class Demo_11 {public static void main(String[] args) {A a= new A();a.print();} } class A{String s;public void print(){System.out

java之間的關係

 在java程式中,將具有相同屬性、方法的事物抽象為一個類。比如人都有姓名、家庭住址、年齡、膚色等等屬性,而同時又有行、走、坐、臥等最基本的行為,因此可將這些屬性、方法抽象為一個類即Human類。示例程式碼如下: public class Human{

java定義使用{0}佔位符功能之MessageFormat

MessageFormat提供一種語言無關的方式來組裝訊息,它允許你在執行時刻用指定的引數來替換掉訊息字串中的一部分。你可以為MessageFormat定義一個模式,在其中你可以用佔位符來表示變化的部分,例如在下面的測試類中: package cn.lz.life.uti