package static_test;
class Student{
//정적멤버는 이탤릭체로 표현됨,
//static : 고정된 위치에 저장된 공유자원이라고도 함. 필드랑 메서드만 사용 가능
//한군데서 변경하면 모든클래스에서 정보가 변경됨.변경된 정보가 공유된다.
static String school;
String name;
int age;
String grade;
/* static메소드에서는 인스턴스멤버는 사용할 수 없다. 매개변수로 넘겨받은 값으로만 사용.
* -> 인스턴스 멤버 필요 없을때는 static메소드 만들어서 사용하는게 좋다.
//인스턴스 멤버 필요할때는 인스턴스 메서드 호출하기.
static void sendAge() {
System.out.println(this.name+"학생은 "+this.age+"나이입니다.");
}
*/
}
public class StaticTest {
public static void main(String[] args) {
Student stu1 = new Student();
stu1.age = 30;
stu1.grade = "A";
stu1.name = "최기근";
//static 사용시 (정적멤버 사용시) : 클래스이름.멤버이름
Student.school = "부산IT아카데미";
System.out.println(stu1.name);
System.out.println(stu1.school);
stu1.school = "부산직업전문학교";
Student stu2 = new Student();
stu2.name = "홍길동";
System.out.println(stu2.name);
System.out.println(stu2.school);
Student stu3 = new Student();
stu3.name = "김판길";
stu1.school = "부산사상교도소";
System.out.println(stu1.school);
System.out.println(stu2.school);
System.out.println(stu3.school);
System.out.println(stu2.school==stu1.school);
}
}
package final_test;
public class Car {
final : read only, 한 번 값이 부여되면 수정이 안됨.
static String company;
// KIA 가 KIN로 바껴도 회사는 같다.
final String model; // 차량의 모델 //final은 값 수정불가, 필드선언시 초기화 또는 생성자에서 초기화시켜주면 됨
final int maxSpeed; //최대 속도
int speed;
상수(값을 변경할 수 없고 어디서든 동일한 값을 쓸 수 있다)
상수는 대문자로 스네이크표기법 사용.(빅스네이크표기법) : 클래스이름으로 접근이 가능하고 값을 변경할 수 없는 상수구나~ 라고 알 수 있다.(클래스.빅스네이크표기법)으로 사용한다.
static final int MIN_SPEED = 0;
Car(){
this.model = "K3";
this.maxSpeed = 300;
}
//객체생성시 final객체 값 받아서 초기화 하는 방법도 있다.
Car(String model,int maxSpeed){
this.model = model;
this.maxSpeed = maxSpeed;
}
//정적멤버 안에서는 정적멤버를 쓸 수 있다. 인스턴스멤버는 바로 사용할 수 없다.
public static void main(String[] args) {
// speed = 10; 오류
System.out.println(MIN_SPEED );
System.out.println(Car.MIN_SPEED);
System.out.println(Math.PI);
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
}
}
package a1;
public class A {
B b = new B();
}
package a1;
//default 접근 제한자
//같은 패키지 내부에서 접근 가능
class B {
A a = new A();
}
package a2;
public class C {
a1.A a = new a1.A();
// a1.B b = new a1.B(); -> 접근 제한자가 dafault이기때문에 pkg벗어나면 안보임
}
package a3;
public class A {
//클래스 내부에서는 생성자 모두 사용 가능
A a = new A(); //public
A a1 = new A(10); //default
A a2 = new A("이기적인 놈"); //private
public A() {
System.out.println("public 생성자");
}
A(int a){
System.out.println("default "+a);
}
private A(String s) {
System.out.println("private"+s);
}
}
package a3;
public class B {
A a = new A(); //public
A a1 = new A(10); //default
// A a2 = new A("안된다"); //private 안됨
}
package a4;
import a3.A;
public class B {
A a = new A(); //public
// A a1 = new A(10); //default 안됨
// A a2 = new A("안된다"); //private 안됨
}
package a5;
public class A {
public int field1;
int field2;
private int field3;
//클래스 내부에서는 모든 접근제한자 사용가능
public A(){
field1 = 100;
field2 = 200;
field3 = 300;
methodA();
methodB();
methodC();
}
public int methodA() {
return field3;
}
int methodB() {
return field2;
}
private int methodC() {
return field1;
}
}
package a5;
public class B {
public B() {
A a = new A();
a.field1 = 100; //public
a.field2 = 2000; //default
// a.field3 = 300; // private
a.methodA(); //public
a.methodB(); //default
// a.methodC(); // private
}
}
package a6;
import a5.A;
public class C {
public C() {
A a = new A();
a.field1 = 100; //public
// a.field2 = 2000; //default
// a.field3 = 300; // private
a.methodA(); //public
// a.methodB(); //default
// a.methodC(); // private
}
}
클래스의 접근제한자는 public , default 가능
생성자,필드,메소드는 public,protected,default,private 다 가능
'Java' 카테고리의 다른 글
캡슐화 숙제 (0) | 2023.04.28 |
---|---|
04.28 캡슐화 , 싱글톤, 상속 , 오버라이드 , 다형성 (0) | 2023.04.28 |
0427 실습 해설 (0) | 2023.04.27 |
04.26 평가 틀린거 (0) | 2023.04.27 |
04.25 클래스, 객체배열 (0) | 2023.04.25 |