- 자바에서 메소드는 클래스 바깥에 작성할 수 없음
- 기본타입 vs 레퍼런스 타입 : 기본타입은 메모리 공간에 변수 공간이 생기면서 값이 바로 같이 대입되는 반면, 레퍼런스 타입은 메모리에 값이 바로 저장되는게 아니라 주소값이 저장되고 그 주소값으로 찾아 들어가야 실제 값이 저장되어 있는 형식
- 문자타입 : char(2바이트)
- 정수타입: byte(1바이트, -128-127), short(2바이트, -32768-32767), int(4바이트), long(8바이트, 리터럴 뒤에 L붙여야함) / 정수의 기본 컴파일 타입은 int
- 실수타입 : float(4바이트, 리터럴 뒤에 f붙이기), double(8바이트) / 실수 기본 컴팡리 타입은 double
- 문자열 연결에는 더하기 연산자 사용이 가능함
- 변수의 선언과 할당(초기화) 구분하기 (선언과 할당 동시에 할수도 있고 따로 할수도 있음)
- 정수 리터럴 : 15(10진수) 015(0으로 시작하면 8진수, 십진수로 13) 0x15(0x으로 시작하면 16진수, 십진수로 21), ob0101(0b로 시작하면 2진수, 십진수로 5)
- 정수 리터럴은 int 형으로, 실수 리터럴은 모두 더블로 컴파일된다
- 문자 리터럴 : 단일 인용부호로 표현하거나 \u다음에 문자의 유니코드 값(16진수)사용하여 표현
- char c = \u0041; 은 char c = 'A'와 같음 (0041이 A의 유니코드값)
- 특수문자 리터럴 : \(백슬래시) 뒤에 특수기호를 붙여서 표현, 이스케이프 시퀀스라고 부름
- 꼭 기억할 건 \n(줄바꿈) , \", \', \\
- null 리터럴 : 기본타입에 사용할 수 없고 객체 레퍼런스에만 대입하여 사용 (String 등에 사용 가능)
- 문자열 리터럴 : " " 부호로 묶어 표현
- 숫자에 _ 허용됨 , 단 리터럴 끝, 소수점 앞뒤, L(F)앞에는 사용 불가
- 0x중간이나 끝에 사용 불가
- var 키워드를 사용하여 변수 타입을 생략하고 선언 가능 : 지역 변수의 선언에만 사용, 변수 선언문에 반드시 초기값을 지정해야함(정수는 int로 실수는 double 타입으로 결정)
- 상수 : 상수 이름은 모든 글자, final 키워드 사용, 선언 시 초기값 지정, 실행 중 값 변경 불가
- 자동 타입 변환 : 치환문(=)이나 수식(계산식)내에서 피연산자들의 타입이 일치하지 않을 때작은 타입-> 큰 타입은 컴파일러에 의해 자동으로 변환됨
- 강제 타입 변환(캐스팅) : 큰 타입-> 작은 타입은 자동으로 변환되지 않음(ex)byte b = 300;) => (변환할 형)변환할 변수 로 강제형변환 가능 / 값 손실 우려 있음(소수점 밑 값 다 버림)
- 특수문자 리터럴, 정수(8진수 16진수 등 포함) 모두 기본 타입의 리터럴, String은 기본타입 리터럴 아님
- Scanner 클래스 ; System.in 에게 키를 읽게 하고, 읽은 바이트를 다양한 타입으로 변환하여 자바 응용 프로그램에 리턴하는 역할
-
‘\t’(탭), ‘\f’, ‘\r’, ‘ ’, ‘\n’(줄바꿈) 의 공백문자 단위로 읽음
<초 단위 정수 입력받아 몇 시간 몇 분 몇 초인지 출력하는 프로그램>
package 객지프;
import java.util.Scanner;
//몇시간 몇분 몇초 , 1시간은 3600초 1분은 60초
public class ch3_1 {
public static void main(String[] args) {
Scanner a = new Scanner(System.in);
System.out.println("초 단위의 정수를 입력하세요");
int sec = a.nextInt();
int time = sec / 3600; //sec/60/60 (초를 60으로 나눈 몫을 60으로 나눈 몫)
int min = (sec%3600)/60; //(sec/60)%60 초를 60으로 나눈 몫(분이 될 수 있는 것들)을 60으로 나눈 나머지(시간이 안되는 것들)
int secc = sec%3600%60; //sec%60 : 1분으로만 나눠져도 분으로 넘어가서 !!
System.out.println(time +" "+min+" "+secc); //변수 세개 출력하고 싶다고 연달아 띄어쓰기로만 구분하면 에러
}
}
- 증감연산 : a++ vs ++a : a를 반환하고 1 증가 vs a를 1 증가하고 증가된 값 반환
- 대입연산
- System.out.prinf("평균은 %.3f" , avr); -> 소수점 n째자리까지만 출력하는 법 ! 쓸 일은 없겟지만,,
<주의점>
- scanner 쓰면 close 해주기 - 메인 메소드 안 맨 마지막 문장에
- switch문 -> switch(기준값){ case : 실행문 ; break; .. default: 실행문} 형태 ! break잊지말기 / 정수,문자,문자열 리터럴을 값으로 사용 가능
- 클래스 만들때 꼭 main메소드 자동으로 만드는거 체크하기
- 시험날 가면 소스파일 넣을 폴더 만들어서 빼두기 -> 연습 하고가기
- 문자열 비교는 == 아니고 .equals !!!
- 무한루프 쓰라고 하면 조건식에 true 써야함
- 틀려도 당황하지 말기
- 빨리 하려고 하면 타이핑 버벅거리게 돼서 더 오래걸림 => 차분히 !!
- do-while 문 : do{ 실행문} while(조건);
- 구구단 출력시에 탭으로 공백 구분하면 가지런하게 나옴
- 삼항 연산자 : condition ? op2 : op3 =>출력문이나 변수에 넣어서 씀
- xor연산은 피연산자 두개가 같을때만 false
- 중첩반복 헷갈리면 안의 반복문(출력 첫줄 한줄) 먼저 작성 !
//do-while문으로 0 전까지 입력된 정수 평균 구하기
public class hw01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("정수 입력 후 마지막에 0 입력하세요");
int i = sc.nextInt();
int add = 0;
int num=0;
do {
// i = sc.nextInt();
add += i;
num +=1;
i = sc.nextInt();
}while(i!=0);
System.out.println("개수는 "+num +" "+"평균은 "+((double)add/num));
sc.close();
}
}
<do-while문 주의점> ! 작업문 실행 후 조건식을 따진다는 점 유의하기 !
최초1회 무조건 실행 -> 조건문 참이면 또 실행->그 실행값으로 조건문 판단해서 참이면 또 실행 >.. 의 패턴임
그렇기에 i 가 0일때가 num에 포함되지 않게 하려면 새 i를 마지막에 입력 받아야함(올바른 조건문 동작을 위해)
같은 문제 while문 버전
exit 입력해야 종료되는 프로그램 ! 특정 값 나올때까지 계속 반복되는 프로그램은 무한루프 떠올리기
'언어 공부 내용 정리 > Java' 카테고리의 다른 글
객지프 기말대비 정리 (5장) (0) | 2023.07.15 |
---|---|
객지프 기말대비 정리 (3-4장) (0) | 2023.07.15 |
자바 BufferedReader BufferedWriter : 빠른 입출력 (ing) (0) | 2023.06.28 |
자바 예외처리 (0) | 2023.06.17 |
자바 컴파일과 클래스, API (0) | 2023.06.17 |