我不明白为什么这会编译.f()和g()在内部类中是可见的,尽管是私有的.他们是特殊的,因为他们是内部阶级?
如果A和B不是静态类,它仍然是相同的.
class NotPrivate {
private static class A {
private void f() {
new B().g();
}
}
private static class B {
private void g() {
new A().f();
}
}
}
Run Code Online (Sandbox Code Playgroud) 这两个内部类声明有什么区别?还评论优点/缺点?
案例A:类中的类.
public class Levels {
static public class Items {
public String value;
public String path;
public String getValue() {
return value;}
}
}
Run Code Online (Sandbox Code Playgroud)
和案例B:接口内的类.
public interface Levels{
public class Items {
public String value;
public String path;
public String getValue() {
return value;}
}
}
Run Code Online (Sandbox Code Playgroud)
纠正:放置getvalue方法.
进一步的信息:我能够在另一个没有实现接口AT ALL的类中实例化A和B两种情况下的Items类.
public class Z{//NOTE: NO INTERFACE IMPLEMENTED here!!!!
Levels.Items items = new Levels.Items();
}
Run Code Online (Sandbox Code Playgroud)
由于接口未实例化,因此接口内的所有元素都可以通过点符号访问,而无需实例化LEVELS接口,因为您无法实例化接口 - 有效地在可渗透静态引用的接口内定义类.
所以说B案例中的Items类不是静态的没有意义.由于情况A和B都以相同的方式实例化,我不是在寻找静态或内部或嵌套的语义.停止给我关于语义的答案.我想要编译器,运行时和行为差异/优点,或者如果没有,那么就这么说.没有更多的语义答案请!!!!! JVM或.NET VM规范的专家请求这个答案问题,而不是教科书语义学.
我已经阅读了文章http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html.在本文中,建议使用带有WeakReference的静态内部类.许多内部类用于事件侦听器.那些内部类也会导致内存泄漏吗?那些内在阶级应该是静态的吗?
关于C#中内部类的使用和结构的最佳实践是什么?
例如,如果我有一个非常大的基类和两个大的内部类,我应该将它们分成单独的(部分类)代码文件,还是将它们作为一个非常大的笨重的代码文件?
具有抽象类的公共继承内部类也是不好的做法吗?
我编写了下面的代码来测试Java中的类和对象的概念.
public class ShowBike {
private class Bicycle {
public int gear = 0;
public Bicycle(int v) {
gear = v;
}
}
public static void main() {
Bicycle bike = new Bicycle(5);
System.out.println(bike.gear);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这会在编译过程中给出以下错误?
ShowBike.java:12: non-static variable this cannot be referenced from a static context
Bicycle bike = new Bicycle(5);
^
Run Code Online (Sandbox Code Playgroud) 首先,如果这是一个重复的问题,我道歉.我找到了许多类似的,但没有一个直接解决我的问题.
为准备即将到来的考试,我正在做一篇过去的论文.它有一个提供代码段的问题.我们必须声明它是否编译,如果不编译,则写入发生第一个编译器错误的行并解释它.这是片段:
public static void main(String[] args) {
JFrame f = new JFrame("hi");
JTextField jtf = new JTextField(50);
jtf.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseMoved(MouseEvent evt) {
jtf.setText(evt.getLocationOnScreen().toString());
}
});
f.add(jtf);
f.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)
我期待它不要编译,因为jtf不是final.我通过在Eclipse中输入上面的代码测试了我的理论,它标记了预期的错误,但编译并运行得很好.只有在鼠标停留之后JTextField我才得到预期的错误:
java.lang.Error:未解决的编译问题:无法引用封闭范围中定义的非最终局部变量jtf
我做了一些搜索,发现Eclipse使用自己的Java编译器版本.所以我在Eclipse之外重新创建了文件,并通过命令行编译/运行它.它编译时没有错误或警告,当鼠标悬停在文本字段上时,显示所需的内容java.awt.Point[x=...,y=...].
我对匿名内部类的理解是他们可以访问:
final那我错过了什么?根据我的知识,这段代码不应该工作.
根据标题.我想要一个给定类的所有内部类的列表,它可以是一个名称列表或一个类型列表 - 我不感兴趣.这可能吗?我认为可能有一种方法使用反射但是却找不到反射.
非常感谢,托马斯
好的,所以我知道匿名内部类要么隐式扩展父类,要么实现接口,因此需要调用超类的构造函数.但是,我不确定如何为匿名类创建构造函数(如果这是可能的)并且没有定义构造函数我不知道如何调用super()!这是我的练习代码:
public class AnonymousConstructor {
public static void main(String[] args) {
//I'm not sure how to explicitly call one of the arg super constructors
MyBob my = new MyBob() {
//I would like to do something like this super("String"); or
//super("String", "String");
};
}
}
class MyBob extends Thread {
MyBob() {
System.out.println("No arg constructor");
}
MyBob(String a) {
System.out.println("Arg constructor");
}
MyBob(String a, String b) {
System.out.println("2 arg constructor");
}
public void run() {
System.out.println("Outer");
}
}
Run Code Online (Sandbox Code Playgroud)
我担心的是,如果你试图从一个没有no-arg构造函数的类创建一个匿名类,那么代码将在编译时失败,因为没有办法将参数传递给superconstructor.这是一个有效的问题,如果是这样,有没有办法解决这个问题?
这是一个用于理解Java中内部类的工作的训练练习.正如问题所述,x可以访问多少个不同版本(*)?
class Outer {
int x;
class Inner extends Outer {
int x;
void f(int x) {
(*)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我倾向于认为,有3个,分别为:this.x,super.x和x但有些我的同龄人似乎认为有4个.
我们哪个人很困惑?你能解释一下吗?
Java 7在下面的代码中说"不能引用封闭范围中定义的非最终局部变量消息":
public class Runner {
public static void main(String[] args) {
String message = "Hello world";
new Runnable() {
@Override
public void run() {
System.out.println(message);
}
}.run();
}
}
Run Code Online (Sandbox Code Playgroud)
Java 8没有.
怀疑这是关于向Java添加函数编程功能.
它是否同样处理代码?
inner-classes ×10
java ×7
c# ×2
java-8 ×2
.net ×1
android ×1
constructor ×1
memory-leaks ×1
nested-class ×1
oop ×1
reflection ×1
scjp ×1
static ×1
static-class ×1