Blackberry 理解实例化新对象的这种方式
我刚刚开始BlackBerry的开发,我根据一些教程熟悉UI对象等,我看到/尝试了以下内容:Blackberry 理解实例化新对象的这种方式,blackberry,java-me,Blackberry,Java Me,我刚刚开始BlackBerry的开发,我根据一些教程熟悉UI对象等,我看到/尝试了以下内容: private MenuItem menuItemClose = new MenuItem(new StringProvider("Contacts"), 0, 0) { public void run() { onClose(); } }; 我以前没有见过这种实例化对象的方法(考虑新的MenuItem),有人能解释一下发生了什么吗 在方法定义中实例化对象与在“实例变量
private MenuItem menuItemClose = new MenuItem(new StringProvider("Contacts"), 0, 0) {
public void run() {
onClose();
}
};
我以前没有见过这种实例化对象的方法(考虑新的MenuItem),有人能解释一下发生了什么吗
在方法定义中实例化对象与在“实例变量部分”中实例化对象有什么区别?这将创建一个匿名内部类,该类扩展MenuItem并重写run方法。它是标准Java,与Blackberry无关。这将创建一个匿名内部类,该类扩展MenuItem并重写run方法。它是标准Java,与Blackberry无关。这被称为“匿名内部类” 匿名内部类是在另一个类中创建但未命名的类。它们通过其接口或抽象基类定义进行实例化,并在实例化过程中提供缺少的实现 在本例中,MenuItem是抽象的-它缺少run()方法。您在第2-4行提供了其run()方法的实现 查看以获取有关内部类的各种类型和用法的更多信息 至于问题的第二部分“在方法定义中实例化对象与在“实例变量部分”中实例化对象有什么区别?”——区别在于范围,以及对象何时实例化 具有初始值的非静态成员变量是在实例化包含它们的对象时创建的。初始值分配(初始化)也在此时执行 当VM的类装入器装入类时,将创建并初始化具有初始值的静态成员变量。对于渴望类加载,这将在应用程序开始时发生。对于惰性类加载,这将在应用程序第一次引用该类时发生。我相信默认情况下,大多数不属于Java运行时的类都是延迟加载的 静态和非静态成员变量都具有对象级别的作用域,其他对象可以根据其访问修饰符(公共/私有/受保护)访问它们 非静态成员变量是对象实例的一部分,因此,当该实例孤立或超出范围时,它们被标记为垃圾收集。静态成员变量只有在包含它们的类被卸载时才会被垃圾收集。仅当加载所述类的ClassLoader实例被垃圾收集时,才会发生这种情况。有关更多信息,请参阅 当作为正常方法执行的一部分执行该行时,将创建并初始化具有初始值的局部变量(在方法中定义的变量)。一旦它们超出范围(在包含它们的方法完成执行之后),它们将被标记为垃圾收集(销毁)。这称为“匿名内部类” 匿名内部类是在另一个类中创建但未命名的类。它们通过其接口或抽象基类定义进行实例化,并在实例化过程中提供缺少的实现 在本例中,MenuItem是抽象的-它缺少run()方法。您在第2-4行提供了其run()方法的实现 查看以获取有关内部类的各种类型和用法的更多信息 至于问题的第二部分“在方法定义中实例化对象与在“实例变量部分”中实例化对象有什么区别?”——区别在于范围,以及对象何时实例化 具有初始值的非静态成员变量是在实例化包含它们的对象时创建的。初始值分配(初始化)也在此时执行 当VM的类装入器装入类时,将创建并初始化具有初始值的静态成员变量。对于渴望类加载,这将在应用程序开始时发生。对于惰性类加载,这将在应用程序第一次引用该类时发生。我相信默认情况下,大多数不属于Java运行时的类都是延迟加载的 静态和非静态成员变量都具有对象级别的作用域,其他对象可以根据其访问修饰符(公共/私有/受保护)访问它们 非静态成员变量是对象实例的一部分,因此,当该实例孤立或超出范围时,它们被标记为垃圾收集。静态成员变量只有在包含它们的类被卸载时才会被垃圾收集。仅当加载所述类的ClassLoader实例被垃圾收集时,才会发生这种情况。有关更多信息,请参阅
当作为正常方法执行的一部分执行该行时,将创建并初始化具有初始值的局部变量(在方法中定义的变量)。一旦它们超出范围(在包含它们的方法完成执行之后),它们就会被标记为垃圾收集(销毁)。当您在方法调用中定义新的内部类时,它被称为“匿名内部类”。当您在初始方法调用之后不需要对对象进行引用时,匿名内部类非常有用
final Object obj = new Object(); // Standard instantiation
System.out.println(obj); // Prints java.lang.Object@5c005c
// Anonymous inner class
System.out.println(new Object() { }); // Prints Foo$1@2500250
// Anonymous inner classes work with interfaces too
new Thread(new Runnable() {
@Override
public void run() {
// Runnable is an interface
}
}).start();
这是一种非常常见的模式,在定义“一次性使用”对象时非常有用,可能会以牺牲可读性为代价。当您在方法调用中定义新的内部类时,它被称为“匿名内部类”。当您在初始方法调用之后不需要对对象进行引用时,匿名内部类非常有用
final Object obj = new Object(); // Standard instantiation
System.out.println(obj); // Prints java.lang.Object@5c005c
// Anonymous inner class
System.out.println(new Object() { }); // Prints Foo$1@2500250
// Anonymous inner classes work with interfaces too
new Thread(new Runnable() {
@Override
public void run() {
// Runnable is an interface
}
}).start();
这是一种非常常见的模式,在定义“一次性使用”对象时非常有用,可能会以牺牲为代价