Внутренний класс и вложенный статический класс в Java - это классы, объявленные внутри другого класса, известного как класс верхнего уровня в Java. В терминологии Java. Если вы объявляете вложенный класс static, он будет вызывать вложенный статический класс в Java, а нестатический вложенный класс просто называется Inner Class.
Что такое Inner Class в Java?
Любой класс, который не является верхним уровнем или объявлен внутри другого класса, известен как вложенный класс и из тех вложенных классов, класс, которые объявлены нестатические известны как класс Inner в Java. в Java есть три типа класса Inner:
1) Локальный внутренний класс - объявляется внутри кодового блока или метода. 2) Анонимный внутренний класс - это класс, который не имеет имени для ссылки и инициализируется в том же месте, где он создается. 3) Внутренний класс члена - объявлен как нестационарный член внешнего класса.
public class InnerClassTest {
public static void main(String args[]) {
//creating local inner class inside method i.e. main()
class Local {
public void name() {
System.out.println("Example of Local class in Java");
}
}
//creating instance of local inner class
Local local = new Local();
local.name(); //calling method from local inner class
//Creating anonymous inner class in Java for implementing thread
Thread anonymous = new Thread(){
@Override
public void run(){
System.out.println("Anonymous class example in java");
}
};
anonymous.start();
//example of creating instance of inner class
InnerClassTest test = new InnerClassTest();
InnerClassTest.Inner inner = test.new Inner();
inner.name(); //calling method of inner class
}
//Creating Inner class in Java
private class Inner{
public void name(){
System.out.println("Inner class example in java");
}
}
}
Что такое вложенный статический класс в Java?
Вложенный статический класс - это другой класс, который объявлен внутри класса как члена и статично. Вложенный статический класс также объявляется членом внешнего класса и может быть закрытым, открытым или защищенным, как и любой другой член. Одним из основных преимуществ вложенного статического класса над внутренним классом является то, что экземпляр вложенного статического класса не привязан к какому-либо закрывающему экземпляру класса Outer. Вам также не нужен какой-либо экземпляр класса Outer для создания экземпляра вложенного статического класса в Java .
1) Он может получить доступ к статическим членам данных внешнего класса, включая частные. 2) Статический вложенный класс не может получить доступ к нестатистическому (экземпляру) элементу данных или method .
public class NestedStaticExample {
public static void main(String args[]){
StaticNested nested = new StaticNested();
nested.name();
}
//static nested class in java
private static class StaticNested{
public void name(){
System.out.println("static nested class example in java");
}
}
}
Ссылка: Внутренний класс и вложенный Static Class в Java с примером
Я наслаждался
Несколько лет назад то, когда я должен был сделать Java (1.4.x), я хотел оценку (), метод и Солнца javac (было?) записанный в Java, таким образом, это должно было только связать tools.jar и использование это с некоторым кодом связующего звена вокруг этого.
Так как никто больше еще не сказал это (я Думаю), моей любимой функцией является Автоматическая упаковка!
public class Example
{
public static void main(String[] Args)
{
int a = 5;
Integer b = a; // Box!
System.out.println("A : " + a);
System.out.println("B : " + b);
}
}
По-видимому, с некоторыми сборками отладки существует опция, которая выводит собственный компонент (JIT) ассемблерный код от HotSpot: http://weblogs.java.net/blog/kohsuke/archive/2008/03/deep_dive_into.html
, К сожалению, я не смог найти сборку по ссылке в том сообщении, если кто-либо может найти более точный URL, я хотел бы играть с ним.
Методы доступа к свойствам Java Bean не должны начинаться с «get» и «set».
Даже Джош Блох ошибается в Эффективной Java.
Вы можете переключить (это) внутри определений методов классов перечисления. Заставил меня крикнуть "а!" громко, когда я обнаружил, что это действительно работает.
Меня удивляет, что интерфейс может расширять несколько интерфейсов, но класс может расширять только один класс.
Вы можете переопределить метод и иметь его конструктор SuperClass его (это может пойти как сюрприз для программистов C ++.)
Вы можете добавить во время выполнения проверки универсальных типов с помощью объекта Class
, это удобно, когда класс создается где-то в файле конфигурации и нет возможности добавить время компиляции проверьте универсальный тип класса. Вы не хотите, чтобы класс взорвался во время выполнения, если приложение настроено неправильно, и вы не хотите, чтобы все ваши классы были пронизаны экземплярами проверок.
public interface SomeInterface {
void doSomething(Object o);
}
public abstract class RuntimeCheckingTemplate<T> {
private Class<T> clazz;
protected RuntimeChecking(Class<T> clazz) {
this.clazz = clazz;
}
public void doSomething(Object o) {
if (clazz.isInstance(o)) {
doSomethingWithGeneric(clazz.cast(o));
} else {
// log it, do something by default, throw an exception, etc.
}
}
protected abstract void doSomethingWithGeneric(T t);
}
public class ClassThatWorksWithStrings extends RuntimeCheckingTemplate<String> {
public ClassThatWorksWithStrings() {
super(String.class);
}
protected abstract void doSomethingWithGeneric(T t) {
// Do something with the generic and know that a runtime exception won't occur
// because of a wrong type
}
}
Я был удивлен, когда впервые заметил тернарный оператор, который представляет собой простой оператор if-then-else:
minVal = (a < b) ? a : b;