핵심클래스

2023. 12. 9. 10:25Daily Codig Reminder

3. 중첩 클래스

클래스 안에 또 다른 클래스가 정의되는 것

 

1) member inner 클래스

 

class Outer{

int a =10;

private int b =20;

private int c =30;



class Inner{ //멤버변수 위치

int d =40;



public void print () {

System.out.println(a);// outer 멤버변수 사용
System.out.println(b);
System.out.println(c);
System.out.println(d);
}}
public void info (){
Inner inner = new Inner (); //이너클래스의 사용
inner .print();

}}



public class Ex07_4 {

public statuc void main(String[] args){

Outer outer =new Outer();

outer.info ();

Outer.Inner inner = outer. new Inner ();

inner.print (); 
}}

 

2) local inner 클래스

 

Outer 클래스의 메서드 안에서 정의한 클래스를 의미한다.

 

class Outer2{
int a= 10;
private int b = 20;
static int c =30;

public void info(){
int size=100;
class Inner {//멤버변수 위치
int d =40;

public void print (){
	System.out.println(a);// outer 멤버변수 사용
		System.out.println(b);
		System.out.println(c);
		System.out.println(d);
		System.out.println(size);
	}
	}
    Inner inner = new Inner (); //메서드만 여기서 생성
    inner.print();
    }}
public class Ex07_5 {
public static void main(String[] args) {
		Outer2 outer = new Outer2();
		outer.info();

 

3) static inner 클래스

 

inner 클래스를 정의할 때 ststic 키워드를 사용하는 형태

 

class Outer3{
int a =10;
private int b =20;
static int c = 30;
static class Inner {//멤버변수 위치
ststic int d =40;

public void print () {
	System.out.println(a);// error
		System.out.println(b);// error
		System.out.println(c);
		System.out.println(d);
		
	}
	}
}

public class Ex07_6 {
public static void main(String[] args) {
		Outer3.Inner inner = new Outer3.Inner();
		inner.print();
		
		// TODO Auto-generated method stub

	}

 

4) anonymous Inner 클래스 (익명클래스)

 

직접 클래스명을 지정하지 않으며 단지 인스턴스의 생성솨 메서드 선언만을 정의 한다.

 

interface Flyer{
void fake off();
void fly();
void land();
}
public class Ex07_7{
public static void main(String[] args){
Flyer f = new Flyer(){
@Override
			public void takeoff() {
System.out.println("take off");				
			}
			
			@Override
			public void land() {
System.out.println("land");				
			}
			
			@Override
			public void fly() {
System.out.println("fly");				
			}
		};
        f.fly();
        f.takeoff();
        f.land();

 

 

4. Comparator 인터페이스를 이용한 Array 정렬

 

import java.util.Arrays;
import java.util.Comparator;

class Person {
String name;
int age;
public Person(String name, int age){
super();
this.age=age;
this.name = name;
}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
}
class PersonComp implements Comparator <Person> {
@override
public int copmare (Person o1, Person o2){
//		int result =1;
//		if (o1.age>= o2.age) result = -1;
//		return result;
		int result -1 ;
        if (o1.age>=o2.age) result =1;
        return result;
        }}
        public class Ex07_8{
        	public static void main(String[] args) {
		Person p= new Person("홍길동1", 10);
        Person p1= new Person("홍길동2", 30);
        Person p2= new Person("홍길동3", 40);
        Person p3= new Person("홍길동4", 5);
        
        Person [] parr = {
        p, p1, p2, p3};
        Arrays.sort(parr, new ParsonComp());
        for (Person person : parr) {
        sysout(person);
        }}}

 

8. 자바의 핵심 클래스

 

1. 문자열 생성과 관련된 클래스

 

1) String 클래스

 

public class Ex08_2{
	public static void main(String[] args) {
		String a = "hello"; //01234
		String s = "abcde";
        String s2 = "Hello";
        
        sysout(a+"!!!!!");
        sysout(a);
        sysout("문자열길이:"+s.length());
        System.out.println("문자열 비교: "+s2.equals("Hello"));
		System.out.println("문자열 비교: " + s2.equalsIgnoreCase("HELLO"));
		System.out.println("부분열 출력: "+s.substring(2,4)); // start , end-1
        System.out.println("소문자로 바꿈: "+s.toLowerCase());
        System.out.println("대문자로 바꿈: "+s.toUpperCase());
        System.out.println("인덱스값의 문자출력: "+ s.charAt(3));
        String t = " Hello";
        System.out.println("공백제거: "+ t.trim());
        System.out.println("a에 맞는 인덱스값 출력: "+s.indexOf("a"));
        System.out.println("a에 맞는 인덱스값 출력: "+s.indexOf("x")); // 없으면 -1출력
        System.out.println("시작하는 문자열 비교: "+s.startsWith("abc"));
        System.out.println("끝나는 문자열 비교: "+s.endsWith("cde"));
        String s3 = "홍길동/이순신/유관순";
        String []names = s3.split("/");///중요!!!!!!!!!!!!
        for (int i = 0; i < names.length; i++) {
			System.out.println(names[i]);
		}System.out.println("==================");
		for (String ss : names) {
			System.out.println(ss);
		}
		System.out.println("123문자열로 변환:"+ String.valueOf(123));
		System.out.println(123+"");//문자열로 변환
		String result=123+"";
		System.out.println("3.14 문자열로 변환: "+String.valueOf(3.14));
        System.out.println("true 문자열로 변환: "+String.valueOf(true));
        String formatString= String.format("이름은 %s, 나이는 %d, 키는 %.2f","홍길동",20, 180.2);
        System.out.println(formatString);
        System.out.println(s);
	}
	

}

 

2) StringBuffer 클래스

 

StringBuffer s = new StringBuffer("Hello");
	s.append("World");
	System.out.println(s);
	s.insert(5, "!!! ");
	System.out.println(s);
	s.delete(0, 5);
	System.out.println(s);
	
	String data = s.toString();
	System.out.println(s);
	}

HelloWorld
Hello!!! World
!!! World
!!! World

 

3) + 연결연산자

 

public static void main(String[] args) {

        Test t = new Test();
       t.aaa();
        t.bbb();
        t.ccc();
    }
       public  void ccc() {

        long start = System.currentTimeMillis();
        String x ="";
        for (int i = 0; i < 10000; i++) {
            x = x.concat("hello");
        }
        System.out.println("x.length(): "+ x.length());
        System.out.println("ccc(): "+ (System.currentTimeMillis()-start));
    }

    public  void bbb() {

        long start = System.currentTimeMillis();
        StringBuffer x = new StringBuffer();
        for (int i = 0; i < 10000; i++) {
            x.append("aaaaaaaaaaaaaaaaaaaaaaaa");
        }
        System.out.println("x.length(): "+ x.length());
        System.out.println("bbb(): "+ (System.currentTimeMillis()-start));
    }

    public   void aaa() {

        long start = System.currentTimeMillis();
        String x ="";
        for (int i = 0; i < 10000; i++) {
            x += "aaaaaaaaaaaaaaaaaaaa";
        }
        System.out.println("x.length(): "+ x.length());
        System.out.println("aaa(): "+ (System.currentTimeMillis()-start));
    }

 

4) toString 함수

 

 

int num =10;
//옛날방식
Integer it = new Integer(intnum);// 정수를 명시적으로 wrapper클래스로 형변환 객체 10
		Character c = new Character('a');
		Object[] arr = {it, intnum,3.14,'a',c}; //오토박싱: 점수를 자동을 Integer 클래스로 변환
		//Integer, Integer, Double, character, Character
		
		Integer it0 = (Integer)arr[0];//형변환 10
		Integer it1 = (Integer)arr[1];//형변환 10
		Double it2 = (Double)arr[2];//형변환
		Character it3 = (Character)arr[3];//형변환'
		//옛날방식: 기본형 타입으로 형변환을 해야
		//오토언박싱 : 자동기본형으로 묵시적 형변환
		System.out.println(it0.intValue()+20); //옛날방식 명시적형변환
		System.out.println(it0+20); //오토언박식 : 객체 10 =>자동으로 기본형으로 변환

 

2. Wrapper 클래스

 

public static void main(String[] args) {
		
		String str ="123";
		int a = Integer.parseInt(str);
		
		String str2= "3.14F";
		float b = Float.parseFloat(str2);
		
		String intstr = Integer.toString(123);
		
		String floatString = Float.toString(3.14F);

 

int num=10;
		@SuppressWarnings("deprecation")//경고 제거
		Integer x = new Integer(num); //Wrapper 객체로 변경 (예전방식)
		Integer x1 =10; //Integer 객체로 변환저장 (오토박싱)
		
		//wrapper 을 기본형으로 변경
		int x2 = x1.intValue();//Integer 10을 정수로 명시적 변환(예번방식)
		System.out.println(x2+10);
		System.out.println(x1+10); //int 형변환이 자동이루어짐(오토언박싱)
		
		System.out.println("======================");
		Integer t = new Integer(100); //예전방식
		t=100; //오토박싱
		int result = t.intValue()+1; //예전방식 객체 100 => 정수 100으로 변경
		result = t+1; // t 객체 100 => 정수 100 자동형변환 (오토언박싱)
		System.out.println(result);

 

//오토박싱
//				int num =10;
//				Integer num2= num;
//				//비교연산자 가능
//				System.out.println(num==num2);
//				//언박싱
//				Integer num3 = new Integer(200);
//				int num4 = num3;
//				
//				System.out.println(num3 >100);
		//옛날방
		System.out.println("============");
		int num=10;
		Integer num2 = new Integer(num);
		System.out.println(num==num2.intValue());
		Integer num3 = new Integer(200);
		int num4 = num3.intValue();
		System.out.println(num3.intValue()>100);

	}

 

int i =10;
		double b =10.0;
		Object[]arr = {i, b}; //Integer ,Double
		
		//0,1 데이터 꺼낸 후 연산과 출력
		Integer i1 = (Integer)arr[0];
        int num1 = i1;
        int num2 = i1.intValue();

        Double d1 = (Double)arr[1];
        double num3 = d1;
        double num4 = d1.doubleValue();

        System.out.println(i1+d1);
        System.out.println(num2+num4);
        
        System.out.println((Integer)arr[0] + (Double)arr[1]);
        Object[] arr1= {'a'};
        Character c = (Character)arr1[0];
        System.out.println(c); //오토 언박싱
        System.out.println(c.charValue()); // 명시적

 

3. Random 클래스

 

정수 및 실수 그리고 boolean 타입으 임의의 값인 난수값을 생성할 수 있는 클래스

 

public class Ex08_10 {

	public static void main(String[] args) {
		
		Random random = new Random();
		int num = random.nextInt()+1;
		System.out.println("1 부터 100 사이의 임의의 값:"+num);
		
		float f = random.nextFloat();
		System.out.println("0.0 부터 1.0 사이의 임의의 값:"+f);
		
		boolean b = random.nextBoolean();
		System.out.println("임의의 논리값:"+b);

	}

 

 

4. Calendar 와 Date 클래스

 

Date 클래스안의 많은 메서드가 deprecated되었기 때문에 날짜를 조작 하는 작업은

일반적으로 Calendar 클래스를 사용하고 Date 클래스는 날짜를 씀

 

public static void main(String[] args) {
		Calendar cal = Calendar.getInstance();
		int year = cal.get(Calendar.YEAR);
		int month = cal.get(Calendar.MONTH)+1;
		int day = cal.get(Calendar.DAY_OF_MONTH);
		System.out.println(year +"년"+month +"월"+day+"일");
		
		int hour = cal.get(Calendar.HOUR);
		int minute = cal.get(Calendar.MINUTE);
		int second = cal.get(Calendar.SECOND);
		System.out.println(hour+"시"+minute+"분"+second+"초");
		
		Calendar cal2 = Calendar.getInstance();
		cal2.set(2022, 11, 24);
		Date now = cal2.getTime();
		System.out.println(now);
		cal2.add(Calendar.DATE, 1);
		System.out.println(cal2.getTime());
		cal2.add(Calendar.MONTH, -1);
		System.out.println(cal2.getTime());
		cal2.add(Calendar.DATE, 100);
		System.out.println(cal2.getTime());
		
	}

 

2023년12월8일
2시51분22초
Sat Dec 24 14:51:22 KST 2022
Sun Dec 25 14:51:22 KST 2022
Fri Nov 25 14:51:22 KST 2022
Sun Mar 05 14:51:22 KST 2023

 

public static void main(String[] args) throws ParseException {
		Date d = new Date();
		System.out.println(d);
		
		SimpleDateFormat sdf =
				new SimpleDateFormat("yyyy년 MM월 dd일 HH:mm:ss ");
		String mesg = sdf.format(d);
		System.out.println(mesg);
		
		SimpleDateFormat sdf2 =
				new SimpleDateFormat("yyyy년 MM월 dd일");
		String mesg2 = sdf.format(d);
		System.out.println(mesg2);
		//String=> Date
		Date d2 = sdf2.parse("2020년 10월 16일");
		System.out.println(d2);
		

	}

 

public static void main(String[] args) throws ParseException {
		Date d = new Date();
		System.out.println(d);
		
		SimpleDateFormat sdf =
				new SimpleDateFormat("yyyy년 MM월 dd일 HH:mm:ss ");
		String mesg = sdf.format(d);
		System.out.println(mesg);
		
		SimpleDateFormat sdf2 =
				new SimpleDateFormat("yyyy년 MM월 dd일");
		String mesg2 = sdf.format(d);
		System.out.println(mesg2);
		//String=> Date
		Date d2 = sdf2.parse("2020년 10월 16일");
		System.out.println(d2);
		

	}

 

Fri Dec 08 14:59:10 KST 2023
2023 년 12월 08일 14:59:10

Fri Dec 08 15:03:53 KST 2023
2023년 12월 08일 15:03:53
2023년 12월 08일 15:03:53
Fri Oct 16 00:00:00 KST 2020

 

5. SimpleDateFormat 클래스

 

public static void main(String[] args) throws Exception{
		
		//1.숫자 => String : format
		
		DecimalFormat df = new DecimalFormat("$###,###,###");
		String mesg = df.format(987654321);
		System.out.println(mesg);
		
		//2. String =>숫자 :parse
		DecimalFormat df2 = new DecimalFormat("###,###");
		Number xxx = df2.parse("987,654");
		System.out.println(xxx);
//		int result2 = xxx +100; //직접 int 로 바꿔줘야
		int result = xxx.intValue()+100;
		
		System.out.println(result);

	}

 

$987,654,321
987654
987754

 

6. enum 클래스

 

public void check (int num) {//멤버함수
		// byte, short, int, char, String, enum
				switch (num) {
				case 1: System.out.println("1");
					
					break;
				case 2: System.out.println("2");
				break;
				case 3: System.out.println("3");
				break;

				default: System.out.println("default");
					break;
				}
	}
	public static void main(String[] args) {
//		//check 함수에 1 전송 test
//		EnumTest1 t = new EnumTest1(); //객체생성해서 참조하기
//		t.check(1);
		
		EnumTest1 e = new EnumTest1();
		e.check(1);
		e.check(2);
		e.check(3);
		e.check(100); //동작 금지가 안됨
		//enum은 상수 대체 

	}

 

 

public static final int SELECT =1;
	public static final int INCERT =2;
	public static final int DELETE =3;
	
	public static void check (int num) {//멤버함수
		// byte, short, int, char, String, enum
				switch (num) {
				case SELECT: System.out.println("1");
					
					break;
				case INCERT: System.out.println("2");
				break;
				case DELETE: System.out.println("3");
				break;
				default: System.out.println("default");
					break;
				}
	}
	public static void main(String[] args) {

		//enum은 상수 대체 
		check(SELECT);
		check(INCERT);
		check(DELETE);
		check(100);

	}

 

 

public class EnumTest3 {
	//멤버변수 위치에 선언
	//public enum 차입{상수값, 상수값2,상수값3}
	public enum Color {BLUE, RED, YELLOW}// static final

	
	public static void main(String[] args) {
//		System.out.println(Color.BLUE);
		//타입. 상수값
//		Color c = Color.BLUE;
//		Color c2 = Color.RED;
//		Color c3 = Color.YELLOW;
//		
//		System.out.println(c);
//		System.out.println(c2);
//		System.out.println(c3);
//		
		Color []xx = Color.values();
		for (Color p : xx) {
			System.out.println(p.name()+"\t"+p.ordinal());
		}
		
	}

 

 

public class EnumTest4 {
	
	public enum DML {SELECT, INSERT, DELETE}// static final

	public  void check(DML num) {
		switch (num) {
		case SELECT:System.out.println("SELECT");
			
			break;
		case INSERT:System.out.println("INSERT");
		
		break;
case DELETE:System.out.println("DELETE");
		
		break;
		default: System.out.println("default");
			break;
		}
	}
	public static void main(String[] args) {
//
//		check(DML.INSERT);
//		check(DML.SELECT);
//		check(DML.DELETE);
////		check(99); //의미없는 숫자지정 불가능
		
		EnumTest4 test = new EnumTest4();
//static 없애면 
        test.check(DML.SELECT);
        test.check(DML.INSERT);
        test.check(DML.DELETE);
//        test.check(99);
		}
		
	}

 

 

import java.text.NumberFormat;
import java.text.ParseException;

public class NumberFormatTest {

	public static void main(String[] args)throws ParseException {
		
		NumberFormat nf = NumberFormat.getCurrencyInstance();
		String mesg = nf.format(987654321);
		System.out.println(mesg);
		
		Number num = nf.parse("₩987,654,321");
		System.out.println(num.intValue()+1);

	}
}

 

₩987,654,321
987654322

 

8. Scanner API

 

public static void main(String[] args) {
		Scanner scan = new Scanner (System.in);
//		String word =scan.next();//한단어
//		System.out.println(word);
		
//		System.out.println("이름을 입력하시오.");
//		String name = scan.nextLine();
//		System.out.println("이름: "+name);
		
//		System.out.println("나이를 입력하시오.");
//		int age = scan.nextInt();
//		System.out.println("나이: "+age);
		

//		System.out.println("체중을 입력하시오.");
//		Double weight = scan.nextDouble();
//		System.out.println("체중: "+weight);
		
		System.out.println("결혼 여부를 입력하시오");
		boolean isMarried = scan.nextBoolean();
		System.out.println("결혼여부: "+isMarried);

 

9. StringTokenizer API!!!!!!!!!!!!!!!!!!!!!!!!

 

문자열을 특정 구분자로 분리할 수 있는 클래스로서
String 클 래스의 split() 메서드와 매우 비슷한 기능을 제공한다.

 

public class StringTokenizerTest {

	public static void main(String[] args) {
		String s= "홍길동, 이순신, 유관순";
		StringTokenizer t = new StringTokenizer(s);
		String data= "";
		while (t.hasMoreElements()) { //기억하기!!!!!!!!!!
			//토큰이 있는 경우
			data+=t.nextToken();
//			t.nextToken(); 하나만 사용하자
//			Object object = (Object) t.nextElement();
			
			
		}System.out.print(data+"\t");
		System.out.println("===============");
		
		String ss= "홍길동, 이순신, 유관순";
		StringTokenizer tt = new StringTokenizer(ss,",");
		while (tt.countTokens()!=0) {
			System.out.println(tt.nextToken());
		}
		//3. 
		String data2 = "aa/bb/cc,dd/ee/xx,kk/yy/zz";
		StringTokenizer st = new StringTokenizer(data2,"/,");
		
		while (st.hasMoreElements()) {
			System.out.println(st.nextToken());
			
		}
	}

'Daily Codig Reminder' 카테고리의 다른 글

리스트, 맵  (0) 2023.12.12
예외처리 와 제네릭컬렉션  (1) 2023.12.11
다형성  (1) 2023.12.07
static, 클래스들의 관계  (1) 2023.12.06
메소드  (1) 2023.12.06