java調用內部類
① java怎麼在主方法中調用其他方法的局部內部類
一般來說,外部類調用內部類的方法分為以下幾種情況: 1.使用static可以聲明一個內部類, 可以直接在外部調用 // 定義外部類 class Outer { // 定義外部類的私有屬性 private static String info = "hello world"; // 使用static定義內部類為外...
② java外部類怎麼調用內部類的方法
首先,你要搞清楚靜態方法跟非靜態方法的區別:
非靜態方法是跟隨著類的生命周期的,當類實例化時,非靜態方法跟隨著實例化對象產生,實例化對象可以調用類中的非靜態方法,當實例化對象結束時,非靜態方法也跟著結束。就是說,非靜態方法是依附於實例化對象的,它的生命周期就是實例化對象的生命周期。
靜態方法是不受制於類的實例化對象的,即靜態方法從程序開始運行到最後釋放內存結束是一直存在的,它的生命周期就是程序的生命周期。
從以上可知,靜態方法調用非靜態方法會造成一個問題,就是生命周期的不一致,比如說:程序剛剛開始運行時,類的實例化構造函數還沒有執行,這時靜態方法是調用不了非靜態方法的;或者當實例化對象消亡之後,靜態方法也是不能夠去調用非靜態方法的。
靜態方法要想調用非靜態方法,必須要通過實例化對象去調用;當然也可以把非靜態方法變成靜態方法,這樣就不存在任何障礙了。
希望我的回答對你能夠有所幫助。
③ Java中如何調用匿名內部類
demo:
public class Father{
public abstract class InnerClass{
public abstract void sayHello();
}
}
Java8之前調用如下:
father = new Father();
innerClass = new father.InnerClass(){
public void sayHello(){}
}
Java8: innerClass = father->sayHello(){};
手機碼字,希望可以採納,還不懂再聯系566我
④ Java 靜態內部類的使用
Java語言允許在類中再定義類,這種在其它類內部定義的類就叫內部類。內部類又分為:常規內部類、局部內部類、匿名內部類和靜態嵌套類四種。
1、靜態內部類定義
靜態內部類,定義在類中,任何方法外,用static定義;靜態內部類只能訪問外部類的靜態成員。
生成(new)一個靜態內部類不需要外部類成員:這是靜態內部類和成員內部類的區別。靜態內部類的對象可以直接生成:Outer.Inner in=new Outer.Inner();而不需要通過生成外部類對象來生成。這樣實際上使靜態內部類成為了一個頂級類。可以定義私有靜態內部類。
2、java實現靜態內部類注意事項
將某個內部類定義為靜態類,跟將其他類定義為靜態類的方法基本相同,引用規則也基本一致。不過其細節方面仍然有很大的不同。具體來說,主要有如下幾個地方要引起注意。
1)一般情況下,如果一個內部類不是被定義成靜態內部類,那麼在定義成員變數或者成員方法的時候,是不能夠被定義成靜態成員變數與靜態成員方法的。也就是說,在非靜態內部類中不可以聲明靜態成員
2)一般非靜態外部類可以隨意訪問其外部類的成員變數以及方法(包括聲明為private的方法),但是如果一個內部類被聲明為static,則其在訪問包括自身的外部類會有諸多的限制。靜態內部類不能訪問其外部類的非靜態成員變數和方法
3)在一個類中創建非靜態成員內部類的時候,有一個強制性的規定,即內部類的實例一定要綁定在外部類的實例中。然後要在一個外部類中定義一個靜態的內部類,不需要利用關鍵字new來創建內部類的實例。即在創建靜態類內部對象時,不需要其外部類的對象
3、靜態內部類示例
java在實現LinkedList時使用了如下內部類:
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
........
private static class Entry<E> {
E element;
Entry<E> next;
Entry<E> previous;
Entry(E element, Entry<E> next, Entry<E> previous) {
this.element = element;
this.next = next;
this.previous = previous;
}
}
private Entry<E> addBefore(E e, Entry<E> entry) {
Entry<E> newEntry = new Entry<E>(e, entry, entry.previous);
newEntry.previous.next = newEntry;
newEntry.next.previous = newEntry;
size++;
modCount++;
return newEntry;
}
........
}
這里即靜態內部類的典型用法
⑤ java怎麼調用另一個類中的方法中的內部類中的方法
class Hello {
public static void pt(){
new A().ppt();
class A {
void ppt(){//ppt()方法不能在其他類中調用,只能在pt()方法中被調用
System.out.println("hello word");
}
}
}
}
public class Test {
public static void main(String[] args){
Hello.pt();
}
}
⑥ Java如何調用內部類的方法
在其他類中創建內部類的對象時,必須要使用外部類的實例來創建。比如類B是類A的內部類,則語句A.B=new A.B()將是錯誤的。正確的方法是先創建一個類A的對象,比如A ma=new ma();然後再用這個對象來創建內部類的實例,比如A.B mab=ma.new B();這里要注意後面的語法ma.new B()。也可以把這兩步合為一步,比如A.B mab=new A().new B();注意,這里使用了兩個new運算符,如果只有一個將是錯誤的,比如A.B mab=new A().B();是錯誤的,new A().B()語句JAVA會理解為創建一個無名的引用,然後由這個引用調用類A中的B()函數。如果需要調用的構造函數不是默認的,則可以這樣創建比如A.B mab=new A(2).new B();或者分為兩步A ma=new A(2); A.B mab=ma.new B();
而且我也怕是不是會重新建個棋盤,那就不行了!
這個你可以放心,不會創建兩個棋盤,下面舉例驗證
public class A2 extends JFrame {
public static void main(String[] args) {
A ma=new A(); //可以看到在這里並沒有創建內部類,也就是說內部類中的bbb並沒有輸出
A.A1 ma1=ma.new A1(); //調用內部類的方法,當然內部類如果有帶參數構造函數,則還應在內部類中加上參數。
ma1.f();
}}
class A{
A(){System.out.println("aaa");}
class A1{
A1(){System.out.println("bbb");}
public void f(){System.out.println("kkk");}}
}
⑦ java內部類怎麼使用
1.內部類的方法可以訪問它所在的外部類中的所有域,包括私有型別的;
2.對於同一個包中的其它類它是隱藏的;
3. 匿名的內部類可以讓我們很方便的定義事件響應(call back),這在GUI編程中很常見
interface OutInterface{ //定義一個介面 public void f(); } public class InterfaceInner { //主類 public static void main(String args[]){ OuterClass2 out=new OuterClass2(); OutInterface outinter=out.doit(); outinter.f(); } } class OuterClass2{ //定義一個內部類,並且介面OutInterface private class InnerClass implements OutInterface{ InnerClass(String s){ System.out.println(s); } public void f(){ System.out.println("訪問內部類中的f()方法"); } } public OutInterface doit(){ //方法返回介面 return new InnerClass("訪問內部類構造方法"); } }
⑧ java外部類怎樣調用內部類方法
你這裡面有兩個錯:
1、Leis內部類是非靜態類,不能在靜態方法里初始化,即第三行Leis x=new Leis();報錯,可以把Leis類改成靜態類,即
public static class Leis{
......
}
2、Leis()是Leis類的構造函數,不能在第4行x.Leis()顯示調用
一句話:靜態方法里不能訪問非靜態內部類。但你可以在外部類的一個成員方法里訪問非靜態內部類,然後你再在靜態方法里初始化外部類,通過外部類來訪問非靜態內部類。
⑨ java內部類中的調用規則
一般來說,外部類調用內部類的方法分為以下幾種情況:
1.使用static可以聲明一個內部類, 可以直接在外部調用
// 定義外部類
class Outer
{
// 定義外部類的私有屬性
private static String info = "hello world";
// 使用static定義內部類
static class Inner
{
// 定義內部類的方法
public void print()
{
// 直接訪問外部類的私有屬性
System.out.println(info);
}
}
// 定義外部類的方法
public void fun()
{
// 通過內部類的實例化對象調用方法
new Inner().print();
}
}
public class InnerClassDemo03
{
public static void main(String args[])
{
// 通過Outer.Inner創建內部類的實例,並調用它的print方法
new Outer.Inner().print() ;
}
}
2.不使用statc聲明一個內部類 ,使外部調用
//定義外部類
class Outer
{
//定義外部類的私有屬性
private String info = "hello world";
//定義內部類
class Inner
{
//定義內部類的方法
public void print()
{
//直接訪問外部類的私有屬性
System.out.println(info);
}
};
//定義外部類的方法
public void fun()
{
//通過內部類的實例化對象調用方法
new Inner().print();
}
};
public class InnerClassDemo04
{
public static void main(String args[])
{
//外部類實例化對象
Outer out = new Outer();
//實例化內部類對象
Outer.Inner in = out.new Inner();
//調用內部類的方法
in.print();
}
}
3.在方法中定義內部類 ,使外部調用
//定義外部類
class Outer
{
//定義外部類的私有屬性
private String info = "hello world";
//定義外部類的方法
public void fun(final int temp)
{
//在方法中定義的內部類
class Inner
{
//定義內部類的方法
public void print()
{
//直接訪問外部類的私有屬性
System.out.println("類中的屬性:" + info);
System.out.println("方法中的參數:" + temp);
}
}
//通過內部類的實例化對象調用方法
new Inner().print();
}
}
public class InnerClassDemo05
{
public static void main(String args[]){
//調用外部類的方法
new Outer().fun(30);
}
}
⑩ Java在外界如何調用局部內部類
內部類和成員變數一樣,通過外部類的實例調用內部類。
可以先創建外部類實例。
用外部類實例調用內部類構造方法創建內部類實例。
再用這個內部類實例調用內部類成員方法。
Aa=newA();
A.Bb=a.newB();
b.do1();//do是關鍵字,所以這里在do後面加了個1,否則無法編譯。