Java Development Kit Version 17 API Specification
컴파일(자바 : java.c)
⇒ 기계어 변환 ⇒ 기계어자바 가상 머신(JVM)
이 있는 모든 시스템에서 실행할 수 있음객체지향 프로그래밍 언어
임javac Hello. java
를 하면 Hello.class가 생김java Hello
를 누르면 자바 파일 실행 결과 창 뜸jre
가 없으면 실행이 안됨클래스
로 구성됨package javastudy;
대문자
로 시작함main()
메서드 : 모든 자바 애플리케이션의 시작점이자 진입점임소문자
로 시작함세미콜론(;)
으로 끝나야 함메모리 위치의 이름
자료형 변수명, 변수명; // 같은 자료형이면 ,로 여러 개의 변수 동시에 선언 가능
자료형 변수명 = 값;
int a= 20, b=30;
System.out.print(a +""+ b); //가능
System.out.print(a, b); //불가
클래스 내
에서 어디서든 접근 가능final
키워드고정 시켜 버림
한 번 초기화되면 값을 변경 불가
주로 변하지 않는 값이나 설정 값에 사용
final int speed = 20;
메서드나 클래스에 적용될 때
메서드에 적용될 때:
final
로 선언된 메서드는 하위 클래스에서 오버라이드(재정의)할 수 없다.
즉, 하위 클래스에서 해당 메서드를 변경하거나 재정의할 수 없다.
메서드의 동작을 불변하게 유지하고 싶을 때 사용
상위 클래스의 메서드를 하위 클래스에서 재정의하지 못하도록 제한하는 역할
클래스에 적용될 때:
final
로 선언된 클래스는 상속될 수 없는 클래스
다른 클래스에서 이 클래스를 상속하여 확장할 수 없다.
클래스의 구현을 변경하지 못하도록 제한하는 역할
보안, 안정성, 성능 등을 고려하여 확장을 막고자 할 때 사용
소문자
, 그 이후 새로운 단어들은 대문자
로 시작int _studentNameNumber = 10;
int num = 1;
상수 풀(constant pool)
에 자동 로딩final double PI = 3.1415928168;
final int MAX_SIZE = 100;
final 키워드
를 사용하면 상수를 만들어 쓸 수 있다.byte(1byte) - short(2byte) - int(4byte) 기본 - long(8byte)
byte(1) - short(2) - int(4) - long(8) //정수 - float(4) - double(8)
1byte = 8bit
255까지package javastudy;
public class Ex01_VariableType
{
public static void main(String[] args)
{
// 1. 숫자형
byte num1 = 1; short num2 = 1; int num3 = 1; //기본 자료형 long num4 = 1;
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(num4);
}
}
%d
package javastudy;
public class Ex01_VariableType
{
public static void main(String[] args)
{
// 전부 사람이 볼 수 있는 A로 바꿔서 출력함
char ch1='A';
char ch2=65;
char ch3 = 0x41;
char ch4 = 0b00000001000001;
System.out.println(ch1);
System.out.println(ch2);
System.out.println(ch3);
System.out.println(ch4);
// 3. 논리형 : 어떤 변수의 참, 거짓의 값을 나타내는데 사용 boolean/1byte
boolean check1 = true;
boolean check2 = false;
boolean check3 = (1<2);
System.out.println(check3);
}
}
%c
package javastudy;
public class Ex01_VariableType
{
public static void main(String[] args)
{
boolean check1 = true;
boolean check2 = false;
boolean check3 = (1<2);
System.out.println(check3);
}
}
double, float
사용캐스팅
실수는 정확한 값이 아니고, 수식에 의해 저장되는 근사치
예제
package javastudy;
public class DoubleError1
{
public static void main(String[] args)
{
double num1 = 1.0000001;
System.out.println(num1);
double num2 = 2.0000001;
System.out.println(num2);
double result = num1 + num2;
System.out.println(result);
double dNum = 0.0;
for(int i=0; i<1000; i=i+1) {
dNum = dNum + 0.1;
}
System.out.println(dNum); //실수를 가지고 연산하는 건 컴퓨터가 오차가 생김
// 실수는 정확한 값이 아니고, 수식에 의해 저장되는 근사치
}
}
float : 0.0f, double:0.0d
float pi = 12.25f; (뒤에 f를 붙여주는 게 가독성이 좋음)
final double PI = 3.14;
int r = 20;
int result = (int)(r*r*PI); // int로 캐스팅 PI가 더 크기에 result에 맞춰서 int 타입으로 캐스팅
System.out.println(result);
고정 소수점
부동 소수점과는 달리 소수점 위치가 고정되어 있는 표현 방식
소수의 표현 범위나 정밀도를 제어할 수 있다는 장점
큰 수나 작은 수를 표현하는 데는 한계
예시
코드
float floatValue = 1.234f;
System.out.println(floatValue); // 출력: 1.234
부동 소수점
부동 소수점은 소수점을 고정된 위치가 아니라 "부동"시키며, 실수를 정수 부분과 소수 부분으로 분리하여 표현
0.1 ⇒ 1.0(가수부) X (지수부)
EX.
예시
코드
import java.math.BigDecimal;
BigDecimal fixedValue = new BigDecimal("0.75");
System.out.println(fixedValue); // 출력: 0.75
package javastudy;
public class Datatype01
{
public static void main(String[] args)
{
int a = 10;
short s = 2;
byte b = 6;
long l = 125362133223L;
System.out.println(a);
System.out.println(s);
System.out.println(b);
System.out.println(l);
}
}
Q. 컴퓨터에서 데이터를 어떻게 메모리에 저장될까?
💡 A. `int num = 1;` 1. 자료형 int 메모리에 **주소 4개를 확보**해서 공간을 비운 후 2. 십진수 1을 **이진수로 변경**해서 이 공간에 저장 3. 이 공간(주소)을 **변수 num에 기억**시킨다.System.out.println(num);
1. num 변수의 값은 어디..?(메모리 어디에 적어뒀는지 찾아보자!)
2. 찾아낸 메모리의 시작 위치로 찾아감
3. num 변수는 int형이니까 4바이트를 읽는다.
4. int형이니까 10진수로 바꿔서 숫자로 알려준다.
%d
: 정수를 10진수로 출력%o
: 정수를 8진수로 출력%x
또는 %X
: 정수를 16진수로 출력 (소문자 또는 대문자)%f
: 실수를 소수점 형식으로 출력%e
또는 %E
: 실수를 지수 형식으로 출력 (소문자 또는 대문자)%s
: 문자열을 출력%c
: 문자를 출력%b
: 논리값을 출력 (true 또는 false)%n
: 줄바꿈 문자를 출력"%+,d\n”
: 부호도 보이고 자동으로 ,도 넣어주는 형식 지정자class Main {
public static void main(String[] args) {
System.out.printf("%15s%,15d%+,15d\n", "Seoul", 10312545, 91375);
System.out.printf("%15s%,15d%+,15d\n", "Pusan", 3567910, 5868);
System.out.printf("%15s%,15d%+,15d\n", "Incheon", 2758296, 64888);
System.out.printf("%15s%,15d%+,15d\n", "Daegu", 2511676, 17230);
System.out.printf("%15s%,15d%+,15d\n", "Gwangju", 1454636, 29774);
}
}
package ch2;
class PrintfEx1 {
public static void main(String[] args) {
byte b = 1;
short s = 2;
char c = 'A';
int finger = 10;
long big = 100_000_000_000L;
long hex = 0xFFFF_FFFF_FFFF_FFFFL ; // 0x는 16진수
int octNum = 010;
int hexNum = 0x10; // 16
int binNum = 0b10; // 0b : 2진수
String name = "ju";
System.out.printf("b=%d%n", b);
System.out.printf("s=%d%n", s);
System.out.printf("c=%c, %d %n", c, (int)c); // (int) c : 정수 숫자로 바꿔서 넣어라
System.out.printf("finger=[%5d]%n", finger); // [%5d] 5자리로 표현하라 => 즉, 공백 3, 숫자 2
System.out.printf("finger=[%-5d]%n", finger); // [%-5d] 뒤에 공백 3개
System.out.printf("finger=[%05d]%n", finger); // [%05d] 공백 대신 0으로 채움, -를 하면 숫자가 꼬임
System.out.printf("big=%d%n", big);
System.out.printf("hex=%#x%n", hex); // %#x는 부호 없는 정수 값을 16진수로 표현하고, 접두사 "0x"를 함께 출력
System.out.printf("octNum=%o, %d%n", octNum, octNum); //%o 부호 없는 정수 값을 8진수로 표현하는데 사용
System.out.printf("hexNum=%x, %d%n", hexNum, hexNum); // %x 부호 없는 정수 값을 16진수로 표현
System.out.printf("binNum=%s, %d%n", Integer.toBinaryString(binNum), binNum);
System.out.printf("name : %s%n", name); //%s는 문자열 출력
}
}
ctrl + n
선택시 class 등 선택 가능ctrl + shift + /
하면 전체 주석 처리ctrl + space
System.out.println(); 자동완성ctrl+alt
에 방향키를 누르면 그 방향에 있는 걸 복사ctrl + shift + F
자동 줄바꿈package javastudy;
import java.util.Scanner; //입력 가능하게 만들어주는 것
public class FinalUse
{
public static void main(String[] args)
{
final int MAX_NUM = 100;
final int MIN_NUM;
MIN_NUM=60;
Scanner input = new Scanner(System.in); //입력을 받아서 작업할 수 있는 공간을 받음
System.out.println("학생 점수 입력:");
int myScore = input.nextInt(); //정수로 받아서 저장함
if(myScore < MIN_NUM) {
System.out.println("넌 F야!");
}
else {
System.out.println("통과!");
}
}
}
package javastudy.day02;
import java.lang.System;
public class Calculator
{
public static void main(String[] args) {
int x = 1;
int y = 2;
int result = x+y;
System.out.printf("x = %d y= %d result = %d",x, y, result);
boolean result1;
result1 = (x==20);
System.out.println(result1);
result1 = (x!=20);
System.out.println(result1);
result1=(x>20);
System.out.println(result1);
result1=(x>0 && x<20);
System.out.println(result1);
result1=(x<0 ||x>200);
System.out.println(result1);
}
}
byte < short , char < int < long <float <double
자동타입에서 예외상황
* 1. 자동 타입 변환 : 자동으로 타입 변환이 일어난다. 값의 허용범위가 작은 타입이 허용범위가 큰타입으로 내입될 때 발생한다. -
* - 기본타입의 허용범위 순서 : byte < short , char < int < long <float <double
* - 예) byte byteValue = 10;
* int intValue = byteValue;
* //자동타입 변환, 작은게 큰거 안으로 들어가기 때문이다.
*
*/
public class CastingEx
{
public static void main(String[] args)
{
long longValue = 50000000000L;
float floatValue = longValue; //long이 float보다 작기 때문에 자동 형변환 가능
double doubleValue = longValue; //long이 double보다 작기 때문에 자동 형변환 가능
System.out.println(longValue+" "+ floatValue + " " + doubleValue);
char charValue = 'A';
int exchar = charValue;
System.out.println(exchar);
byte byteValue = 65;
/*
* char charValue1 = byteValue;
* - 자동타입에서 예외상황 : char는 허용범위는 음수를 포함하지 않고, byte타입은 음수를 포함하기 때문이다.
*/
}
}
()
작은 허용 범위 타입 = (작은 허용 범위 타입) 큰 허용범위 타입
package javastudy.day02;
/*2. 강제 타입 변환 : 큰 허용 범위 타입은 작은 허용 범위 타입으로 자동 타입 변환이 안된다.
* 타입 캐스팅 연산자 : ()
*
* 작은 허용 범위 타입 = (작은 허용 범위 타입) 큰 허용범위 타입
* int => byte
* long => int
* int => char
* 실수 => 정수
*/
public class CastingEx1
{
public static void main(String[] args)
{
int var1 = 128;
byte var2 = (byte) var1;
//128은 넣을 수 없는 값이라 -128로 출력이 됨 허용 byte의 허용 범위 : -128~127
// 허용 범위 외에는 허용 범위 숫자로 바뀜
System.out.println(var2);
long var3 = 300;
int var4 = (int)var3;
System.out.println(var4);
int var5 = 65;
char var6 = (char)var5;
// 문자로 바뀜
System.out.println(var6);
double var7 = 3.14;
int var8 = (int)var7;
// 소수부는 날라감
System.out.println(var8);
}
}
byte value = Byte.parseByte(str);
short value1 = Short.parseShort(str1);
String.valueOf( 기본타입값);
package javastudy.day02;
/*
* String => byte String => short String => int String => long String => float
* String => double String => boolean
*/
public class PrimitiveStringCoversionEx
{
public static void main(String[] args)
{
String str = "10";
byte value = Byte.parseByte(str);
System.out.println((str + 10) + " " + (value + 10)); // 1010 20
String str1 = "200";
short value1 = Short.parseShort(str1);
System.out.println((str1 + 10) + " " + (value1 + 10)); // 20010 210
String str2 = "3000";
int value2 = Integer.parseInt(str2);
System.out.println((str2 + 10) + " " + (value2 + 10)); //300010 3010
String str3 = "400000000";
long value3 = Long.parseLong(str3);
System.out.println((str3 + 10) + " " + (value3 + 10)); //40000000010 400000010
String str4 = "12.345";
float value4 = Float.parseFloat(str4);
System.out.println((str4 + 10) + " " + (value4 + 10)); //12.34510 22.345001
String str5 = "12.345";
double value5 = Double.parseDouble(str5);
System.out.println((str5 + 10)+ " " + (value5 + 10)); //12.34510 22.345
String str6 = "true";
boolean value6 = Boolean.parseBoolean(str6);
System.out.println((str6 + 10) + " " + (value6)); //true10 true
// 반대로 기본타입의 값을 문자열로 변경하는 경우, String.valueOf( 기본타입값);
// String str7 = String.valueOf(기본타입값);
String str7 = String.valueOf(value6);
String str8 = String.valueOf(3.14);
System.out.println(str8 + 10 + "문자열로 변환되었습니다.");
}
}
// 1번 문제
class Main {
public static void main(String[] args) {
System.out.println("My name is Hong");
}
}
// 2번 문제
class Main {
public static void main(String[] args) {
System.out.print("My hometown\nFlowering mountain");
}
}
//3번 문제
class Main {
public static void main(String[] args) {
System.out.println("TTTTTTTTTT");
System.out.println("TTTTTTTTTT");
System.out.printf("%6s\n", "TT");
System.out.printf("%6s\n", "TT");
System.out.printf("%6s", "TT");
}
}
//4번 문제
class Main {
public static void main(String[] args) {
System.out.printf("%s%3d\n", "kor", 90);
System.out.printf("%s%3d\n", "mat", 80);
System.out.printf("%s%4d\n", "eng", 100);
System.out.printf("%s%4d\n", "sum", 270);
}
}
//5번 문제
class Main {
public static void main(String[] args) {
System.out.printf("%15s%,15d%+,15d\n", "Seoul", 10312545, 91375);
System.out.printf("%15s%,15d%+,15d\n", "Pusan", 3567910, 5868);
System.out.printf("%15s%,15d%+,15d\n", "Incheon", 2758296, 64888);
System.out.printf("%15s%,15d%+,15d\n", "Daegu", 2511676, 17230);
System.out.printf("%15s%,15d%+,15d\n", "Gwangju", 1454636, 29774);
}
}
// 1. 연습문제 1
class Main{
public static void main(String[] args){
int a = 10;
char b = 65;
System.out.printf("a = %d\nb = %c",a, b);
}
}
//2. 자가진단 1
class Main {
public static void main(String[] args) {
int a = -100;
System.out.printf("%d", a);
}
}
//3. 연습문제 2
class Main {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.printf("%d %d",b, a);
}
}
//4. 자가진단 2
class Main {
public static void main(String[] args) {
int a = -1;
int b = 100;
System.out.printf("%d\n%d", a, b);
}
}
//5. 연습문제 3
class Main {
public static void main(String[] args) {
int numberA = 10;
int numberB = 20;
System.out.printf("%d + %d = %d\n", numberA, numberB, numberA+numberB);
numberA = 30;
numberB = 40;
System.out.printf("%d + %d = %d\n", numberA, numberB, numberA+numberB);
}
}
// 6. 자가진단 3
class Main {
public static void main(String[] args) {
int numberA = 55;
int numberB = 10;
System.out.printf("%d - %d = %d\n", numberA, numberB, numberA-numberB);
numberA = 2008;
numberB = 1999;
System.out.printf("%d - %d = %d\n", numberA, numberB, numberA-numberB);
}
}
// 7. 연습문제 4
class Main{
public static void main(String[] args){
final double PI = 3.140000;
int radius = 5;
int a = 2;
double circumference = radius* 2 * PI;
double area = radius * radius * PI;
System.out.printf("원주 = %d * %d * %f = %f\n", radius, a, PI, circumference);
System.out.printf("넓이 = %d * %d * %f = %f", radius, radius, PI, area);
}
}
// 8. 자가진단4
class Main{
public static void main(String[] args){
int weight = 49;
double percentage = 0.268300;
System.out.printf("%d * %f = %f", weight, percentage, weight*percentage);
}
}
9. 연습문제 5
class Main{
public static void main(String[] args){
System.out.println("전체 7자리로 맞추고 소수 4자리까지 출력");
System.out.printf("x = %7.4f\n", 1.234); //7자리.소수자리
System.out.printf("y = %7.4f\n", 10.3459);
System.out.println();
System.out.println("소수 2자리까지 출력(반올림)");
System.out.printf("x = %.2f\n", 1.234); //7자리.소수자리
System.out.printf("y = %.2f", 10.3459);
}
}
10. 자가진단 5
class Main {
public static void main(String[] args) {
double yd = 91.44;
double in = 2.54;
System.out.printf(" 2.1yd = %.1fcm\n", 2.1*yd);
System.out.printf("10.5in = %.1fcm", 10.5*in);
}
오늘은 자바 문법 했다. 학교에서 지겹게 하던거 보니까 반갑기도 하고 신기했다.
하지만 자바은 뒤에 갈 수록 어려워져서 빠르게 논리적인 사고를 할려면 많이 문제 풀어봐야 할 듯
정올도 열심히 사용해보자 기초하기에는 제일 적절한 듯.. 다음주부터는 알고리즘이랑 CS도 다시 공부
시작해야겠다.. CS는 정보처리기사 실기 준비할 겸해서 미리미리 하면 될 듯
주말에는 아르바이트 풀타임 해서 힘들지만 5달만 힘내보자!!!