Java practice_231227

Choi Suyeon·2024년 1월 3일

Promotion

자동형변환 (promotion, demotion)

  • JVM이 상황에 따라 크기를 변경해주는 것.
// 한줄 주석 입력
/* <여러불 주석
		System.out.println("오늘은 수요일.");
		///////////////////////////////////////////<영역분리
		System.out.println("내일은 목요일.");
*/


package day1227;
class Promotion {
	public static void main(String[] args) {
		
		byte num1 = 10;//-128~127
		byte num2 = 20;
		//byte result = 0;//int의 하위형태끼리(byte&short)의 합은 결과가 int가 되므로(promotion) byte인 result에 할당될 수 없음 
		int result = 0;//promotion을 고려해 int로 변수를 선언.

		result = num1 + num2;
		System.out.println(num1 + "+" + num2 + "=" + result);
		
	}
}

Casting

강제형번환

  • 개발자가 필요한 데이터형으로 일시적 변환을 하는 것.
  • -원본 값은 유지되지만, 상황에 따라 값 손실이 발생할 수 있음.
    -기본형에서 참조형으로 가능, 참조형에서 기본형으로 변환불가능.
    -boolean은 동일형으로만 casting 가능.
package day1227;
class Casting {

	//System.out.println("ased t"); //클래스 필드에서는 프린트를 불러올 수 없음

	public static void main(String[] args) {

		float d = 2023.12F;
		//int i = d; 크기와 값의 종류가 달라 error
		//casting 문법:(변환할 데이터형)값;
		int i = (int)d;
		System.out.println(i + "," + d);

		float f = (float)1.2345678987;//리터럴의 값을 4byte로 변환하여 할당
		System.out.println(f);

		byte num1 = 10;
		byte num2 = 20;
		byte result = 0;
		
		result = (byte)(num1 + num2); //casting을 통해서 연산결과를 result에 할당.
		System.out.println(result);

		char c = '0';
		System.out.println(c + "의 유니코드는 " + (int)c);

		//boolean형은 boolean으로만 casting 가능
		boolean b = true;
		boolean b1 = (boolean)b;//똑같음. 아무의미없음.
		System.out.println(b +","+ b1);
		//int ii = (int)b; 다른 형으로는 캐스팅 불가능

		/*error
		//기본형을 참조형으로, 참조형을 기본형으로 참조 불가능.
		int today = 27;
		String strToday = today;//String은 참조형 데이터, int는 기본형 데이터.
		*/

		/*error
		String strToday = "27";//참조형
		int intToday = strToday;//기본형
		*/
        
	}//main
}//class

Constant

constant

  • 변수를 상수처럼 사용.
package day1227;
class  Constant{

	public static final int MAX_SCORE=100;//기준값
	
	public static void main(String[] args) {

		int myScore = 80;
		//MAX_SCORE = 99; //constant는 값을 변경할 수 없다.

		

		System.out.println("최고점수와 획득점수 간의 차 " + (MAX_SCORE - myScore));

	}
}
  • 다른 클래스에 존재하는 Constant사용.
package day1227;
class UseConstant{
	public static final int WIN_SCORE=0;
	public static void main(String[] args) {
		int myScore = 80;

		System.out.println("최고점수: " + Constant.MAX_SCORE +", "+ WIN_SCORE);
		System.out.println("Byte의 최고값: " + Byte.MAX_VALUE + 
							", 최저값:" + Byte.MIN_VALUE);
	}//main
}//class

데이터형

기본형 데이터형

  • 변수에 상수값을 저장하는 데이터 형
package day1227;
class PrimitiveDataType {
	public static void main(String[] args) {
	///////////////정수 상수를 저장할 수 있는 데이터 형///////////////
	byte a = 10;//byte는 -128 ~ 127
	//byte b = 128; //데이터 형은 저장할 수 있는 범위를 초과하면 error발생
	short b = -32768;
	int c = -2147483638;//21억
	long d = 10;

	//자신이 평생 모으고 싶은 현실적인 자산을 변수에 할당
	int cost = 1000000000;
	long asset = 2147483648L;//리터럴의 크기를 변경하여 상수를 저장하고, 변수에 저장

	System.out.println("byte : " + a + ", short : " + b + ", int : " + c + 
						", long :" + d + "모으고 싶은 자산 : " + cost + asset);
	/////////////char형/////////////
	//char e = 'A'//문자에 해당하는 2byte의 unicode값이 할당
	char e = 65;//A의 유니코드 값 65
	char ff = 48;//'0';
	char g = 44032;//'가';
	char h = '\u0000';//unicode 0
	System.out.println("char : " + e + ff + g + h);

	///////////////실수형/////////////////////
	//float f  = 12.27;//실수 리터럴은 8byte이고, float 형은 4byte이기 때문에 크기가 같지 않아서 값이 할당 될 수 없다.

	float f = 12.27F;//8byte의 리터럴이 4byte로 축소 실수에서 F / f 필수 
	float f_ = 12.27f;

	double k = 2023.12;//2023.12D; d/D 생략 가능
	
	System.out.println("float : " + f +", "+ f_ + " double :" + k);

	///////////////////boolean/////////
	boolean l = true;
	boolean m = false;
	//true / false 이외의 값은 저장 안됨
	//boolean n=0;error
	System.out.println("boolean : " + l +", "+ m);

	}//main
}//class

연습문제

package day1227;
class Exam1227 {
	public static void main(String[] args) {
		//출력 1. 내이름은 홍길동이고, 이니셜은 H, G, D입니다. 태어난 해는 XXXX년으로, 나이는 XX살이다.

		char firstInitial = 'H';
		char secondInitial = 'G';
		char thirdInitial = 'D';
		int birth = 2000;
		System.out.println("출력 1. 내이름은 홍길동이고, 이니셜은 " + firstInitial + ", " + secondInitial + ", " + thirdInitial + "입니다. 태어난 해는 " + birth + "년으로, 나이는 " + (2023-birth) + "살이다.");

		//출력 2. 왼눈 시력은 XX이고, 오른눈 시력은 XX이고 양안 시력 XX.X입니다. //(왼눈 + 오른눈)/2

		double leftVA = 0.2;
		double rightVA = 0.3;
		System.out.println("출력 2. 왼눈 시력은 " + leftVA + "이고, 오른눈 시력은" + rightVA + "이고, 양안 시력은 " + (leftVA + rightVA)/2 + "입니다.");

		//출력 3. 편도차비 xx원 왕복차비는 xx원, 한달 20일 출근하면 월 교통비는 총 xx원입니다.

		int oneWay = 1500;
		System.out.println("출력 3. 편도차비는 " + oneWay + "원이고, 왕복차비는 " + (oneWay*2) + "원이고, 한달 20일 출근하면 월 교통비는 총 " + (oneWay*2)*20 + "원 입니다.");

		//출력 4. 대문자 'A'의 유니코드 값은 65입니다. A+32를 더하면 소문자'a'를 만들 수 있다.
		
		char aUnicode = 'A';
		System.out.println("출력 4. 대문자 'A'의 유니코드 값은 " + (int)aUnicode + "입니다. A+32를 더하면 소문자'" + (char)(aUnicode+32) + "'를 만들 수 있다.");
	}
}
package day1227;
class Exam1227_1 {
	public static final int MONTH_ALLOWANCE = 300000;
	public static final int ALLOWANCE_PER_DAY = 20;
	public static void main(String[] args) {
		//출력 1. 한달 용돈은 x원, 하루 용돈은 20일 기준으로 x원입니다. 하루 지출은 편도 교통비 x원, 왕복교통비 x원 점심 식대 x원으로, 총 x원이 지출됩니다.
		//		한달이 지나면 잔액은 x원입니다.
		int oneWay = 1500;
		int lunchCost = 7500;

		System.out.println("한달 용돈은 " + MONTH_ALLOWANCE + "원, 하루 용돈은" + ALLOWANCE_PER_DAY + "일 기준으로 " + (MONTH_ALLOWANCE/ALLOWANCE_PER_DAY) + "원입니다. 하루 지출은 편도 교통비 " +
							oneWay + "원, 왕복교통비 " + (oneWay*2) + "원, 점심 식대 " + lunchCost + "원으로, 총 " + ((oneWay*2)*20 + (lunchCost*20)) + "원이 지출됩니다. 한달이 지나면 잔액은 " +
							(MONTH_ALLOWANCE - ((oneWay*2)*20 + (lunchCost*20))) + "원입니다.");
		
		//출력 2. API에서 Wrapper class를 찾아보고, 최대값과 최소값을 가지고 있는 Constant가 존재하는지 확인한 후, Constant가 존재한다면 아래와 같이 출력
		//byte 최소값-128, 최대값 127

		//Byte
		//System.out.println("byte 바이트 : " + Byte.BYTES);
		System.out.println("byte 최대값 : " + Byte.MAX_VALUE);
		System.out.println("byte 최소값 : " + Byte.MIN_VALUE);
		//System.out.println("byte 사이즈 : " + Byte.SIZE);
		//System.out.println("byte 타입 : " + Byte.TYPE);

		/*
		//Boolean
		System.out.println("Boolean 거짓 : " + Boolean.FALSE);
		System.out.println("Boolean 참 : " + Boolean.TRUE);
		System.out.println("Boolean 타입 : " + Boolean.TYPE);
		*/

		//char

		//double
		System.out.println("double 최대값 : " + Double.MAX_VALUE);
		System.out.println("double 최소값 : " + Double.MIN_VALUE);

		//float
		System.out.println("float 최대값 : " + Float.MAX_VALUE);
		System.out.println("float 최소값 : " + Float.MIN_VALUE);

	}//main
}//class

0개의 댓글