이름이 없는 Java 메서드 호출
아래 코드를 보고 있는데 좀 이상한 점을 발견했습니다.
public class Sequence {
Sequence() {
System.out.print("c ");
}
{
System.out.print("y ");
}
public static void main(String[] args) {
new Sequence().go();
}
void go() {
System.out.print("g ");
}
static {
System.out.print("x ");
}
}
컴파일 오류가 발생할 것으로 예상했습니다.System.out
"y "는 메서드 선언에 속하지 않습니다.{ }
이게 왜 유효하죠?나는 이 코드를 어떻게 불러야 할지 모르겠다.
이 기능을 실행하면x y c g
또, 왜, 왜,static { }
시퀀스 컨스트럭터보다 먼저 호출을 받을 수 있습니까?
이것은, 다음과 같습니다.
static {
System.out.print("x ");
}
는 스태틱 초기화 블록으로 클래스가 로드되면 호출됩니다.원하는 수만큼 클래스에 포함할 수 있으며, 모양 순서대로 실행됩니다(위에서 아래로).
이것은, 다음과 같습니다.
{
System.out.print("y ");
}
는 초기화 블록으로, 코드는 클래스의 각 컨스트럭터의 선두에 카피됩니다.클래스의 컨스트럭터가 많고, 모두 처음에 공통적인 작업을 수행해야 하는 경우 코드를 한 번만 작성하여 초기화 블록에 넣으면 됩니다.
따라서 당신의 출력은 완전히 타당합니다.
아래 Stanley가 코멘트했듯이 자세한 내용은 Oracle 튜토리얼에서 이니셜라이저 블록에 대해 설명하는 섹션을 참조하십시오.
메서드가 아니라 초기화 블록입니다.
{
System.out.print("y ");
}
컨스트럭터를 호출하기 전에 실행됩니다.하는 동안에
static {
System.out.print("x ");
}
는 클래스 로더에 의해 클래스가 로드될 때 실행되는 스태틱 초기화 블록입니다.
그래서 코드를 실행하면
- 클래스는 클래스 로더에 의해 로드되므로 정적 초기화 블록이 실행됩니다.
출력: x 가 인쇄됩니다. - 초기화 블록이 실행되도록 객체가 생성되고 다음으로 컨스트럭터가 호출됩니다.
출력: y 뒤에 c가 출력됩니다. - 주 메서드가 호출되어 Go 메서드가 호출됩니다.
출력: g가 인쇄됩니다.
최종 출력: x y c g
이것은 http://blog.sanaulla.info/2008/06/30/initialization-blocks-in-java/에 도움이 될 수 있습니다.
인스턴스 초기화 블록 뒤에 스태틱 초기화 블록이 이어집니다.
{
System.out.print("y ");
}
는 클래스의 인스턴스를 만들 때 호출됩니다.
static {
System.out.print("x ");
}
클래스 로더가 클래스를 로드하면 호출됩니다.그래서 당신이 할 때
new Sequence().go();
클래스가 로드되기 때문에 실행된다.static {}
다음으로 인스턴스 초기화 블록을 실행합니다.{}
그 후 컨스트럭터의 본문을 호출하고 새로 생성된 인스턴스의 메서드를 호출합니다.출력 에르고x y c g
.
static {
System.out.print("x ");
}
정적 블록이며 클래스 로드 중에 호출됩니다.
{
System.out.print("y ");
}
초기화 블록입니까?
클래스에 여러 초기화 블록을 포함할 수 있으며, 이 경우 해당 블록이 클래스에 표시되는 순서대로 실행됩니다.
클래스에 있는 모든 초기화 블록은 생성자보다 먼저 실행됩니다.
static {
System.out.print("x ");
}
의해 입니다( 「 」 by 、 「 」( 「 ) 。static
가 먼저 실행됩니다가 먼저 실행됩니다.
{
System.out.print("y ");
}
는 클래스의 모든 오브젝트(슈퍼바이저)가 공유하는 초기화 블록입니다.다음은 그 다음입니다.
Sequence() {
System.out.print("c ");
}
는 클래스의 특정 컨스트럭터이며, 세 번째로 실행됩니다.인스턴스 초기화 블록은 생성자가 실행될 때마다 먼저 호출됩니다.그래서 "y"가 "c" 바로 앞에 오는 거야
void go() {
System.out.print("g ");
}
는 위의 컨스트럭터를 사용하여 생성된 객체와 관련된 인스턴스 메서드일 뿐입니다.이 메서드는 마지막에 나옵니다.
{
System.out.print("y ");
}
이러한 종류의 블록을 라고 부릅니다.의 인스턴스를 생성할 때마다 실행됩니다.class
컴파일 시 이 코드는 클래스의 모든 컨스트럭터로 이동됩니다.
블록의 경우: -
static {
System.out.println("x ");
}
이데올로기 때문에으로 반반 we를 사용한다.static
시)static
필드에는 여러 단계가 필요합니다.
초기화 블록으로 사용되며 정적 선언 후에 실행됩니다.다른 사용자가 Singleton 설계 패턴과 같은 방식으로 클래스의 인스턴스를 만들 수 없도록 하는 데 사용할 수 있습니다.
static {
System.out.print("x ");
}
Static blocks
클래스가 로드되고 JRE에 의해 초기화되었을 때 한 번만 실행됩니다.
★★★★★★★★★★★★★★★★★.non-static
블록은 새 인스턴스를 생성할 때마다 호출되며 생성자 직전에 호출됩니다.
1개의 .Sequence
그렇게 건설된 것은 의 이름을 따서 불려졌다.non-static
블록, 그리고 실제로 목표로 하는 방법을 선택합니다.
언급URL : https://stackoverflow.com/questions/13699075/calling-a-java-method-with-no-name
'it-source' 카테고리의 다른 글
jQuery를 사용하여 JavaScript 개체에서 선택한 항목에 옵션을 추가하는 가장 좋은 방법은 무엇입니까? (0) | 2022.11.19 |
---|---|
Vuejs가 mixin에서 속성을 읽지 않음 및 내보내기 NOT FOUND 오류입니다. (0) | 2022.11.19 |
MySQL에서 필드가 null인 경우 0을 반환합니다. (0) | 2022.11.19 |
mariadb 노드 사용여러 쿼리를 사용하는 JS 커넥터 (0) | 2022.11.01 |
MariaDB/SQL 레코드 수를 가져오는 가장 효율적인 방법 (0) | 2022.11.01 |