자바에서 함수는 항상 클래스에 싸여서 사용
public class Hello{
public static class int plusone(int a){//메소드
return a+1;
} //main()함수 부터 실행
public static void main(String[] args){
int a = 10; System.out.println(a + "+1은" + plusone(a));//메소드 호출,출력
}
} //모든 함수는 항상 클래스에 포장된 상태
- 자바 식별자: 클래스, 변수, 상수, 메소드 등에 붙이는 이름
- @,8,! 등 특수문자, 공백 등은 식별자로 사용할 수 없으나 _,$는 가능(근데 잘 사용하지 않습니다.)
- 유니코드문자는 사용가능(한글도 유니코드)
- 키워드는 식별자로 사용불가능
- 식별자의 첫 문자로 숫자는 불가능
- true,false,null 은 불가능
- 길이 제한 없음
- 대소문자를 구분함
- 자바의 데이터 타입
- 기본타입: unsigned 없음, 크기가 정해져 있음.(자바는 JVM기반)
- boolean 논리타입 1비트
- char 문자타입 2바이트
- byte 정수타입 1바이트
- short 정수타입 2바이트
- int 정수타입 4바이트
- long 정수타입 8바이트
- float 실수타입 4바이트
- double 실수타입 8바이트
- 레퍼런스 타입 1개
- 배열,클래스 와 인터페이스에 대한 레퍼런스
- 문자열
- 문자열은 기본타입이 아니므로 String클래스로 문자열을 표현 해야 한다.
- 문자열에서 + 연산은 문자열을 연결시키는 역할을 함
- 리터럴: 프로그램에서 직접 표현한 값
//Ex int n = 15; int m = 015; int l = 0x15; int k = 0b0101;//n==m==l==k double d = 0.1234 double e = 0.1234f//d==e boolean a = true; boolean b = (1>0);//a==b boolean c = 1;//타입 불일치 오류.자바에서는 1,0을 참,거짓으로 이용 불가
- 숫자 리터럴에 _를 사용할 수 있다. 이 점을 이용해 가독성을 높이자.
- var 키워드
- Java10부터 사용가능한 키워드. var을 사용하여 변수타입 생략 가능
- 지역 변수의 선언에만 사용
- 컴파일러가 변수 타입을 추론, 초기값 지정 필수
- 기본타입: unsigned 없음, 크기가 정해져 있음.(자바는 JVM기반)
var age = 23; //int형 변수로 선언
var name = "Soohwan" //string형 변수로 선언
var weight = 64.5 //double형 변수로 선언
-
- 상수(const in C++)
- final 키워드 사용
- 선언시 초기값을 지정한후, 실행 중 값 변경 불가
- 컴파일러가 변수 타입을 추론, 초기값 지정 필수
- 타입 변환
- 자동 타입 변환 (컴파일러에 의해 크기가 작은 타입->큰 타입 으로 변환)
- 강제 타입 변환 (개발자가 필요에 의해 강제로 타입 변환)
- 상수(const in C++)
long m = 25;//25는 int 타입 이지만 long 타입 으로 자동변환
double k = 19.1;
int n = (int)k; // n에 int 타입 으로 강제변환된 k저장 (n=19)
JAVA에서의 키입력
- System.in : 자바의 표준 입력 스트림
- 키 값을 byte로 return
- 키 값을 byte 데이터로 반환하기 때문에 프로그램이 알아서 문자 정보로 변환해야 함.
- Scanner클래스 : java.util.Scanner 클래스
- System.in에게 키를 읽게 하고, 다양한 타입으로 변환하여 return 시킴
- 객체생성
import java.util.Scanner;//java.util.Scanner를 import문 필요
...
Scanner scnr = new Scaner(System.in);//Scanner 객체 scnr 생성
- Scanner에서 입력되는 키값을 공백으로 구분되는 아이템 단위로 읽음
Scanner scnr = new Scanner(System.in);
String name = scnr.next();//String은 .next()함수이용
String age = scnr.nextInt();//int는 .nextInt()함수이용
double weight = scnr.nextDouble();//double은 .nextDouble()함수이용
<- 입력 값 예시: soohwan 23 64.5 (soohwan->name, 23->age, 64.5->weight)
JAVA에서의 연산과 조건문
연산의 종류 | 연산자 | 연산의 종류 | 연산자 |
증감 | ++ , -- | 비트 | & , | , ^ , ~ |
산술 | + , - , * , / , % | 논리 | && , || , ^ , ! |
시프트 | >> , << , >>> | 조건 | ? : |
비교 | > , < , <= , >= , ==, != | 대입 | = , += , -= , *= , /= , &= , .. |
- 조건문
- if 문 & if else 문
- 다중 if-else문
- switch문
if(condition){ }
else{ }
if(condition1){ }
else if(condition2){ }
else if(condition3){ }
switch(식){
case 값1:
action1;
break;
case 값2:
action2;
break;
...
default
actionn;
}
- 반복문
- for문
- while문 : 조건 충족시 무한 반복
- do-while문 : 한번 실행후 조건 충족시 반복
- continue : 반복문을 빠져나가지 않고 다음 반복문 진행
- break : 반복문 하나를 완전히 빠져 나갈때 사용
배열 Array
인덱스와 인덱스에 대응하는 데이터들로 이루어진 자료 구조같은 타입의 데이터들이 순차적으로 저장
- 일차원 배열
- 배열 선언과 배열 생성 두 단계 필요
int arr [];//배열선언
int [] arr2;//배열을 선언하는 두번째 방법
arr = new int[15];//배열생성
int arr3 = new int[15];//선언과 동시에 생성
int arr4[] = {0,1,2,3,4,5,6,7,8,9};//배열선언과 동시에 초기화
int arr5[10];//컴파일 오류, 배열의 크기를 지정하면 안돼.
-
- int : 배열의 타입, arr : 배열에 대한 레퍼런스 변수, [] : 배열선언, new : 배열생성, 15: 원소개수
- 레퍼런스 치환과 배열 공유
- 하나의 배열을 다수의 레퍼런스가 참조 가능
int arr1[] = new int[5];
int arr2 = arr1;//arr1과 arr2는 동일한 배열을 참조하는 레퍼런스
arr1[1] = 4;
arr2[1] = 8;//--------> 오류!!!
- 자바에서는 배열을 객체로 관리
- length 필드는 배열의 크기를 나타냄.
- for-each문
- 배열의 원소를 순차적으로 접근하는데 유용한 for문
int []num = {1,2,3,4,5};
int sum = 0;
for(int k : num){
sum+=num;
}
- 2차원 배열
- 2차원 배열의 length.
- i.length -> 2차원 배열의 행의 개수
- i.[n].length -> 2차원 배열의 열의 개수
- 2차원 배열의 length.
int arr1[][];//2차원 배열 선언
int[][] arr2;//2차원 배열 선언
arr1 = new int[2][5];//2차원 배열 생성
int arr3[][] = new int[2][5];//2차원 배열 선언과 생성 동시에
int arr4[][] = {{0,1},{3,4},{5,6},{7,8}};//2차원 배열 선언, 생성과 초기화 동시에
int size = arr1.length; //=2 5칸 짜리 배열이 두개 들어 있음.
int size2 = arr1[0].length; //=5 0번째 셀에는 셀이 다섯개 들어 있음.
- 정방형 배열 : 각 행의 열의 개수가 같은 배열.
- 비정방형 배열 : 각행의 열의 개수가 다른 배열.
int i[][];//정방형 배열 선언
i[][] = new int[4][4];//정방형 배열 생성
int ii[][];//비정방형 배열 선언
ii = new int[4][];//비정방형 배열 선언
ii[0] = new int[1];//각 행의 레퍼런스 배열 선언
ii[1] = new int[2];//생성 별도로 해도 됨
ii[2] = new int[3];
ii[3] = new int[6];
main() 메소드
- main()은 자바 응용프로그램의 실행 시작 메소드
public static void main(String[] args){
}
public : main메소드는 다른 클래스에서도 접근이 가능해야한다.(필수)
static : main메소드가 포함된 객체가 생성되기 전부터 호출이 가능해야 한다.
void : main메소드는 return 값이 없다.
String[] : 문자열 배열 , 매개변수가 문자열 배열이 되게 하기 위함이다.
args: 매개변수
JAVA의 예외 처리
- 컴파일 오류
- 문법에 맞지 않게 작성된 코드
- 컴파일 시 발견
- 예외
- 오작동이나 결과의 악영향을 미칠 수 있는 실행 중 발생한 오류
- 정수를 0으로 나누는 경우
- 배열보다 큰 인덱스로 배열의 원소를 접근하는 경우
- 존재하지 않는 파일을 읽으려고 하는 경우
- 정수 입력을 기다릴때, 문자가 입력된 경우
- 자바에서 예외 처리
- 예외 발생 -> 자바 플랫폼 인지 -> 프로그램에 전달
- 프로그램이 예외를 처리하지 않으면, 프로그램 강제 종료
- 오작동이나 결과의 악영향을 미칠 수 있는 실행 중 발생한 오류
Scanner scanner = new Scanner(System.in);
int num1 = scanner.nextInt();
int num2 = scanner.nextInt();
int num3 = 0;
try{
num3 = num1/num2;//예외가 발생할 가능성이 있는 실행문
System.out.prinln(num3);
break;
}
catch(ArithmeticException e){
System.out.prinln("0으로 나눌수 없습니다.");//예외 처리문
}
finally{
//예외 발생 여부와 관계없이 무조건 실행(생략가능)
}
'JAVA' 카테고리의 다른 글
[Java.2-5] static 과 final (0) | 2022.04.15 |
---|---|
[Java.2-4] 접근 지정자 (0) | 2022.04.15 |
[Java.2-3] 객체 소멸과 가비지 (0) | 2022.04.15 |
[Java.2-2] 메소드 (0) | 2022.04.15 |
[Java.2-1] 클래스 와 객체 (0) | 2022.04.15 |