本文目錄一覽:
- 1、java方法內部 能不能寫方法
- 2、Java方法內部能定義方法嗎
- 3、java 主方法怎麼調用內部類的方法
- 4、java內部類的方法內部類
- 5、Java內部類有幾種?
- 6、java內部調用內部方法的問題
java方法內部 能不能寫方法
肯定不行的,比如public void h(){ void f(){}}這樣的語句是錯誤的,只能在方法內部調用其他方法,不能在方法內部定義方法,也就是不支持內部方法。
Java方法內部能定義方法嗎
樓主您好
方法中不能直接定義方法,但可以在方法中定義類,類裡面再定義方法:
Java code?
public static void main(String[] args) {
class B {
void test() {
System.out.println(“test()”);
}
}
new B().test();
}
java 主方法怎麼調用內部類的方法
System.out.println(x);//這個是55
System.out.println(In.x);//這個是9
樓主這兩行是對的,樓上是不用兄弟認為人家這兒錯了?
1,後面那個是無法做到的那個x是方法 的局部變數,在進入方法時被推到棧里,方法結束後就出棧了。除非有方式可以跑一個在主方法中的線程監控當前棧中變數,就像是Debug一樣,我也研究好久這個,不過沒發現有。
2,
也像1一樣沒有侵入性,你可以用位元組碼框架去操作類,動態地改變方法的行為,也就是說你可以在main方法中用程序語言去改變doit(x)方法里所做的事情。
3,
再侵入點兒,你可以傳進那個doit(int)方法一個Callback, 你明白我意思?給你看個回調式:
public class HelloJava{
private interface Listener{
public void listenDoit(int x);
}
private static int x=55;
private class In{
private Listener listener;
private static final int x=9;
public In(Listener listener){this.listener=listener;}
public void doit(int x){
listener.listenDoit(x);
x=6;//這個X和上一行的應該是同一個吧?怎麼在主方法里輸出這個量?
listener.listenDoit(x);
HelloJava.this.x++;
}
}
public static void main(String[] args){
System.out.println(x);//這個是55
System.out.println(In.x);//這個是9
In in =new HelloJava().new In(new Listener(){
@Override
public void listenDoit(int x) {
System.out.println(x);
}});
in.doit(0);
System.out.println(x);//這個是55
System.out.println(In.x);//這個是10
}
}
還有許多方式可以做到,比如代理模式等等,不過都大同小異。該方法好處是不改變方法的原定義模型。如返回值從void改成int,如果doit的返回值本身就是String,要返回個其他的東西,怎麼去改變返回值完成?
另外運行一下會發現最後兩行輸出不是55
10,
而是56,
9,你就知道HelloJava.this.x++;做的是什麼了。
4,然後就是樓上朋友們都說的方式,返回值。
java內部類的方法內部類
把類放在方法內
class Outer {
public void doSomething(){
class Inner{
public void seeOuter(){
}
}
}
}
(1)、方法內部類只能在定義該內部類的方法內實例化,不可以在此方法外對其實例化。
(2)、方法內部類對象不能使用該內部類所在方法的非final局部變數。
因為方法的局部變數位於棧上,只存在於該方法的生命期內。當一個方法結束,其棧結構被刪除,局部變數成為歷史。但是該方法結束之後,在方法內創建的內部類對象可能仍然存在於堆中!例如,如果對它的引用被傳遞到其他某些代碼,並存儲在一個成員變數內。正因為不能保證局部變數的存活期和方法內部類對象的一樣長,所以內部類對象不能使用它們。
下面是完整的例子:
class Outer {
public void doSomething(){
final int a =10;
class Inner{
public void seeOuter(){
System.out.println(a);
}
}
Inner in = new Inner();
in.seeOuter();
}
public static void main(String[] args) {
Outer out = new Outer();
out.doSomething();
}
}
Java內部類有幾種?
Java中的幾種內部類:
成員內部類:作為外部類的一個成員存在,與外部類的屬性、方法並列。當某個類除了他的外部類,不會被其他類使用時應該選擇使用成員內部類。
局部內部類:局部內部類定義在外部類的某個代碼塊或方法塊中。如果只會在某個方法或塊中創建這個類的對象,就可以使用局部內部類。
匿名內部類:匿名內部類一般定義在需要傳遞介面或回調的的地方,一個匿名內部類一定是在new的後面,用其隱含實現一個介面或繼承一個類。假如只需要創建這個類的一個對象不需要知道其實際類型(不需要使用到類名),那麼就可以使用匿名內部類。
靜態內部類:和成員內部類一樣,作為外部類的一個成員存在,與外部類的屬性、方法並列,只不過在聲明類的時候加入了static關鍵字。有時候,使用內部類只是為了把一個類隱藏在另外一個類的內部,並不需要內部類引用外圍類對象。這時可以使用靜態內部類,以便取消產生對外部類的引用。
java內部調用內部方法的問題
Java內部調用內部方法主要是通過內部類實現。Java內部類分兩種,成員內部類和方法內部類。
代碼如下:
1.成員內部類
/**
* 成員內部類
*/
public class Outer {
private int outer = 1;
class Inner {
public void show() {
System.out.println(“outer =” + outer);
}
}
public static void main(String[] args) {
Outer.Inner in = new Outer().new Inner();
in.show();
}
}
2.方法內部類
/**
* 方法內部類
*
*/
public class Outer2 {
private int outer = 1;
public void showOut() {
class Inner {
public void show() {
System.out.println(“outer =” + outer);
}
}
new Inner().show();
}
public static void main(String[] args) {
Outer2 in = new Outer2();
in.showOut();
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/193188.html