java 主方法怎么调用内部类的方法
发布网友
发布时间:2022-04-25 19:43
我来回答
共5个回答
热心网友
时间:2022-06-16 20:13
一般来说,外部类调用内部类的方法分为以下几种情况:
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[])
{
// 调用外部类的fun()方法
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);
}
};
热心网友
时间:2022-06-16 20:13
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,然后就是楼上朋友们都说的方式,返回值。
热心网友
时间:2022-06-16 20:14
在Hellojava类中main方法外写
In in = new In();
因为你的内部类是私有的只针对Hellojava类私有,也就是说在Hellojava类可以实例化它。
这里弄清楚main方法虽然在Hellojava类中但是它并不属于该类。
然后在main方法中
new Hellojava().in.doit(x);
就OK了
热心网友
时间:2022-06-16 20:14
package hellojava;
public class Hellojava{
private static int x=55;
private class In{
private static final int x=9;
public void doit(int x){
x=6;
Hellojava.this.x++;
}
}
public static void main(String[] args){
System.out.println(Hellojava.x);//类的静态属性,直接用类调
In inTest=new In();
System.out.println(inTest.doit(9999));//类的普通方法,创建对象后调用,6
}
}
热心网友
时间:2022-06-16 20:15
x=6那个要在main方法里调用有两种方式,一种是把x定义在外面,但显然外面已经有一个x了,所以不可取。另一种方法是doit方法返回一个int型的数据,就是把这个x返回给调用者。main方法调用doit的时候就拿到这个6了
java 主方法怎么调用内部类的方法
1.使用static可以声明一个内部类, 可以直接在外部调用 // 定义外部类 class Outer { // 定义外部类的私有属性 private static String info = "hello world";// 使用static定义内部类为外部类 static class Inner { // 定义内部类的方法 public void print(){ // 直接访问外部类的私有属性 Syste...
Java如何调用内部类的方法
正确的方法是先创建一个类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...
Java在外界如何调用局部内部类
内部类和成员变量一样,通过外部类的实例调用内部类。可以先创建外部类实例。用外部类实例调用内部类构造方法创建内部类实例。再用这个内部类实例调用内部类成员方法。A a=new A(); A.B b=a.new B(); b.do1();//do是关键字,所以这里在do后面加了个1,否则无法编译。
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内部调用内部方法的问题
Java内部调用内部方法主要是通过内部类实现。Java内部类分两种,成员内部类和方法内部类。代码如下:1.成员内部类/** * 成员内部类 */public class Outer { private int outer = 1; class Inner { public void show() { System.out.println("outer =" + outer); } } pu...
Java如何在一个类中引用另一个类的成员变量和方法
public Student(){} public Student(String id,String name){ this.id = id;this.name = name;} } === public class Test(){ String ids;String names;public static void main(String[] args){ Test test = new Test();Student stu = new Student("001","jack");test.ids = stu.id...
java外部类怎么调用内部类的方法
首先,你要搞清楚静态方法跟非静态方法的区别:非静态方法是跟随着类的生命周期的,当类实例化时,非静态方法跟随着实例化对象产生,实例化对象可以调用类中的非静态方法,当实例化对象结束时,非静态方法也跟着结束。就是说,非静态方法是依附于实例化对象的,它的生命周期就是实例化对象的生命周期。静...
java 中 方法之间可以嵌套么 ?
在JAVA语言中,在同一个类里面,方法是不能嵌套使用的,但是可以相互调用使用。
在java中有一个方法调用了很多个方法怎么用参数控制调用其中的任何一个...
import java.util.concurrent.Callable; public class CallableUse { public static void main(String... args) { // final int num = 100770; or int num = 100770; // 使用匿名的内部类, 如果需要传递参数可能需要将变量转换成final: try { callMethod(100, new Callabl...
java内部类与匿名内部类作用分别是什么?
Java 内部类 \x0d\x0a分四种:成员内部类、局部内部类、静态内部类和匿名内部类。 \x0d\x0a1、成员内部类: 即作为外部类的一个成员存在,与外部类的属性、方法并列。\x0d\x0a注意:成员内部类中不能定义静态变量,但可以访问外部类的所有成员。\x0d\x0apublic class Outer{\x0d\x0aprivate static in...