本文目录一览:
- 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();
}