주석 : 프로그래머가 참고할 내용을 기재, 실행하고는 무관하다.
//참고내용
/* 참고내용 */
개행문자
\n => new line (줄만 바꿈, 커서위치 그대로)
ex) kim
lee
kook
\r => carrgae return ( 커서를 그 줄의 처음으로 위치시킨다. )
\t => 일정 간격을 띄운다 (보통 8칸)
보통 \n\r을 같이 쓴다...
OOP의 4대특징
1. 캡슐화 ({}) ,은닉화 (클래스 내용은 모르고 사용법만 아는것... 사용자는 복잡하게 알 필요가 없다.)
2. 상속성(모든 클래스는 Object 클래스를 상속받는다.) class Test8 extends Object
3. 다형성
overloading - 하나의 클래스 안에 같은 이름의 메소드가 여러개 존재하는것. ( 구분은 매개변수로 가능)
overriding - 상속받은 메서드 내용을 재정의
4. 추상화 : 복잡한 것(개발자 입장)을 단순화(사용자 입장) 시키는 것.
명령줄인수
자바 응용프로그램에는 main()이라는 정적 메소드를 포함하고 있다.
이 메서드는 String 객체배열 인수한개를 받는다.
이 객체들은 사용자가 명령줄에 입력할 수 있는 모든 인수를 표현한다.
명령줄 인수의 갯수는 int형으로 args.length 를 통해 구할 수 있다.
인수는 args[0]args[1] args[2] 순으로 읽어 들여 진다.
--------------------------------------------------------------
class CmdLineArg_1
{
public static void main(String args[])
{
System.out.println("인수갯수 : " + args.length);
System.out.println("args[0] =>" + args[0]);
System.out.println("args[1] =>" + args[1]);
System.out.println("args[2] =>" + args[2]);
}
}
-------------------------------------------------------------
실행(도스창에서) C:\_java\01_java\02>java CmdLineArg_1 kim lee park
실행(jpadpro) 실행버튼 누른후 using application parameters에 다가 인수를 넣어도 된다.
인수갯수 : 3
args[0] =>kim
args[1] =>lee
args[2] =>park
이 방법은 매개변수에 숫자를 입력해도 숫자를 문자로 인식한다..
문자를 숫자로 변환하는 방법
--------------------------------------------------------------------
class CmdLineArg_2
{
public static void main(String args[])
{
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
System.out.println("a :"+a);
System.out.println("b :"+b);
System.out.println("합:"+(a+b));
}
}
---------------------------------------------------------------------
실행결과
C:\_java\01_java\02>java CmdLineArg_2 10 20
a :10
b :20
합:30
숫자를 문자로 변환하는 방법 -> ""+7
class
- class란 객체지향 프로그램에서 가장 기본이 되는 클래스를 정의하는 키워드(예약어)
- 자바프로그램은 클래스를 하나 이상 가지게 된다.
- 주 클래스는 main()이 포함되어 있는 것을 말한다.
- 주 클래스 이름이 프로그램 이름이 된다(저장이름)
main 메소드
- 자바 프로그램 실행시 최초로 수행되는 메서드 이다.
- 자바에서는 함수라는 이름대신 메서드라는 말을 사용한다.
- public : 접근 제한자
- static : 이 클래스 내에 main()를 소속시킨다. static은 메인함수 메모리 해제시에 같이 헤제된다.
- main() 호출은 java.exe 실행시 JVM이 호출한다.
- main()는 항상 다음과 같은 형식으로 써야 한다.
public static void main(String args[]) {}
접근 제한자
----------------------------------------------------------------
접근 제한자 같은 클래스 같은 패키지 상속관계 관련없는클래스
----------------------------------------------------------------
public 0 0 0 0 // 어디서나 접근가능
protected 0 0 0 x //자신의 클래스와, 파생클래스에서만 접근가능
생략할경우 0 0 x x //같은 패키지 내에서, 같은 폴더에서만 사용가능함
private 0 x x x //자산의 클래스 내에서만 사용가능
----------------------------------------------------------------
* 변수는 private으로 메서드는 public 으로 선언을 권유한다.
1.private : 자신의 클래스 내에서만 접근 가능
2.생략(packge) : 같은 패키지 내에서 접근 가능
3.protected : 자신의 클래스와 파생 클래스 에서만 접근 가능
4.public : 어디서나 접근 가능
전역변수 : 메서드 외부, 클래스 내부에 선언된 변수
지역변수 : 메서드 내부에서 선언한 변수
---전역변수에서 ---
은폐필드 : private 으로 선언된 필드(변수)
보호필드 : protected 으로 선언된 필드
공개필드 : public 으로 선언된 필드
예제 1
-----------------------------------------------------------
class VariScope
{
static int global;// 전역변수
public static void mm(){
int local = 123;
global = 456;
System.out.println(local);
System.out.println(global);
}
public static void main(String argsp[])
{
int local = 100;
mm();
System.out.println(local); // local -> 100; mm함수의 지역변수랑 혼동 하지 말것.
System.out.println(global);
}
}
-----------------------------------------------------------
예제 2
-----------------------------------------------------------
class PanMae
{
public String pum; //어디서나 사용가능
int su; //생략은 같은 패키지(폴더) 내에서만 접근 가능
private int dan; // 은폐필드, 자신의 클래스 에서만 사용가능
public PanMae(String pum, int su, int dan){ //생성자
this.pum= pum;
this.su = su;
this.dan = dan;
}
public void disp(){
System.out.println(pum + "~~~~" + su + "~~~~" + dan);
}
}
class VariScope_2
{
public static void main(String args[])
{
PanMae A =new PanMae("사과",2, 2000); //객체 생성시 생성자 호출
A.disp();
A.pum = "감"; //공개필드에서는 서로 무관한 클래스에서도 사용가능
A.disp();
A.su = 100; //같은 패키지라서 접근 가능하다.
A.disp();
// A.dan = 500; // Error!!! private 이라서 접근 불가
A.disp();
}
}
-----------------------------------------------------------
자료형
기본 자료형 - 수치 자료형 - 정수 자료형 byte -> 1byte
char -> 1byte
short -> 2byte
int -> 4byte
long -> 8byte
- 실수 자료형 float -> 4byte
double -> 8byte
- 논리 자료형 - boolen - true or false
레퍼런스 자료형 - 클래스 ex) String은 원래 클래스이나.. 자료형처럼 사용가능..
- 인터페이스
- 배열
byte < short = char < int < long < float < double
식별자 Identifier
식별자는 변수명, 메서드명, 클래스명, 상수명 등을 말한다.
변수명 : 데이터를 넣을 기억장소
*변수이름을 만드는 규칙
1. 영문자, 숫자 조합하여 사용 (첫문자가 숫자불가능)
2. 키워드(예약어)는 사용할 수 없다.
3. 공백사용 불가.
4. 특수문자 사용불가 (단, _,$ 는 사용가능)
예) int $a = 20;
int _a = 30;
Literal 상수 ==> 데이터
1. 정수상수 ( 10 , 10L, 0xA, 014) default - int형
2. 실수상수 ( 12.4, 12.5f, 12.E+01) default - double형
3. 문자상수 ( 'A', '1', '\n')
4. 문자열상수 ("A", "ABC")
int i =10;
i+"" =>문자열로 변환됨
i+'' =>code값으로 변환됨
i+'A' =>code값으로 변환됨
형변환
자동 형변환
double d = 12.5f;
long a =10;
큰 자료형으로 변환된다.
강제 형변환(casting)
float b = (float)12.5; //double형 12.5을 float 으로 강제 형변환
char ch = (char)65;
전역변수와 지역변수
전역변수 : 클래스안, 메서드 밖에서 선언된 변수 -> 값을 안넣어주면 자동으로 1로 초기화
지역변수 : 메서드 안에서 선언된 변수 -> 자동초기화 안됨
--------------------------------전역변수----------------------------------
class Test{
int a;
char ch;
double d;
String str;
Boolean b;
//전역변수 초기화 x
public void disp()
{
System.out.println("a:" +a);
System.out.println("ch:" +ch);
System.out.println("d:" +d);
System.out.println("b:" +b);
System.out.println("str:" +str);
}
}
class VarTest_5
{
public static void main(String args[])
{
Test A = new Test();
A.disp();
}//end main
}// end class
-------------------------------------------------------------------------
결과값: a:0
ch:
d:0.0
b:null
str:null
----------------------------지역변수--------------------------------------
class Test2
{
public void disp()
{
//지역변수 초기값 x
int a;
double d;
String str;
System.out.println("a:"+a);
System.out.println("d:"+d);
System.out.println("str:"+str);
}
}
class VarTest_6
{
public static void main(String []args)
{
}
}
---------------------------------------------------------------------------
오류메시지 :
variable a might not have been initialized
variable d might not have been initialized
variable str might not have been initialized