int[] grade1 = new int[3]; // 1차원 배열
int[][] arr = new int[2][3];
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[4];
arr[2] = new int[1];
더 많은 데이터를 저장하기 위해서는 더 큰 배열을 만들고 이젠 배열의 데이터를 복사해야함
=>
1. System 클래스의 arraycopy() 메소드
2. Arrays 클래스의 copyOf() 메소드
3. Object 클래스의 clone() 메소드
4. for 문과 인덱스를 이용한 복사
Enhanced for Loop
for (타입 변수이름 : 배열이나컬렉션이름) {
배열의 길이만큼 반복적으로 실행하고자 하는 명령문;
}
int[] arr = new int[]{1, 2, 3, 4, 5};
for (int e : arr) {
System.out.print(e + " ");
}
객체의 인스턴스 변수를 값으로 초기화하는 기능 제공, 해당클래스의 이름과 같아야함.
생성자 또한 오버로딩이 가능함, 생성자는 하나이상 정의되어야 하지만, 생성자가 없다면 기본생성자를 제공해줌.
class Car {
private String modelName;
private int modelYear;
private String color;
private int maxSpeed;
private int currentSpeed;
Car(String modelName, int modelYear, String color, int maxSpeed) {
this.modelName = modelName;
this.modelYear = modelYear;
this.color = color;
this.maxSpeed = maxSpeed;
this.currentSpeed = 0;
}
public String getModel() {
return this.modelYear + "년식 " + this.modelName + " " + this.color;
}
}
public class Method02 {
public static void main(String[] args) {
Car myCar = new Car("아반떼", 2016, "흰색", 200); // 생성자의 호출
System.out.println(myCar.getModel()); // 생성자에 의해 초기화되었는지를 확인함.
}
}
자기참조변수임 => 해당 인스턴스의 주소를 나타낸다.
클래스메소드(static)에서는 this 참조변수를 사용할 수 없다.
This() 메소드 => 같은 클래스의 다른 생성자를 호출할 때 사용함.(메소드에 인수를 전달하면 일치하는 생성자 반환해줌)
class Car {
private String modelName;
private int modelYear;
private String color;
private int maxSpeed;
private int currentSpeed;
Car(String modelName, int modelYear, String color, int maxSpeed) {
this.modelName = modelName;
this.modelYear = modelYear;
this.color = color;
this.maxSpeed = maxSpeed;
this.currentSpeed = 0;
}
Car() {
this("소나타", 2012, "검정색", 160); // 다른 생성자를 호출함.
} // 기본값 초기화할 때
public String getModel() {
return this.modelYear + "년식 " + this.modelName + " " + this.color;
}
}
public class Method05 {
public static void main(String[] args) {
Car tcpCar = new Car(); System.out.println(tcpCar.getModel());
}
}
package test;
public class SameClass {
String var = "다른 패키지는 접근 불가"; // default 필드
public static void main(String[] args) {
SamePackage sp = new SamePackage();
System.out.println(sp.sameVar); // 같은 패키지는 허용
}
}
상수취급함, 클래스, 메소드에도 사용가능함.
클래스에 사용하면 해당 클래스는 다른 클래스가 상속받을 수 없게 됩니다.
메소드에 사용하면 해당 메소드는 오버라이딩(overriding)을 통한 재정의를 할 수 없게 됩니다.
상속 => private 멤버들을 제외한 모든 메소드를 상속 가능함.
선언부만 있고 구현부가 없는 메소드, 클래스
또한, 자바에서는 제어자의 특성상 몇몇 제어자는 함께 사용할 수 없습니다.
- 클래스에 final과 abstract는 함께 사용할 수 없습니다.
: final 제어자를 가지는 클래스는 다른 클래스가 상속받을 수 없게 되며, abstract 제어자를 가지는 클래스는 다른 클래스가 상속해서 오버라이딩해야만 사용할 수 있으므로, 이 두 제어자는 클래스에 함께 사용할 수 없습니다. => abstract는 상속후 구현해야함.
- 메소드에 static과 abstract는 함께 사용할 수 없습니다.
: abstract 제어자를 가지는 메소드는 선언부만 있고 구현부가 없는 메소드인데, static 제어자를 가지는 메소드는 인스턴스를 생성하지 않고도 바로 사용할 수 있어야 하므로, 이 두 제어자는 메소드에 함께 사용할 수 없습니다.
- 메소드에 private과 abstract는 함께 사용할 수 없습니다.
: abstract 제어자를 가지는 메소드는 다른 클래스가 상속하여 오버라이딩해야만 사용할 수 있는데, private 제어자를 가지는 메소드는 자식 클래스에서 접근할 수 없게 되므로, 이 두 제어자는 메소드에 함께 사용할 수 없습니다.
- 메소드에 private과 final은 함께 사용할 필요가 없습니다.
: 메소드에 사용된 final 제어자와 private 제어자는 모두 해당 메소드가 오버라이딩을 통한 재정의를 할 수 없다는 의미를 가지므로, 둘 중에 하나만 사용해도 의미가 충분히 전달될 수 있습니다.
ref) TCP School 22~36장
http://www.tcpschool.com/java/java_modifier_ectModifier
잘 읽었습니다. 좋은 정보 감사드립니다.