0. 메소드 3요소 : Return type, Method name, Parameter

 

1. 메소드의 접근

 1) Member Method, Instance Method : 멤버변수와 같은 개념

 2) Class Method, Static Method : 클래스변수와 같은 개념

 public class MethodTest{
 public static void main(String[] args) {
  MethodTest mt = new MethodTest();
  mt.display();
  display2();
  SubTest st = new SubTest();
  st.display3();
  SubTest2.display4();
 }

 void display(){  //Member Method, Instance Method
  System.out.println("Hello, World");
 }
 static void display2(){ //Class Method, Static Method
 System.out.println("Hello, World2");
 }
}

class SubTest{
 void display3(){  //Member Method, Instance Method
  System.out.println("Hello, World3");
 }
}

class SubTest2{
 static void display4(){  //Member Method, Instance Method
  System.out.println("Hello, World4");
 }
}

 

2. Method 호출

 1) Call by value

 public class MethodTest1{
 public static void main(String[] args) {
  int result, a, b; //argument
  a=10; b=50; 
  result = hap(a,b); 
  display(a,b,result);
  a=1; b=5;
  result = hap(a,b); 
  display(a,b,result); 
 }
 static void display(int a, int b, int result){
  System.out.println(a+"부터"+b+"까지합="+result);
 }
 static int hap(int start,int last){//parameter
  int sum = 0;
  for(int i=start ; i<=last ; i++ ){
   sum += i;
  }
  return sum;
 } 
}

 1. 합계를 출력하는 메소드에

시작값과 끝값의 입력을 받아 

각각 다른 결과값을 가져올 수 있다.

 2. 출력 메소드 역시 입력값에 따라 다른 출력을 가져올 수 있다.

 

 3. Call by value는 Value type이 대상이기 때문에 값복사를 하며, 별도의 공간 2개가 따로 만들어진다. 상대방에게 영향을 주지 않는다.

 

 2) Call by Reference

 public class MethodTest2{
 int a, b;
 public static void main(String[] args) {    
  MethodTest2 mt2 = new MethodTest2();
  mt2.a = 5; mt2.b=9;
  System.out.println("mt2.a="+mt2.a+"mt2.b="+mt2.b);  
  swap(mt2);
  System.out.println("mt2.a="+mt2.a+"mt2.b="+mt2.b);
 }
 static void swap(MethodTest2 mt){
  int tmp;
  tmp = mt.a; mt.a=mt.b; mt.b=tmp; 
 }
}

  생성자의 변수로 주소값을 넘겨준다.

 public class MethodTest3{
 public static void main(String[] args) {  
  int [] array = method();
  System.out.printf("%d, %d",array[0],array[1]);
 }
 static int[] method(){
  int[] array ={5,6};
  return array;
 }
}

  배열로 받는 방법.

 

 3)Varargs (Variable Arguments)

public class MethodTest4{
 public static void main(String[] args) {
  method(1,2,3,3,"string",'A',false);  //아무거나 넣어도 된다.
 }
 static void method(Object ... array){
  for (Object obj : array ){   
   System.out.print(obj + "\t");   
  }
 }
}

 

 Variable Arguments :  

 메소드에 인자값을 다양하게 (갯수/형) 주어도 메소드에서 입력받을 수 있다.

 배열처럼 사용하지만 배열이 아니라는의미인

... 을 사용하여 모든 형을 Object로 받는다.

 

 4) Recursive Methods (재귀 함수)

  - 굳이 반복문으로 표현 할 수 있는 것을 재귀함수로 사용하지말자. (메모리 사용량 증가)

 

 5) Method Overloading(오버로딩) (메소드 중복정의) //오버라이딩이랑 다르다.

  - 메소드의 이름이 같아도 입력 parameter가 다르면 사용 할 수 있다.

 public class MethodTest6{
 public static void main(String[] args) {
  display();
  display(3);
  display(3,5);
  display(3.4);
 }
 static double display(double a){  return 1.2;}
 static void display(int a){}
 static char display(int a, int b){ return 'A';}
 static void display(){}
}

 

 6) static Methods

  - 생성자 없이 클래스명으로 접근하기위해서

  - 왜 main ()는 static인가? : 생성자 없이 바로 main()를 실행하기 위해서.

 

 

 

ps-------------------------------------

-return 은 메소드의 끝을 의미하며, 그 뒤에는 문장이 올 수 없다. 하지만 조건문 속에서는 가능하다.(조건적 return)

 static void exampleMethod( ){
intsu;
//...
System.out.println("Hello");
if (su< 10)
return;
System.out.println("World");
}

 

-String 은 Call by value의 예외이다. (값을 바꿀 수 없다)

1. 배열 : 같은 형식의 다양한값들을 담고있는 구조.

 1) 실행 될 때 생성된다.(at runtime)

 2) 생성된 후엔 구조 확장이 불가능하다.

 3) 각 형들의 초기값

  - int 형의 초기값 : 0

  - double 형의 초기값 : 0.0

  - boolean 형의 초기값 : false

  - char 형의 초기값 : '\0', '\u0000' // 프린트 할 수 없는 값이 출력되기 때문에 종료된다.

  -  Reference형의 초기값 : null

 ex) 자판기(화폐)

 import javax.swing.JOptionPane;
public class Japanki{
 public static void main(String[] args) {
  int [] array = {50000,10000,5000,1000,500,100,50,10,5,1};
  String money = JOptionPane.showInputDialog("얼마?");
  int gold = Integer.parseInt(money);
  for (int i=0; i<array.length ; i++){
   System.out.printf("%d원 =>> %d개\n", array[i], gold/array[i]);
   gold = gold%array[i];
  }
 }
}

 입력받은 값을 5만원권부터 1원짜리까지 나눌수 있는 갯수를 표시하여준다.

 

2. 다차원 배열

 1) 2차원배열 : Array of Array

   - 배열된 곳의 주소들을 배열한다는 의미로 알면 쉽다.

int [][] array = new int [3][4];   

for (int i = 0; i<array.length ; i++ ) {
   for (int j=0; j<array[0].length ;  j++){
    System.out.print("array["+i+"]["+j+"]="+array[i][j]+"\t"); 
   }
   System.out.println(""); 
  }
  System.out.println("Rectangular Array\n");

 int [][] array3 = {{2,3},{4,5,6},{7},{8,9,10,11}};
  for (int i = 0; i < array3.length ;i++ ){
   for (int j = 0; j < array3[i].length ;j++ ){
    System.out.print("array["+i+"]["+j+"]="+array3[i][j]+"\t"); 
   }
   System.out.println(""); 
  }
   System.out.println("Ragged Array\n");

 Rectangular Array : 행 열 고정

 Ragged Array : 행 고정 열 변환

 

3. Copying Arrays : 값복사와 주소복사

 int [] original = {1,2,3,4,5};
 int [] target = {9,8,7,6,5,4,3,2,1};

 target = original;

  nt [] src = {1,2,3,4,5};
  int [] dest = {9,8,7};
  System.arraycopy(src,0,dest,0,3);

 주소복사

 값복사 : 두 배열의 길이를 알고있어야한다.

 

'Programming > JAVA' 카테고리의 다른 글

자바 객체지향의 특징 1(캡슐화,생성자,this)  (4) 2011.03.24
자바 메소드(method)  (3) 2011.03.24
자바 제어문(조건/반복/분기)  (2) 2011.03.24
JAVA 문법과 연산자  (2) 2011.03.24
JAVA 언어의 법칙  (1) 2011.03.24

0. 기본 입력 방법과 함께 제어문을 학습!

 1) main 메소드의 (String [] args)를 이용 

 public class InputTest{
 public static void main(String[] args) {
  for(int i = 0; i<args.length ; i++ )
  {
   System.out.println("args["+i+"] = "+ args[i]);
  }
 }
}

실행 시 입력을 넣어야 한다.

 />java InputTest 사과 딸기 포도 복숭아

 

출력 :

args[0] = 사과

args[1] = 딸기

args[2] = 포도

args[3] = 복숭아

 

 

 2) Scanner 메소드사용

 import java.util.Scanner;
public class InputTest2{
 public static void main(String[] args) {
  Scanner scanner = new Scanner(System.in);
  System.out.println("이름은?"); 
  String name = scanner.next();
  System.out.println("나이는?");
  int age = scanner.nextInt();
  System.out.println("신장은?");
  double height = scanner.nextDouble();
  System.out.println("이름 : "+name +" 나이 : " +age +" 키 : "+ height);
 }
}

 Scanner 매소드를 이용하여 입력을 저장 후 출력.

 

3) Swing.JOptionPane 사용

 import javax.swing.JOptionPane;

public class InputTest4{
 public static void main(String[] args) {
  String name = JOptionPane.showInputDialog("당신의 이름은?");
  System.out.println("이름 = " +name);
 }
}

  DOS모드에서 할 필요없이 입력 메세지박스가 뜬다.

 

 

1. if문

 1) 참일때만 사용

 2) 참과 거짓일때 사용

 3) 경우의 수가 3개 이상일때 사용

 

2. switch문

 - 초기값을 지역변수로 사용할 수 있다.

 - 경우의 수가 많더라도 결과를 한번에 찾게된다.

 - 조건은 정수만 올 수 있다. (1.5버전 이상은 enum가능)

 

3. for문 : 반복의 시작과 끝이 명료하다.

  1) 무한반복이 되지 않도록 조심!

예제 : 다음의 결과를 갖도록 for문을 이용해 작성해 보세요.

 A B C D E

 f  g  h  i  j

 K L M N O

 p q  r  s  t

 U V W X Y

 z

 

 public class ForTest2{
 public static void main(String[] args) {
  int cnt=1;
  int cnt2 = 0;
  for(int i=65;i<91;i++){
   if( (cnt2%2)==0){ System.out.printf("%c\t",i);}
   else{
   System.out.printf("%c\t",i+32); }
   if (0==(cnt%5))  {System.out.println(""); cnt2++;  }
   cnt++;
      }
 }
}

★★★★★

★★★★

★★★

★★

 public class ForTest4{
 public static void main(String[] args) {
  for (int i = 5 ; i>=1 ; i-- ){
   for (int j=1; j<=i ; j++ ){
    System.out.print("★");   
   }
   System.out.println("");
  }
 }
}

 
 2) 강화된  for문
  - 배열이나 컬렉션에서 사용된다.(일반 for문처럼 사용할 수 없다.)
  - 속도를 줄이기 위해 index의 사용을 제거하였다.
  - 배열 내의 모든 내용을 출력하기 때문에 특정 번째의 내용 확인을 할 수 없다.

 

 int[] array = {2,3,4,5,6};

 for ( int su: array ){
   System.out.print(su);
  }

 출력 :

 23456

 

4. while문 : 반복의 시작과 끝이 명료하지 않다.

  - 초기값을 무조건 while문 밖에 선언한다.

  - do while은 한번 실행 한 후 조건을확인.

 

4. 분기문 : 자바는 goto문을 쓸 수 없다.

 1)continue/break/label

   - label은 중첩된 반복문에서만 사용할 수 있다.

 

 

ps.----------------------------------------------------------

 

- String은 == 연산자가 주소를 비교하기 때문에 값을 비교하지 않는다.

 public class InputTest1
 public static void main(String[] args) {
  String season = args[0]; //

 

  if(season == "summer"){

  System.out.println("여름입니다.");

}else{

  System.out.println("여름이 아닙니다.");

}

}

실행 시 입력을 넣어야 한다.

 />java InputTest1 summer

 

출력 :

 여름이 아닙니다.

 

 public class InputTest1
 public static void main(String[] args) {
  String season = args[0]; //

 

  if(season.equals("summer")){

  System.out.println("여름입니다.");

}else{

  System.out.println("여름이 아닙니다.");

}

}

 

실행 시 입력을 넣어야 한다.

 />java InputTest1 summer

 

출력 :

 여름입니다.

 if(season.compareTo("summer") == 0){ 

 두 문자열의 값을 빼 0이 나오면 같다. 

 

 

 - 자동 형변환

 double = avg;

 int tot ;

 int a =90; int b=80; int c = 100;

tot = a+b+c

avg = tot/3.0; //나누기 연산으로 정수형으로 변하기 때문에 평균의 소수점을 표현하기위해서 연산 중 한 부분을 실수로 써 주었다.

 

- switch문으로 계산기 만들 때 곱하기 연산자 입력을 *로 받으면 오류가 발생한다.

 

- random() 의 동작 : 1~10 사이의 랜덤수를 뽑기

 범위

 0.0 <= r <= 1.0  

 양변에 범위의 최대값을 곱함

 0.0 <= r*10 <= 10.0 

 양변에 최소값을 더함

 1.0 <= r*10+1 <= 11.0 

 최종적으로

 r 은 1~10 사이의 값이 될 수 있다. 

'Programming > JAVA' 카테고리의 다른 글

자바 메소드(method)  (3) 2011.03.24
자바 배열이란?  (2) 2011.03.24
JAVA 문법과 연산자  (2) 2011.03.24
JAVA 언어의 법칙  (1) 2011.03.24
JAVA의 특징과 설치  (2) 2011.03.24

1. 변수

 1)지역변수 : 메소드 안에서 정의된 변수.

   - 지역변수는 반드시 초기화를 하여야한다.

 2)클래스변수 : 클래스 내부에 선언되는 변수로 프로그램 실행 시 가장 먼저 실행된다.

   - static 키워드를 사용한다. (class변수 또는 static변수라고 한다.)

   - 지역변수에서는 static을 사용 할 수 없다.

   - 초기값을 주지않아도 된다.(자동 초기화가 된다.)

   - 보안에 취약한 단점이 있다.

   - 메모리에서 언제서 소멸되는지 알 수 없다. (가비지 콜렉터(Garbage Collector) 가 없다.)

 3)맴버변수(Instance 변수) : 메소드가 아닌 클래스 내부에 있는 변수

   - static을 사용하지 않는다.

   - 생성자에 의해 생성된다. (new ~~~)

 public class MemberTest{
 String msg = "Hello, World"; // member variable
 static String msg2 = "static Hello, World2"; // class(static) variable
 public static void main(String[] args) {
  MethodTest hw = new MethodTest(); //맴버 변수는 생성자를 써야 메모리에 올라간다
  System.out.println("msg = "+hw.msg); 
  System.out.println("msg2 = "+msg2);

  Demo dem = new Demo(); 
  System.out.println("msg3 = "+dem.msg3);
  System.out.println("msg3 = "+ Demo.msg4); // 다른 클래스의 static변수는 클래스 명으로 접근가능
 }
}

class Demo{
 String msg3 = "Hello, World3"; //member variable
 static String msg4 = "Hello, World4";// static variable
}

 

 

 

2. 연산자

 - 수평적 연산자 우선순위 : 단항연산자와 할당연산자를 제외하고 모두 왼쪽에서 오른쪽으로 우선순위가 내려간다.

 - 수평적 연산자 우선순위 : 우선순위가 높은 것 먼저 하게된다.

 

 

 1) 비트연산자

  -  +,-,~ 의 2항 연산은 int형으로 확장변환(Promotion)된다. (long,float,long은 int보다 더 크기때문에 형변환 되지 않는다.)

 char ch1 = ch >>3      // 이 연산은 컴파일 에러가 발생하게된다. char를 2항연산 할 수 없기때문이다.

  - 3항 연산은 truncation이 발생한다.

 short = (true ? short : 1967) // 1967이 int형이지만 shot의 범위를 넘어서지않기 때문에 truncation이 발생하여 에러가 발생하지 않는다. 하지만 short의 단위인 2바이트의 크기를 벗어나게되면 컴파일 에러가 발생하게된다.

 2) 논리연산자

  -

 int a=5, b=9, x=15;

if (a>x && ++b>x){

 System.out.println("true");

}

else

{

System.out.println("false");

}

System.out.println("b = "+b);

 - &&는 앞의 결과에 따라 거짓이기 때문에 뒤의 연산은 수행하지 않는다. 그렇기 때문에 b의 결과는 9가 출력된다.

 int a=5, b=9, x=15;

if (a>x & ++b>x){

 System.out.println("true");

}

else

{

System.out.println("false");

}

System.out.println("b = "+b);

 - &는 앞의 결과에 관계없이 뒤의 모든 연산을 수행하게 된다. 그렇기 때문에 b의 결과값은 10이된다.

 

 

 

3. 형변환

 1) 암시적,묵시적 형변환

 2) 강제적,명시적 형변환 : cast연산자

 

 

 

 

 

 

ps.----------------------------------------------------------

1. 메소드 내에서는 절자적인 성향을 같는다.

2. 자바는 Class 밖에서 변수를 선언 할 수 없다.

3. int 를 String으로 : String.format("%5s", String.valueOf(red))

4. int 를 16진수로 : Integer.toHexString(red).toUpperCase()

5. String 을 int 로 : int red = Integer.parseInt(red);

'Programming > JAVA' 카테고리의 다른 글

자바 배열이란?  (2) 2011.03.24
자바 제어문(조건/반복/분기)  (2) 2011.03.24
JAVA 언어의 법칙  (1) 2011.03.24
JAVA의 특징과 설치  (2) 2011.03.24
자바(JAVA)란?  (1) 2011.03.24

+ Recent posts