StaticMember
public class StaticMember {
public static void main(String[] args) {
// 객체 생성 후 객체의 멤버를 사용
StaticClass sc1 = new StaticClass();
sc1.getInfo();
System.out.println("나이 : " + sc1.age);
System.out.println("이름 : " + sc1.name);
// StaticClass.name = "유인나" <<--- 바로 접근 불가능!, 이것을 가능하게 해주는 것이 static.
StaticClass.job = "가수"; // <--- 이건 되는 이유?(static)
System.out.println("static 직업 : " + StaticClass.job);
StaticClass.getJob();
}
}
StaticClass
public class StaticClass {
public String name;
public int age;
public static String job;
public StaticClass() {
this("아이유");
}
public StaticClass(String name) {
this(name, 30);
}
public StaticClass(String name, int age) {
this.name = name;
this.age = age;
}
public void setInfo() {
this.name = name;
this.age = age;
}
public static void getJob(){
System.out.println("static 직업 : " + job);
}
public void getInfo() {
System.out.println("이름 : " + this.name + "\n나이 : " + this.age);
}
}
클래스.필드;
클래스.메소드(매개값...);
[Calc 클래스 생성]
public class Calc {
public static int abs(int a) {
if (a > 0) {
return a;
}
else {
return -a;
}
}
public static int max(int a, int b) {
if (a > b) {
return a;
}
else {
return b;
}
}
public static int min(int a, int b) {
if (a > b) {
return b;
}
else {
return a;
}
}
}
[Calc 테스트]
System.out.println(Calc.abs(-5));
System.out.println(Calc.max(10, 8));
System.out.println(Calc.min(-3, -4));
// 객체를 생성해서 접근 해도 접근 자체는 가능함
Calc c = new Calc();
System.out.println(c.abs(-5));
System.out.println(c.max(10, 8));
System.out.println(c.min(10, 8));
Calc 클래스의 멤버 메서드인 abs, max, min 이 모두 정적 멤버이기 때문에 객체 생성 없이 클래스 이름으로 직접 접근이 가능함
public class calculator {
String color; // 계산기 별로 색깔이 다를 수 있다.
static double pi = 3.14159; // 계산기에서 사용하는 파이(pi)값은 동일히다.
메소드
정적 초기화 블록
static { // 정적 멤버 전용 생성자
...
}
public class Singleton {
// private 접근제한자 : private로 지정된 멤버는 해당 클래스 내에서만 사용이 가능함.
private static Singleton singleton = new Singleton();
// 생성자의 접근제한자에 private를 사용하면 객체 생성 시 new 키워드를 사용할 수 없음.
// ( = 메모리에 등록이 안됨 = 객체로 만들수 없음)
// 객체 생성이 불가능
private Singleton() { }
// 객체로 만들지못하니까 클래스타입으로 접근
public static Singleton getInstance() {
return singleton;
}
}
public class Person {
// final : 단 한번만 데이터의 저장이 가능하고 더 이상 수정이 불가능
final String nation = "대한민국";
final String ssn;
String name;
// final 변수인 ssn을 생성자를 통해서 한 번만 데이터 저장.
public Person(String ssn, String name) {
this.ssn = ssn;
this.name = name;
}
}
public class PersonEx {
public static void main(String[] args) {
// final 변수인 ssn에 생성자를 사용하여 데이터를 초기화
// 일반 멤버 변수인 name에 생성자를 사용하여 데이터를 초기화
Person p1 = new Person("123456-1234567", "홍길동");
System.out.println(p1.nation);
System.out.println(p1.name);
System.out.println(p1.ssn);
// final 키워드가 사용된 멤버 변수인 nation과 ssn은 더 이상 수정이 불가능
// p1.nation = "미국";
// p1.ssn = "987654-9876543";
// 일반 멤버 변수인 name은 언제든지 수정이 가능함
p1.name = "hong gil dong";
System.out.println(p1.name);
}
}
대문자
로 작성_
로 연결private
< default
< protected
< public
pakage com.mycompany;
public class Car {
com.hankook.Tire tire = new com.hankook.Tire();
}
어노테이션 타입 정의
public @inteface AnnptationName {
}
어노테이션 타입 적용
?
어노테이션 적용할 때 엘리먼트 이름 생략 가능
? - 예시
두 개 이상의 속성을 기술할 때에는 value=값 형태로 기술
?