2021.02.02 국비 교육 21일차
[TOC]
중첩클래스
inner 클래스
package com.test;
class Outer{
int a = 10;
private int b = 20;
static int c = 30;
class Inner {
int d = 40;
public void print() {
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}
public void info() {
Inner inner = new Inner(); // 내부에서 inner 객체 생성
inner.print();
}
}
public class Ex07_4 {
public static void main(String[] args) {
Outer outer = new Outer();
outer.info();
System.out.println("==============");
Outer outer1 = new Outer();
Outer.Inner inner = outer1.new Inner(); // 외부에서 inner객체 생성
inner.print();
}
}
anoymous inner 클래스
- 이름이 없는 Inner 클래스
- 일반적으로 인터페이스 또는 추상클래스를 구현하는 클래스를 이용할 때 주로 사용
package com.test2;
interface Flyer{
public abstract void takeOff();
public abstract void fly();
public void land();
}
public class Ex07_7 {
public static void main(String[] args) {
Flyer f = new Flyer(){
public void fly() {
System.out.println("fly");
}
@Override
public void takeOff() {
System.out.println("takeOff");
}
@Override
public void land() {
System.out.println("land");
}
};
f.fly();
f.takeOff();
f.land();
}
}
Comparator
- 배열에 저장된 클래스의 특정 변수값으로 정렬
package com.test3;
import java.util.Arrays;
import java.util.Comparator;
class Person{
String anme;
int age;
public Person(String anme, int age) {
this.anme = anme;
this.age = age;
}
@Override
public String toString() {
return "Person [anme=" + anme + ", age=" + age + "]";
}
}
class PersonComp implements Comparator<Person>{
@Override
public int compare(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("홍길동", 20);
Person p2 = new Person("이순신", 44);
Person p3 = new Person("유관순", 18);
Person p4 = new Person("강감찬", 66);
Person [] ps = {p, p2, p3, p4};
Arrays.sort(ps, new PersonComp());
for(Person person : ps) {
System.out.println(person);
}
}
}
DecimalFormat
- 문자열을 지정된 형태로 변환
package com.test3;
import java.text.DecimalFormat;
public class DecimalFormatTest {
public static void main(String[] args) throws Exception {
//숫자 --> String : format
DecimalFormat df = new DecimalFormat("$###, ###, ###");
String mesg = df.format(987654321);//long타입 값을 지정
System.out.println(mesg);
}
}
문자열 나누기
package com.test3;
public class Ex08_2 {
public static void main(String[] args) {
String s = "abcde";
String s2 = "Hello";
String s3 = "홍길동/유관순/이순신";
String[] names = s3.split("/");
for(int i =0;i<names.length;i++) {
System.out.println(names[i]);
}
//문자열로 바꾸기
System.out.println(123+"");
System.out.println(String.valueOf(123));
//두개 같은방법
}
}
StringTokenizer
- 구분값에 따라 문자열 나눔
package com.test3;
import java.util.StringTokenizer;
public class StringTokenizerTest {
public static void main(String[] args) {
// "aa/bb/cc" ==> 구분자로 값을 반환
String data = "aa/bb/cc,dd/ee/xx,kk/yy/zz";
StringTokenizer st = new StringTokenizer(data,"/ ,");
while(st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
System.out.println("==============");
//1. String의 split
String [] d = data.split("/");
for(String s : d) {
System.out.println(s);
}
}
}
Stringbuffer
- 문자열 크기 동적 할당
package com.test3;
public class Ex08_3 {
public static void main(String[] args) {
StringBuffer s = new StringBuffer("Hello");
s.append(" world");
System.out.println(s); //Hello world
s.insert(5, "!!! ");
System.out.println(s); //Hello!!! world
s.delete(0, 5);
System.out.println(s); // !!! world
String data = s.toString();
System.out.println(data); //!!! world
}
}
Wrapper
- 기본형을 객체로 변환 시켜줌
package com.test3;
public class Ex08_8 {
public static void main(String[] args) {
//1. 기본형을 Wrapper로 변경
int num =10;
Integer x = new Integer(num);
//2. Wrapper을 기본형으로 변경
int x2 = x.intValue();
}
}
package com.test3;
public class WrapperTest {
public static void main(String[] args) {
int num =10; // 기본형
//WrapperClass : Integer, Double, char.... 지원
//객체타입의 기본형 만들 수 있음
Integer objnum = new Integer(10); //Interger Wrapper 객체 생성
//10이 기본형이 아닌 Integer가 됨(객체 10)
System.out.println(objnum);
System.out.println(objnum.MAX_VALUE);
int pdtnum = objnum.intValue(); // 객체값을 10으로 변환
System.out.println(pdtnum);
//오토박싱 int -> wrapper
//언박식 wrapper -> int
}
}
오토박싱, 오토언박싱
package com.test3;
//import java.lang.*;
public class Ex08_9 {
public static void main(String[] args) {
//오토박싱
int num =10; //기본형
Integer num2 = num; // 자동오토박싱 int -> 객체
//Interger num2 = new Interger(num)과 동일처리
System.out.println(num == num2); // 오토언박싱 후 비교
Integer num3 = new Integer(200);
int num4 = num3; // 오토언박싱 개체-> 기본형으로 자동변환
//int num4 = num3.intValue();
Object[] obj = new Object[1];
obj[0] = 10; // 자동 오토박싱 객체로 변환 후 저장
}
}
Random
package com.test3;
import java.util.Random;
public class Ex08_10 {
public static void main(String[] args) {
Random random = new Random();
int num = random.nextInt(100) + 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);
}
}
Calander
package com.test3;
import java.util.Date;
import java.util.Calendar;
public class Ex08_11 {
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_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
System.out.println(hour + "시 " + minute + "분 " + second + "초");
//특정 날짜 설정하기
Calendar ca12 = Calendar.getInstance();
//month의 경우 0부터 시작하기 때문에 12월인 경우 11로 지정해야한다.
cal.set(2014, 11,24);
Date now = ca12.getTime(); // Date타입으로 변경
System.out.println(now);
//날짜 변경
System.out.println("= 1일 후 =");
ca12.add(Calendar.DATE, 1);
System.out.println(ca12.getTime());
System.out.println("= 6달 전 =");
ca12.add(Calendar.MONTH, -6);
System.out.println(ca12.getTime());
}
}
NumberFormat
package com.test3;
import java.text.NumberFormat;
public class NumberFormatTest {
public static void main(String[] args) {
NumberFormat nf = NumberFormat.getCurrencyInstance(); // 현재 지역 화폐 양식
String mesg = nf.format(987654321);
System.out.println(mesg);
}
}
append, concat, + 속도 비교
package com.test3;
public class Test {
public static void main(String[] args) {
Test t= new Test();
t.aaa();
t.bbb();
t.ccc();
}
private void ccc() {
long start = System.currentTimeMillis();
String x = "";
for(int i=0;i<10000;i++) {
x= x.concat("aaaaaaaaaaaaa");
}
System.out.println("x.length :" + x.length());
System.out.println("ccc() :" + (System.currentTimeMillis()-start));
}
private void bbb() {
long start = System.currentTimeMillis();
StringBuffer x = new StringBuffer();
for(int i =0;i<10000;i++) {
x.append("aaaaaaaaaaaaa");
}
System.out.println("x.length :" + x.length());
System.out.println("bbb() :" + (System.currentTimeMillis()-start));
}
private void aaa() {
long start = System.currentTimeMillis();
String x ="";
for(int i =0;i<10000;i++) {
x += "aaaaaaaaaaaaa";
}
System.out.println("x.length :" + x.length());
System.out.println("aaa() :" + (System.currentTimeMillis()-start));
}
}
Simpledataformat
package com.test3;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Ex08_12 {
public static void main(String[] args) {
SimpleDateFormat sdf= new SimpleDateFormat("yyy년 MM월 dd일 HH:mm:ss (a)");
String date = sdf.format(new Date());
System.out.println(date);
}
}
배열 API
package com.test3;
import java.util.Arrays;
public class Ex08_17 {
public static void main(String[] args) {
//1. 배열 복사
String [] str = {"홍길동", "이순신", "유관순"};
String [] str2 = Arrays.copyOf(str, str.length);
for(String name : str2) {
System.out.println(name);
}
//2. 특정값으로 전체 채우기
int [] nums = {10,20,30};
Arrays.fill(nums, 100);
for(int num : nums) {
System.out.println(num);
}
//3. 특정값 일부분만 채우기
String [] fruits = {"사과", "배", "수박", "바나나"};
Arrays.fill(fruits, 0, 2, "딸기");
for (String s : fruits) {
System.out.println(s);
}
//4. 배열 비교
String [] p = {"홍길동", "이순신", "유관순"};
String [] p2 = {"홍길동", "이순신", "유관순"};
System.out.println(Arrays.equals(p,p2));
//5. 정수형 정렬
int [] num = {22,1,3,5,2,4,11};
Arrays.sort(num);
for(int i : num) {
System.out.println(i);
}
//6. 문자열 정렬
String [] name = {"xMan", "Alex", "XMan", "Bob", "Curl", "Flex", "alex"};
Arrays.sort(name); // 기본 오름차순
for(String s : name) {
System.out.println(s);
}
//7. 인덱스 찾기
String [] s = {"홍길동", "이순신", "유관순"};
int index = Arrays.binarySearch(s, "이순신");
System.out.println(index);
}
}
ENUM
- 상수 배열
package com.test3;
public class EnumTest4 {
//상수
public enum DML {SELECT, INSERT, DELETE}
public static void check(DML num) {
//byte, short, int, char, String, enum
switch(num) {
case SELECT: System.out.println("1"); break;
case INSERT: 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(DML.SELECT);
check(DML.INSERT);
check(DML.DELETE);
//check(99); // 의미없는 숫자 불가능
}
}
예외
- 의도하지 않은 발생된 문제
- try
catchfinally 문 이용한 직접처리 - throws 키워드 이용한 위임처리
try -catch
public class ExceptionTest4 {
public static void main(String[] args) {
System.out.println("시작");
try {
//작업1
int num = 10;
int result = num /2;
System.out.println(result);
//작업 2
String name = "aa";
System.out.println(name.length());
//작업 3
int[] num2 = {10, 20};
System.out.println(num2[3]); //ArrayIndexofBoundEx
} catch (NullPointerException e1) {
System.out.println("NullpointerException : " + e1.getMessage() );
} catch ( ArithmeticException e2) {
System.out.println("ArithmeticException : " + e2.getMessage());
} catch ( Exception e3) {
System.out.println("예외발생3 : " + e3.getMessage());
e3.printStackTrace();
}
System.out.println("시스템 종료");
}
}
finally
public class ExceptionTest6 {
public static void main(String[] args) {
System.out.println("시작");
try {
//작업1
int num = 10;
int result = num /2;
System.out.println(result);
//작업 2
String name = "aa";
System.out.println(name.length());
//작업 3
int[] num2 = {10, 20};
System.out.println(num2[3]); //ArrayIndexofBoundEx
} catch (NullPointerException e1) {
System.out.println("NullpointerException : " + e1.getMessage() );
} catch ( ArithmeticException e2) {
System.out.println("ArithmeticException : " + e2.getMessage());
} catch ( Exception e3) {
System.out.println("예외발생3 : " + e3.getMessage());
e3.printStackTrace();
} finally {
System.out.println("finally 문장");
}
System.out.println("시스템 종료");
}
}
'ETC > 국비교육' 카테고리의 다른 글
국비 23일차 JAVA 컬렉션, 제네릭, List, map (0) | 2021.02.04 |
---|---|
국비 22일차 throw, 예제 (0) | 2021.02.03 |
국비 20일차 다형성, 추상함수, 인터페이스 (0) | 2021.02.01 |
국비 19일차 상속, 오버라이드 (0) | 2021.01.29 |
국비 18일차 JAVA 초기화블록, 싱글톤, final, vargars (0) | 2021.01.28 |