-
210419_1~2call_by_value,생성자JAVA(Sol)(정리대기중..언젠가) 2021. 4. 19. 10:14
함수 호출
함수는 호출해서 실행한다. 즉 호출하지않으면 실행되지 않는다.
호출 ==> 메서드명(호출인자)
주의 1. 호출인자와 수신인자는 데이타형이 같아야한다
2. 반환형과 반환값은 데이타형이 같아야한다
3. 리턴값이 없는 함수는 반환형이 void이다
4. return을 만나면 함수는 종료되고 return 뒤에는 값을 호출한 곳으로 되돌려준다
-----------------------------------정의 영역
public int add(int a, b){
int c;
c = a+b;
return c;
}
-----------------------------------호출 영역
int a = 100 ;
int b = 200;
int c ;
c = add (a,b) ; // call by value : 인자가 기본형 변수일때
출력 ==> c ;
클래스 멤버 메서드와 call by value
call by value : 호출한다 값으로, 즉 메서드를 호출할때 인자가 기본형 데이타인 경우
위의 코드를 살펴보면,
특징, 수신인자의 값을 바꾸어도 호출인자의 값에 영향이 없다.
이유 , 함수영역과 호출영역은 영역이 다르기때문에 변수들 간에 영향이 없다.
호출 즉, 스택복사로만 값을 전달할수 있다.
package chapter8; public class MethodTest2 { String name = ""; int kuk = 0; int eng = 0; int tot = 0; float avg = 0.0f; public void calcTot() { //메소드정의영역//누구든지접근할수있고,반환형이없는 tot = kuk + eng; } public void calcAvg() { avg = tot / 2.0f; // } public static void main(String[] args) { MethodTest2 mt = new MethodTest2(); // MethomdTest2의 속성을갖는 mt라는인스턴스를 만든다 mt.kuk = 100; //호출영역 mt.eng = 90; mt.calcTot(); mt.calcAvg(); // System.out.println("국어 : " + mt.kuk); System.out.println("영어 : " + mt.eng); System.out.println("총점 : " + mt.tot); System.out.println("평균 : " + mt.avg); } }
생성자 constructor
1.반환형이 없고 클래스 이름과 동일한 메서드를 생성자라고 말한다.
2.역할. new와 함께사용되며 객체 영역(heap)을 할당하는데 사용된다.
heap -- 비교적 보관기간이 길다.*비교 -- stack영역은 블럭(실행)이 끝나면 바로 메모리를 반환하다.3.역할. 인자(지역)를 받아서 멤버변수(전역변수)를 초기화 하는 역할을 한다.
class Abc {
static int age = 100; // 클래스변수(모든 외부클래스에서 참조가능)
int a; int b; double c; byte e; // 멤버변수(전역변수,클래스내의 모든 메서드에서 참조)
public void kkk( ) {int a; int b; //지역변수 와 전역변수의 이름이같으면 this.a 전역변수a를 가리킨다}
public void kaa ) { }
public Abc( ) { }
}
Abc abc =new Abc();
abc <===this다
this : 해당 클래스가 인스턴스화 되었을때 그 객체를 가리키는 키워드
즉, this.a 전역변수로서의 의미도 있고, 객체를 만들고 난 후의 a를 말하는 것이다.
전역변수 : 메서드 밖 클래스 안에 선언된 변수를 말하고, 클래스 내부의 모든 메서드에서 참조 가능하다.
지역변수: 메서드 안에서 선언된 변수를 말한다. 메서드 안에서만 사용할 수있다.
package chapter8; public class MethodTest3 { int kuk = 0; int eng = 0; int tot = 0; float avg = 0.0f; public MethodTest3(int kuk, int eng) { // 생성자의 역할,반환형이없고 클래스이름과동일한것 this.kuk = kuk; // 매개변수(지역변수) this를붙여 전역변수this를표시 this.eng = eng; } public void calcTot() { tot = kuk + eng; } public void calcAvg() { avg = tot / 2.0f; } public static void main(String[] args) { MethodTest3 mt = new MethodTest3(100, 90); // 생성자안에서 인스턴스를만들면서 초기화 mt.calcTot(); mt.calcAvg(); System.out.println("국어 :" + mt.kuk); System.out.println("영어 :" + mt.eng); System.out.println("총점 :" + mt.tot); System.out.println("평균 :" + mt.avg); } }package chapter8; public class MethodTest4 { int kuk = 0; int eng = 0; int tot = 0; float avg = 0; public MethodTest4(int kuk, int eng) { this.kuk = kuk; this.eng = eng; } public void calcTot() { tot = kuk + eng; } public void calcAvg() { avg = tot / 2.0f; } public void prn() { System.out.println("국어 :" + kuk); System.out.println("영어 :" + eng); System.out.println("총점 :" + tot); System.out.println("평균 :" + avg); } public static void main(String[] args) { // TODO Auto-generated method stub //처리식을 코딩하세요 : 객체화와 멤버의 호출 MethodTest4 mt = new MethodTest4(100, 90); // 인스턴스화,초기화 mt.calcTot(); mt.calcAvg(); mt.prn(); } }package chapter8; //컴포넌트 클래스, 처리클래스 public class MethodTest5 { int kuk = 0; int eng = 0; int tot = 0; float avg = 0.0f; public MethodTest5(int kuk, int eng) { //생성자, this.kuk = kuk; this.eng = eng; } public void calcTot() { tot = kuk + eng; } public void calcAvg() { avg = tot / 2.0f; } public void prn() { System.out.println("국어 :" + kuk); System.out.println("영어 :" + eng); System.out.println("총점 :" + tot); System.out.println("평균 :" + avg); } }package chapter8; public class MethodTestMain5 { //컴포넌트이용 클래스 public static void main(String[] args) { MethodTest5 mt = new MethodTest5(90, 90); mt.calcTot(); mt.calcAvg(); mt.prn(); } }'JAVA(Sol)(정리대기중..언젠가)' 카테고리의 다른 글
210419_5~6(chapter9.메모리운영,객체구별,기본생성자) (0) 2021.04.19 210419_3~4(getter,setter) (0) 2021.04.19 210416_7(method만들기) (0) 2021.04.16 210416_6(클래스class) (0) 2021.04.16 210416_5(클래스class) (0) 2021.04.16