메서드 내부 스택공간은 메서드 내부가 서로 다른 스택임
pulbic class Coin02{
int k = 10;
int n = 20;
static void printRestMoney(){
System.out.println(n); <--- 에러발생
}
에러가 발생하는 이유는
static이 로드될 때가 n이 로드되는 시점(인스턴스 생성)이후
보다 이전 시점이기 때문이다.
-->static 안에는 heap변수를 넣을 수 없다.
pulbic class Coin02{
int k = 10;
int n = 20;
void printRestMoney(){
System.out.println(n); <--- 에러가 발생하지 않음
}
에러가 발생하지 않는 이유는 printRestMoney()메서드가
사용될 때는 new연산자를 통해 인스턴스 생성이 완료된 이후이기 때문 에 시점을 생각해서 에러를 발생시키지 않는다.
package ex03;
import javax.print.event.PrintEvent;
public class Mystar01 {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
System.out.println();
for (int i = 1; i <= 5; i++) {
for (int j = 5; j >= i; j--) {
System.out.print("*");
}
System.out.println();
}
System.out.println();
System.out.println();
for (int i = 1; i <= 5; i = i + 2) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
for (int i = 3; i >= 1; i = i - 2) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
// 2 1 0 1 2 공백문자의 개수
int rows = 5;
int middleRow = (rows + 1) / 2;
for (int i = 1; i <= rows; i++) {
int numSpaces = Math.abs(middleRow - i);
int numStars = rows - (2 * numSpaces);
for (int j = 1; j <= numSpaces; j++) {
System.out.print(" ");
}
for (int j = 1; j <= numStars; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
실행결과
package ex03;
public class MyStar01 {
public static void main(String[] args) {
System.out.println("*"); // 별 1
System.out.println("**"); // 별 2
System.out.println("***"); // 별 3
System.out.println("****"); // 별 4
System.out.println("*****"); // 별 5
}
}
package ex03;
public class MyStar01 {
public static void main(String[] args) {
// 1단계 첫줄만 찍어보기 (반복문)
for (int i = 0; i < 1; i++) {
System.out.print("*");
}
System.out.println();
// 2단계 두번째줄만 찍어보기 (반복문)
// 3단계 세번째줄만 찍어보기 (반복문)
// 4단계 네번째줄만 찍어보기 (반복문)
// 5단계 다섯번째줄만 찍어보기 (반복문)
}
}
package ex03;
public class MyStar01 {
public static void main(String[] args) {
int end = 0;
// 1단계 첫줄만 찍어보기 (반복문)
end = end + 1;
for (int i = 0; i < end; i++) {
System.out.print("*");
}
System.out.println();
// 2단계 두번째줄만 찍어보기 (반복문)
end = end + 1;
for (int i = 0; i < end; i++) {
System.out.print("*");
}
System.out.println();
// 3단계 세번째줄만 찍어보기 (반복문)
end = end + 1;
for (int i = 0; i < end; i++) {
System.out.print("*");
}
System.out.println();
// 4단계 네번째줄만 찍어보기 (반복문)
end = end + 1;
for (int i = 0; i < end; i++) {
System.out.print("*");
}
System.out.println();
// 5단계 다섯번째줄만 찍어보기 (반복문)
end = end + 1;
for (int i = 0; i < end; i++) {
System.out.print("*");
}
System.out.println();
}
}
package ex03;
public class MyStar01 {
public static void main(String[] args) {
int end = 0;
for (int k = 0; k < 5; k++) { // 행을 반복
end = end + 1;
for (int i = 0; i < end; i++) {
System.out.print("*");
}
System.out.println();
}
}
}
메서드 내부에 메서드를 정의하는 것은 허용되지 않는다.
캡슐화의 개념
package ex04;
class Cal02 {
// void 자리는 리턴할 자료형을 명시하는 곳
void add(int n1, int n2) {
System.out.println("더하기 : " + (n1 + n2));
} // 스택을 종료하고 복귀주소를 확인하고 복귀한다.
void minus(int n1, int n2) {
System.out.println("minus 호출됨");
}
void multi(int n1, int n2) {
System.out.println("multi 호출됨");
}
void divide(int n1, int n2) {
System.out.println("divide 호출됨");
}
}
public class Meth02 {
public static void main(String[] args) {
Cal02 c1 = new Cal02();
c1.add(10, 5);
Cal02 c2 = new Cal02();
c2.add(20, 30);
c2.minus(10, 20);
c2.multi(20, 30);
c2.divide(20, 30);
}
}