Скрытые функции Java

Внутренний класс и вложенный статический класс в 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 с примером

295
задан 5 revs, 4 users 57% 23 May 2017 в 02:26
поделиться

100 ответов

Я наслаждался

  1. javadoc taglet и doclet, которые позволяют нам настроить вывод javadoc.
  2. инструменты JDK : jstat, jstack и т.д.
1
ответ дан grayger 23 November 2019 в 01:34
поделиться

Несколько лет назад то, когда я должен был сделать Java (1.4.x), я хотел оценку (), метод и Солнца javac (было?) записанный в Java, таким образом, это должно было только связать tools.jar и использование это с некоторым кодом связующего звена вокруг этого.

3
ответ дан Claes Jakobsson 23 November 2019 в 01:34
поделиться

Так как никто больше еще не сказал это (я Думаю), моей любимой функцией является Автоматическая упаковка!

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);
    }
}
3
ответ дан biojae 23 November 2019 в 01:34
поделиться

По-видимому, с некоторыми сборками отладки существует опция, которая выводит собственный компонент (JIT) ассемблерный код от HotSpot: http://weblogs.java.net/blog/kohsuke/archive/2008/03/deep_dive_into.html

, К сожалению, я не смог найти сборку по ссылке в том сообщении, если кто-либо может найти более точный URL, я хотел бы играть с ним.

4
ответ дан Joe 23 November 2019 в 01:34
поделиться

Методы доступа к свойствам Java Bean не должны начинаться с «get» и «set».

Даже Джош Блох ошибается в Эффективной Java.

0
ответ дан 23 November 2019 в 01:34
поделиться

Вы можете переключить (это) внутри определений методов классов перечисления. Заставил меня крикнуть "а!" громко, когда я обнаружил, что это действительно работает.

4
ответ дан 23 November 2019 в 01:34
поделиться

Меня удивляет, что интерфейс может расширять несколько интерфейсов, но класс может расширять только один класс.

-8
ответ дан 23 November 2019 в 01:34
поделиться
-

Вы можете переопределить метод и иметь его конструктор SuperClass его (это может пойти как сюрприз для программистов C ++.)

Пример

2
ответ дан 23 November 2019 в 01:34
поделиться

Вы можете добавить во время выполнения проверки универсальных типов с помощью объекта 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
  }
}
4
ответ дан 23 November 2019 в 01:34
поделиться

Я был удивлен, когда впервые заметил тернарный оператор, который представляет собой простой оператор if-then-else:

minVal = (a < b) ? a : b;
-3
ответ дан 23 November 2019 в 01:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: