/*
* 예시 소스 파일 : 클래스이름1.java
*/
// 클래스 선언
접근제한자 class 클래스이름1{
// 메소드이름1 메소드 선언
접근제한자 리턴자료형1 메소드이름1(자료형 변수이름, ...){
return 리턴값;
}
// main() 메소드 선언, String[] args로 실행 인자를 전달 받음
접근제한자 리턴자료형 main(String[] args){
자료형1 변수명1;
자료형 변수명2 = 대입할값;
// 메소드이름1 메소드 호출
변수명1 = 메소드이름1(매개변수, ...);
//화면 출력 : 표준 출력 스트림에 의해 메시지 출력
System.out.println(변수명1);
}
}
식별자
클래스, 변수, 상수, 메소드 등에 붙이는 이름
식별자 규칙 - ‘@’, ‘#’, ‘!’와 같은 특수 문자, 공백 또는 탭은 식별자로 사용할 수 없 으나 ‘_’, ‘$’는 사용 가능 - 유니코드 문자, 한글 사용 가능 - 자바 언어의 키워드는 식별자로 사용불가 - 식별자의 첫 번째 문자로 숫자는 사용불가 - ‘_’ 또는 ‘$’를 식별자 첫 번째 문자로 사용할 수 있으나 일반적으로 잘 사용하지 않음 - boolean리터럴(true, false)과 Null리터럴(null)은 사용불가 - 길이 제한 X - 대소문자 구별
식별자 이름으로 가능한 예시 - name, student_ID, $fun, Monster3, 가격
식별자 이름으로 불가능한 예시 - 3Chapter, if, false, null, %calc
좋은 식별자 - 목적을 나타내는 충분히 긴 이름 (가독성↑) - 클래스 : 대문자로 시작해서 각 단어의 첫번째 문제만 대문자로 표기 - 변수/메소드 : 첫단어 이후 각 단어의 첫번째 문자는 대문자로 표기 - 상수 : 모든문자를 대문자로 표기
자바의 데이터 타입
자료형
PrimitiveType (기본타입) = 변수의 저장 공간에 값 자체가 저장
논리 - boolean (true, false)
문자 - char (Unicode)
정수 - byte [ -128 ~ 127 ] - short [ -32,768 ~ 32,767 ] - int [ -2,147,483,648 ~ 2,147,483,647 ] - long [ -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 ]
ReferenceType (참조 타입) = 변수의 저장 공간에 참조 값이 저장 - 배열에 대한 레퍼런스 [ int[], float[], ... ] - 클래스에 대한 레퍼런스 [ String, Date, ... ] - 인터페이스에 대한 레퍼런스 [ Runnable, Enumeration, ... ]
변수 = 프로그램 실행 중에 값을 임시 저장하기 위한 공간
변수 선언
// 3개의 변수 선언
char c1, c2, c3;
// 선언과 초기화
int a=1, b=1, c=1;
// 변수 읽기와 저장
radius = 10*5;
c1 = 'r';
weight = weight + 5.0;
상수 = 실행 중 값 변경 불가
상수 선언
final double PI = 3.141592;
리터럴 = 프로그램에서 직접 표현한 값
논리 리터럴 : true, false
문자 리터럴
기본
char a = 'A';
char b = '글';
// 문자 'A'의 유니코드 값(0041) 사용
char c = \u0041;
// 문자 '글'의 유니코드 값(ae00) 사용
char d = \uae00;
특수문자
정수 리터럴 [ 언더바( _ ) 아무 위치에 사용가능 ]
// 2진수 : 0b로 시작
antilogarithm_2 = 0b0101;
// 8진수 : 0으로 시작
antilogarithm_8 = 015;
// 10진수 : 그대로
antilogarithm_10 = 15;
// 16진수 : 0x로 시작
antilogarithm_16 = 0x15;
// long 타입 리터럴의 경우
long g = 24L;
실수 리터럴
// 기본형 : 실수 타입 리터럴은 double타입으로 컴파일
double d = 0.1234;
// .1234D와 .1234는 동일
double w = .1234D;
// 1234E-4 = 1234x10-4이므로 0.1234와 동일
double e = 1234E-4;
// float로 맞추고싶다면 f를 실수리터럴끝에 붙여야함
float f = 0.1234f;
타입 변환
자동 타입 변환(by 컴파일러) = 작은 타입은 큰 타입으로 자동변환
// int(25)타입이 long(25L)으로 자동변환
long m = 25;
// int타입(10)이 double타입(10.0)으로 자동변환
double d = 3.14 * 10;
강제 타입 변환(by 개발자) = 큰 타입이 작은타입으로 변환이 필요할때 강제변환
// int(32bit) -> byte(8bit)
// 0x0000012C 0x2C
byte b = (byte)300; // b = 44
자바에서의 키 입출력
System클래스의 필드 in, out, err
필드 선언
설명
static InputStream in
표준 입력 스트림
static PrintStream out
표준 출력 스트림
static PrintStream err
표준 에러 출력 스트림
입력
System.in - 키보드로부터 직접 읽는 자바의 표준 입력 스트림 - 키 값을 바이트 데이터로 넘겨주므로, 응용프로그램이 문자 정보로 변환해야함
Scanner클래스 - System.in에게 키를 읽게하고, 읽은바이트를 문자, 정수, 실수, 불린, 문자열 등 다양한 타입으로 변환하여 리턴 - Scanner는 입력되는 키 값을 공백으로 구분되는 아이템 단위로 읽음 [ 공백문자 : ‘\t’, ‘\f’, ‘\r’, ‘ ’, ‘\n’ ]
// import 필수
import java.util.Scanner;
public class Main{
public void main(String[] args){
// Scanner객체 생성
// => System.in에게 키를 읽게 한 후, Scanner가 원하는 타입으로 변환하여 리턴
Scanner sc = new Scanner(System.in);
// 원하는 형식으로 입력받기
String name = sc.next(); // 공백전까지의 문자열 리턴
String stateMessage = sc.nextLine(); // 한줄 문자열 리턴
char gender = sc.next().charAt(0);
int age = sc.nextInt();
double weight = sc.nextDouble();
boolean single = sc.nextBoolean();
// hasNext() : 몇개를 입력받게 될지 모를때
// 새로운 입력이 들어오면 true 리턴, ctrl z 키가 입력되면 false 리턴
while(sc.hasNext()){
int a = sc.nextInt();
}
}
}
출력
public class Main{
public void main(String[] args){
byte age = 23;
int weight = 70;
double height = 172.1;
System.out.print("---------------------신체검사 결과");
System.out.println("---------------------");
System.out.printf(" 나이 : %d, 몸무게 : %d, 키 : %f, ", age, weight, height);
System.out.printf("%s : %c 형", "혈액형", 'AB');
}
}
// 출력
//---------------------신체검사 결과---------------------
// 나이 : 23, 몸무게 : 70, 키 : 172.100000, 혈액형 : AB형
연산
연산자의 종류
연산자 우선순위
=> 괄호는 최우선순위=> 연산자가 같은 우선순위라면 왼쪽에서 오른쪽으로 처리! ( 대입 연산자, --, ++, +,-(양수 음 수 부호), !, 형 변환은 반대로)
산술연산자 [ 더하기 : +, 빼기 : -, 곱하기 : *, 몫 : /, 나머지 : % ] * ArithmeticException( 0으로 나눌 수 없음 ) * Infinity ( 실수인 0.0으로 나누면 무한대를 의미 ) * 0.0/0.0 ( NaN 출력됨) * 자료형 byte, short의 산술 연산 모두 int로 변환되어 연산 수행
증감연산
연산자
내용
연산자
내용
a++
a를 반환한 뒤에 a값 1 증가
++a
a를 1 증가한 뒤에 값 반환
a--
a를 반환한 뒤에 a값 1 감소
--a
a를 1 감소한 뒤에 값 반환
대입 연산 [ =, +=, -=, *=, /=, %=, &=, ^=, !=, <<=, >>=, >>>= ] - 연산의 오른쪽 결과는 왼쪽 변수에 대입
비교 연산 [ <, >, <=, >=, ==, != ]
논리 연산 [ NOT : !, OR : ||, AND : &&, XOR : ^ ] * &&와 ||의 경우, 왼쪽 피연산자만으로 전체 결과가 결정된다면 오른쪽 피연산자는 평가하지 않음
조건 연산자 [ 삼항연산자 == 조건문 ? 참 : 거짓 ]
비트 논리 연산 [ NOT : ~, OR : |, AND : &, XOR : ^ ]
시프트 연산자 [ <<, >>, >>> ] - ( a<<b ) : a의 각 비트를 왼쪽으로 b번 시프트, 최하위 비트의 빈자리는 항상 0으로 채움 - ( a>>b ) : a의 각 비트를 오른쪽으로 b번 시프트, 최상위 비트의 빈자리는 시프트 전의 최상위 비트로 채움 - ( a >>> b ) : a의 각 비트를 오른쪽으로 b번 시프트, 최상위 비트의 빈자리는 항상 0으로 채움
조건문
if문
if(조건식1){
// 조건식1의 값이 true일 때 실행
}else if (조건식2){
// 조건식1의 값이 false이고 조건식 2가 trued일 때 실행
}else{
// 조건식1의 값이 false이고 조건식 2가 false일때 실행
}
switch문
switch(값){
case 1:
// 값이 1일 때 실행
break;
case 2:
// 값이 2일 때 실행
case 3:
// 값이 2이거나 3일때 실행
break;
default:
// 값이 1, 2, 3 다 아닐 때 실행
}