int add(int num1, int num2){
int result;
result = num1 + num2;
return result;
}
함수와 스택 메모리
public 리턴자료형 메소드명(입력자료형1, 입력변수1, 입력자료형2, 입력변수2...){
//입력변수의 개수는 상관이 없다.
...
return 리턴값;
// 리턴자료형과 리턴값의 자료형이 같아야 하고,
// void의 경우 return 문을 사용하지 않아도 된다.
}
public int add(int x, int y)// 여기까지는 선언 // 입력 파라미터.
{
return x + y; // 반환값 (Return value)
}
ex 1)
public static void classMethod(){
System.out.println("클래스 메소드 호출");
}
classMethod();
// 같은 클래스의 클래스메소드를 바로 호출 가능. 동일 클래스에 속한 클래스 메소드 호출.
Methods.classMethod(); // 이렇게도 호출 가능.
Methods m = new Methods();
m.instanceMethod(); //인스턴스 메소드 호출. //퀴즈에 나올 문제. 중요***
class Person{
static String korWord = "사람"; //바로 할당됨
boolean isHungry = true; // 인스턴스 멤버 변수 객체를 만들 때 생성
// 클래스 메소드 메소드라는 것은 변수와 다루는 것이 다름.
public static void describe(){
//클래스로 만들기 때문에 각각의 객체와 상관없음.
System.out.println(korWord+"입니다.");
//스태틱 변수는 사용할 수 있음 접근, 수정 가능.
// 클래스 메소드는 클래스 변수를 사용할 수 있다.
// 단, 객체에 속하는 속성은 사용할 수 없다.
}
//인스턴스 메소드
public void eat(){
isHungry = false;
}
}
ex2)
public class Foo{
static public void main(String arg[]){
//class method
}
}
public static int sumAll(int...params){
// 여러개의 int를 입력 받는다 라는 의미.
int sum = 0;
for (int value : params){
sum += value;
}
return sum;
}
public static void swapPrimitive(int x, int y){
//int x, int y의 사본이 넘어온다. 외부와 전혀 상관없는 값이 된다.
// 밖에 있는 값에 영향을 주지 못한다.
// 기본형 타입인 경우에 해당.
// call by value : 메소드 호출을 할 때, 값을 복사해서 넘긴다.
int temp = x;
x = y;
y = temp;
}
public static void swapReference(Foo x, Foo y){
// Foo - > class, class는 참조형 변수
// 참조형 변수이기 때문에 x,y에 참조가 넘어오게 된다.
int temp = x.value;
x.value = y.value;
y.value = temp;
}
int x = 10;
int y = 20;
Bar.swapPrimitive(x,y);
// 메소드를 사용해서 하면 10,20이라는 값이 전달됨.
// 변수가 전달되는게 아니라 사본이 넘어가는 것이다.
// int temp = x; // 이렇게 하면 잘 뒤집어짐
// x = y;
// y = temp;
System.out.println(x+ ","+y);
Foo f1 = new Foo();
Foo f2 = new Foo();
f1.value = 10;
f2.value = 20;
Bar.swapReference(f1,f2);
System.out.println(f1.value +","+f2.value);
public class Foo {
public int sumAll(int ... params) {
int sum = 0;
for (int i: params) {
sum += i;
}
return sum;
}
public float sumAll(float ... params) {
float sum = 0.0f;
for (float x: params) {
sum += x;
}
return sum;
}
}
Foo foo = Foo();
int sum1 = foo.sumAll(1, 2, 3, 4, 5);
float sum2 = foo.sumAll(1.0f, 2.0f, 3.0f, 4.0f, 5.0f);