일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 기사
- 산업기사
- static
- transition
- MySQL
- 정보처리기사
- relative
- 정보처리 산업기사
- where
- STREAM
- Encoding
- I/O
- text-shadow
- 이미지확대
- 스마트에디터
- transform
- method
- datasourceexplorer
- call by refelrence
- ABSOLUTE
- fixed
- SQL
- Spring
- 정보처리
- codepage
- call by value
- position
- UTF-8
- box-sizing
- Today
- Total
a battle with myself
[java] call by reference/call by value 본문
java의 method 의 경우 3가지가 존재한다.
1. main method
- java 컴파일 시 JVM이 제일 먼저 읽어 메모리에 올린다.
- 해당 메소드는 JVM이 제일 먼저 인식하고 메모리에 올려지므로 어느 클래스 안에 있건 상관없이
인스턴스화되지 않은 class의 전역 변수 사용이 불가하다.
- 만약 전역 변수를 main method 안에서 사용하고자 하면 static 으로 지정 또는 class를 인스턴스화 시켜
메모리에 올려야 한다.
일반 method
- 일반적인 method
생성자 method
- class가 생성될때 생성자를 만들어주지않아도 default 생성자가 있는 것으로 JVM이 인식 한다.
- super를 가진 default 생성자는 생략이 가능하다.
- 다양한 parameter를 가진 생성자를 생성 가능하다.
생성자 method
---------------------------------------------------------------------------------------------------------------------------------
변수
call by reference(참조에 의한 호출)
method parameter / return 이 class 형태일 경우
그 값은 주소값을 호출 한다.
이 경우 parameter값이 동일한 주소 값을 가지기 때문에
넘겨준 값이든 넘어간 값이든 변경이 되면 같은 주소에 값이 변경된다.
class Car{ public void carTest(Test t){ t.value = 10; // t 클래스의 int 형 value 값을 10으로 변경 System.out.println("car의 t.value :"+t.value); } } class test{ public int value = 0; } public class MainTest{ public static void main(String[] args){ Car a = new Car(); Test t = new Test(); // 두 클래스를 인스턴스화 시킴 t.carTest(t); //<--- t 객체를 넘김 System.out.println("mainTest의 t.value :"+t.value); } }
Console
---------------------------------------
car의 t.value : 10
mainTest의 t.value : 10
---------------------------------------
출력문의 두 값은 동일 한 값을 가진다.
---------------------------------------------------------------------------------------------------
call by value(값에 의한 호출)
parameter 값이 Primitive type 일경우 값 자체를 넘김
// Primitive type(byte, short, int, long,char,float,double,boolean)
이경우(int a = 0; 등) 변수명이 주소를 가지고 그 주소값에 값이 담겨져있다.
parameter로 받아진 method 에서는 새로운 변수에 인스턴스를 생성하여 값을
가지므로 변경시 서로 영향을 받지않는다.
class Car{ public void carTest(int value){ value = 10; // t 클래스의 int 형 value 값을 10으로 변경 System.out.println("car의 value :"+value); } } class test{ public int value = 0; } public class MainTest{ public static void main(String[] args){ Car a = new Car(); Test t = new Test(); // 두 클래스를 인스턴스화 시킴 t.carTest(t.value); //<--- t 객체의 value 라는 값 0 을 넘김. System.out.println("mainTest의 t.value :"+t.value); } }
Console
---------------------------------------
car의 value : 10
mainTest의 t.value : 0
---------------------------------------
----------------------------------------------------------------------------------------------
method overloading
같은 class 에서 같은 이름의 method 구현 할수 있게 다형성의 기법으로 method를 구현
예) public void write(int a){}
public void write(String a){}
public void write(double a){}
등과 같이 parameter 의 type이 틀리거나 parameter의 갯수가 틀린경우 또는 다른 타입의
parameter를 순서를 바꾸어 놓을 경우등에는 동일한 method명을 가질수있다.
'java' 카테고리의 다른 글
[java] window10 환경 변수 설정 / java 경로 (1) | 2016.07.14 |
---|---|
[java] 입출력(I/O) Stream(file/buffered) (0) | 2016.06.21 |
[java] eclipse 실행시 java 경로를 못찾을 경우 (2) | 2016.06.13 |