전위형: 값이 참조되기 전에 연산 수행
후위형: 값이 참조된 후에 연산 수행
//예제3-2/ch3/OperatorEx2.java
package Chapter03;
public class OperatorEx2 {
public static void main(String[] args) {
int i = 5, j = 0;
j = i++; //후위 : 값이 참조된 후에 증가시킨다. 쉽게 말하자면 i의 값 5를 j에 넣고 i를 1증가시킨다. 그러면 j는 5, i는 6이다.
System.out.println("j = i++; 실행 후, i =" + i +", j = " + j);
i = 5; // 결과를 비교하기 위해, i와 j의 값을 다시 5와 0으로 변경
j = 0;
j = ++i; // 전위 : 값이 참조되기 전에 증가시킨다. 쉽게 말하자면 i의 값 5를 j에 넣기전에 1증가시키고 넣는다. 그러면 j는 6, i는 6이다.
System.out.println("j = ++i; 실행 후, i =" + i +", j = " + j);
}
} //실행결과 :
//j = i++; 실행 후, i =6, j = 5
//j = ++i; 실행 후, i =6, j = 6
break문은 근접한 단 하나의 반복문만 벗어날 수 있기 때문에, 여러 개의 반복문이 중첩된 경우에는 break문으로 중첩 반복문을 완전히벗어날 수 없다. 이때는 중첩 반복문 앞에 이름을 붙이고. break문과 continue문에 이름을 지정해 줌으로써 하나 이상의 반복문을 벗어나거나 반복을 건너뛸 수 있다.
class Variables
{
int iv; //인스턴스변수 --> 클래스영역
static int cv; //클래스변수(static변수, 공유변수) --> 클래스영역
void method()
{ // --> 메서드영역
int lv = 0; //지역변수 -->메서드영역
}
}
클래스변수: 클래스가 메모리에 올라갈 때, 자동생성, 객체생성필요x, 아무때나사용가능,
인스턴스변수: 인스턴스가 생성되었을 때 객체를 생성해야 사용가능, 객체생성필요
지역변수:
다형성은 프로그램 언어 각 요소들(상수, 변수, 식, 객체, 메소드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질 입니다.
다형성은 오버라이딩이나 오버로딩으로 구현할 수 있죠
Person p = new Female();
parent p = new Child()의해석
- child에 대한 메모리공간을 할당받음
- 근데 변수의 타입은 parent임
변수의 타입과 메모리공간을 할당받는 타입이 다름
각각의 역할이 뭘까요..? 그걸 잘 모르니까 다음과 같은것들이 왜 그런 결과가 나오는지 정확히 설명을 못해요
- parent p = new Child()는 되고
child c = new Parent();는 안되잖아요- Parent p = new Child(); 이것과 Child c = new Child();는 같은 인스턴스를 참조하고 있지만 사용할 수 있는 멤버의 개수에는 차이가 있구요
- parent p = new Child(), Child c = new Parent();
에서 멤버변수의 참조는 다른 값을 가리켜요
p.x는 부모클래스에 선언된 멤버변수가 사용되고 c.x는 자식클래스에 선언된 멤버변수가 사용돼요
추상 메서드 : 추상 메서드를 가진 일반 클래스
인터페이스 : 추상 메서드 빼고 구현된 것이 아무것도 없다.
인터페이스는 결합도를 낮춰줍니다.
공통된 메서드명으로 구현만 다른 female이나 male class가 있다고 가정해요
이 둘을 멤버변수로 갖는 또다른 클래스가 있어요. 근데 만약 인터페이스가 없다면
female,male에 대한 멤버변수를 둘다 가지고 있어야해요(공통속성을 가진 모든 클래스에 대한 멤버변수를 가지고 있어야함)
female, male둘중 무엇을 선택할지 모르니 둘다 가지고 있어야하는거죠
근데 만약에 인터페이스를 사용하면 해당클래스에 타입 하나만 정의해도 간결하게 쓸 수 있어요
해당클래스(female이나 male을 멤버변수로 갖는클래스)를 생성할시점에 male이나 female을 넘겨주면, 즉
그 부분만 변경해주면 female과 male을 쉽게 변경할 수 있는거죠
class Outer{
class InstanceInnerCalss{}
static class StaticInnerClass{}
void myMethod(){
class LocalInnerClass{}
}
}
https://doublesprogramming.tistory.com/158