2023. 12. 9. 10:25ㆍDaily 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 |