class initTest{
static int a = 1; //1
int b = 2; //2
static { a = 3; } //3
{ b = 4 ;} //4
initTest(){
b = 5; //5
}
그렇다면 스태틱 메서드를 스태틱 초기화 블럭에서 호출할 수 있을까?
class SBTest{
static int A;
static {
test();
A++;
System.out.println("static block : " + A);
}
static void test() {
A++;
System.out.println("static method : " + A);
}
}
/**
* 출력은 다음과 같다
* static method : 1
* static block : 2
*/
public class StaticBlockTest {
public static void main(String[] args) {
SBTest.test();
}
}
/**
* 출력은 다음과 같다
* static method : 1
* static block : 2
* static method : 3
*/
class SBTest{
static int A ;
static {
test();
A++;
System.out.println("static block : " + A);
}
{
instanceMethod();
A++;
System.out.println("instance block : " + A);
}
static void test() {
A++;
System.out.println("static method : " + A);
}
public SBTest() {
instanceMethod();
A++;
System.out.println("contsructor : " + A);
}
private void instanceMethod() {
A++;
System.out.println("instance method : " + A);
}
}
public class StaticBlockTest {
public static void main(String[] args) {
SBTest.test();
SBTest a = new SBTest();
SBTest b = new SBTest();
/**
* 출력은 다음과 같다
* static method : 1
* static block : 2
* static method : 3
* instance method : 4
* instance block : 5
* instance method : 6
* contsructor : 7
* instance method : 8
* instance block : 9
* instance method : 10
* contsructor : 11
*/
}
}
class SuperClass{
int A;
public SuperClass() {
//super() 가 생략됨
A++;
}
}
class SubClass extends SuperClass{
public SubClass(){
//super() 가 생략됨
A--;
}
public SubClass(int num) {
//super() 가 생략됨
A += num;
}
public SubClass(int num, int num2) {
this(num);
A -= num2;
}
}
public class ConstructorTest {
public static void main(String[] args) {
SuperClass s = new SubClass(10);
System.out.println(s.A);
SuperClass s2 = new SubClass(10, 5);
System.out.println(s2.A);
/**
* 출력되는 값
* 11
* 6
*/
}
}
class SuperClass{
int A;
public SuperClass(int num) {
//super() 가 생략됨
A =+ num;
}
}
class SubClass extends SuperClass{
public SubClass(){
//super() 가 생략됨
//super() 가 존재하지 않으므로 컴파일 에러
A--;
}
public SubClass(int num, int num2) {
super(num);
A -= num2;
}
}
class Car{
int a
public Car(Car c){
this(c.a)
}
public Car(int a){
this.a = a;
}
}
//car 객체를 복제한 객체의 레퍼런스를 만듬
무야호