java inner class, anonymous inner class
Java internal classes are divided into 4 types:
1) Static internal classes: Classes modified by static are called static classes. Putting static classes inside a class is called static internal classes
Features: Can access the outside world: static methods /Static properties, cannot access instance resources
Case:
import inner.Foo.Koo;//Be sure to import the Koo static inner class
public class Demo9 {
public static void main(String[] args) {
Koo koo = new Koo();
koo.add();
}
}
class Foo{
int a = 12;//Instance variable
static int aa=16;
public static void show(){ System.out.println("static method");}
//static inner class
static class Koo{
public void add(){
// System.out .println(a); Static inner classes cannot access instance resources (variables)
System.out.println(aa);
show();//Static inner classes can access static properties and methods of the outside world
}
}
}
2) Member inner class: Inside a class, a class without static modification is directly defined. When creating a member inner class object, the outer class must be created first.
Features: member inner class, can access external properties and methods
Case:
import inner.Foo1.Koo1;
public class Demo10 {
public static void main(String[] args) {
/ /Koo1 koo1 = new Koo1(); To create a member inner class, you must first create an external class object
Foo1 foo1 = new Foo1();
//Remember (written examination)
Koo1 koo1 = foo1. new Koo1();
koo1.show();
}
}
class Foo1{
int a =12;
static int aa = 16;
class Koo1{
void show() {
System.out.println(a+" , "+aa);
}
}
}
3) Local internal classes: very rarely used, characterized by defining a class within a method (enterprise development Medium and rarely used)
Features: local inner class, when referencing external variables, the variable must be modified with final
Case:
public class Demo11 {
public static void main(String[] args) {
final int a = 12;
final int b = 13;
class Foo2{
int c = 16;
public int add(){
//In the local inner class, refer to external variables , then the variable must be modified with final
return a+b+c;
}
}
Foo2 foo2 = new Foo2();
System.out.println(foo2.add());
}
}
4) Anonymous inner class: an inheritance of the original class
Features: used in combination with interfaces/abstract classes
eg new class name/interface name {
overridden method
};
Case:
public class Demo1 {
public static void main(String[] args) {
Koo koo = new Koo(){
// You can override the method
public String toString() {
Return "A Koo object is generated";
}
// New methods cannot be created in anonymous inner classes
// public void show(){
// System.out.println( "liu");
// }
};
System.out.println(koo);
// koo.show();
}
}
class Koo{
}
For more java internal classes and anonymous internal classes related articles, please pay attention to the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











Anonymous inner classes can cause memory leaks. The problem is that they hold a reference to the outer class, preventing the outer class from being garbage collected. Solutions include: 1. Use weak references. When the external class is no longer held by a strong reference, the garbage collector will immediately recycle the weak reference object; 2. Use soft references. The garbage collector will recycle the weak reference object when it needs memory during garbage collection. Only then the soft reference object is recycled. In actual combat, such as in Android applications, the memory leak problem caused by anonymous inner classes can be solved by using weak references, so that the anonymous inner class can be recycled when the listener is not needed.

Anonymous inner classes are special inner classes in Java that have no explicit name and are created through the new expression. They are mainly used to implement specific interfaces or extend abstract classes and are used immediately after creation. Common anonymous inner class design patterns include: Adapter pattern: converts one interface into another interface. Strategy Pattern: Defining and Replacement Algorithms. Observer pattern: Register observers and handle events. It is very useful in practical applications, such as sorting a TreeSet by string length, creating anonymous threads, etc.

Anonymous inner classes are not suitable for use when: need to access private members, need multiple instances, need inheritance, need to access generic types

Anonymous inner classes are used in Java as special inner classes that facilitate subclassing, simplifying code, and handling events (such as button clicks). Practical cases include: Event handling: Use anonymous inner classes to add click event listeners for buttons. Data transformation: Sort collections using Collections.sort method and anonymous inner class as comparator.

Anonymous inner class usage error: Accessing an out-of-scope variable using catching an undeclared exception in a non-thread-safe environment

The performance problem of anonymous inner classes is that they are recreated every time they are used, which can be optimized through the following strategies: 1. Store anonymous inner classes in local variables; 2. Use non-static inner classes; 3. Use lambda expressions. Practical tests show that lambda expression optimization has the best effect.

The limitations of anonymous inner classes include: inability to access external local variables; inability to directly access external this reference; inability to throw checked exceptions; code redundancy; inability to serialize.

The lifetime of an anonymous inner class is determined by its scope: Method-local inner class: Valid only within the scope of the method that created it. Constructor inner class: bound to the outer class instance and released when the outer class instance is released. Static inner classes: loaded and unloaded at the same time as external classes.
