Java Technology
JVM / JRE / JDK
Java Platform 종류
Java 특징
Java 요소
JVM 특징
Garbage Collection
Consol에서의 컴파일과 실행
Java 프로그램 수행 과정
1) 더 이상 쓰이지 않는 메모리를 회수하여 사용 가능하게 한다.
2) Garbage Collection 시점을 예측하여, 효율을 높일 수 있다.
3) 모든 JVM은 동일한 Garbage Collection 기법을 사용한다.
4) 메모리에 대한 관리 책임을 프로그래머에게 위임한다.
➡️ 2️⃣ : Grabage Collector 스레드가 알아서 하고, 예측할 수 없음
3️⃣ : Garbage Collection 기법은 모두 다름
1) 개발자가 작성한 소스 코드를 말한다.
2) 바로 실행 가능한 실행 모듈이다.
3) Platform 독립적이다.
➡️ 1️⃣ : java code
2️⃣ : jre가 있어야지 실행 가능
1) Compile–Bytecode Verifier–Class Loader–Interpreter–Run
2) Compile–Class Loader–Bytecode Verifier–Interpreter–Run
3) Compile–Class Loader–Interpreter–Bytecode Verifier–Run
1) 자바 소스 코드를 바이트 코드로 변환시킨다.
2) byte code를 해석해서 자바 프로그램을 실행시킨다.
3) 자바 소스 코드를 compile 한다.
4) 자바 소스 코드를 작성하는 에디터 이다.
➡️ 1️⃣ : 컴파일러
3️⃣ : 컴파일러
4️⃣ : 이클립스
1) 플랫폼 독립적이다.
2) 객체 지향적이다.
3) Thread를 사용한다.
4) 메모리 해제를 프로그래머가 직접 해야 한다
➡️ 4️⃣ : 메모리 해제는 Garbage Collector Thread가 수행
Abstraction
Class
Class Diagram
package
import
Member Variable
public
+ int
+ rating
Method
public
+ void
+ setTitle
+ (String newTitle)
{title = new Title;
package chap02.entity;
public class Movie {
// Movie의 속성을 변수로 선언
public String title;
public String director;
public String starring;
public int raing;
// Source -> Generate Getters and Setters로 생성
// Method Signature
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public void playMovie() {
System.out.println(title + "을 상영합니당");
}
}
접근 제한자 (Access Modifier)
(+) public : universe
(#) protected : same package + subclassing
(~) default : same package
(-) private : same class
class : public, default
method/Virable : public, protected, default, private
Account 클래스(부모 클래스), SavingAccount 클래스 (자식 클래스)
OOP (Object-Oriented Programming) 특징
Encapsulation
package chap02.entity;
public class MyDate {
private int year;
private int month;
private int day;
public int getYear() {
return year;
}
public void setYear(int year) {
if(year >= 2000)
this.year = year;
else
System.out.println("년도는 2000년 이후 값만 가능 ");
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
if (month >= 1 & month <= 12)
this.month = month;
else
System.out.println("월은 1 ~ 12 값만 가능 ");
}
public int getDay() {
return day;
}
public void setDay(int day) {
if (day >= 1 & day <= 31)
this.day = day;
else
System.out.println("일은 1 ~ 31 값만 가능 ");
}
public String getDate() {
return this.year + "-" + this.month + "-" + this.day;
}
}
package chap02.entity;
import chap02.entity.MyDate;
public class TestMyDate {
public static void main(String[] args) {
MyDate myDate1 = new MyDate();
// myDate.year = 2023;
// myDate.month = 13;
// myDate.day = 33;
myDate1.setYear(2023);
myDate1.setMonth(9);
myDate1.setDay(11);
System.out.println(myDate1.getDate());
MyDate myDate2 = new MyDate();
myDate2.setYear(1999);
myDate2.setMonth(13);
myDate2.setDay(33);
System.out.println(myDate2.getDate());
}
}
Constructor
MyDate.java
package chap02.entity;
public class MyDate {
private int year;
private int month;
private int day;
// 디폴트 생성
public MyDate() {
this.year = 2000;
this.month = 1;
this.day = 1;
}
//3개의 값을 argument로 받아 초기화
public MyDate(int year, int month, int day) {
super();
// this.year = year;
// this.month = month;
// this.day = day;
setYear(year);
setMonth(month);
setDay(day);
}
public int getYear() {
return year;
}
public void setYear(int year) {
if(year >= 2000)
this.year = year;
else
System.out.println("년도는 2000년 이후 값만 가능 ");
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
if (month >= 1 & month <= 12)
this.month = month;
else
System.out.println("월은 1 ~ 12 값만 가능 ");
}
public int getDay() {
return day;
}
public void setDay(int day) {
if (day >= 1 & day <= 31)
this.day = day;
else
System.out.println("일은 1 ~ 31 값만 가능 ");
}
public String getDate() {
return this.year + "-" + this.month + "-" + this.day;
}
}
package chap02.entity;
import chap02.entity.MyDate;
public class TestMyDate {
public static void main(String[] args) {
MyDate myDate1 = new MyDate();
// myDate.year = 2023;
// myDate.month = 13;
// myDate.day = 33;
myDate1.setYear(2023);
myDate1.setMonth(9);
myDate1.setDay(11);
System.out.println(myDate1.getDate());
MyDate myDate2 = new MyDate();
myDate2.setYear(1999);
myDate2.setMonth(13);
myDate2.setDay(33);
System.out.println(myDate2.getDate());
MyDate myDate3 = new MyDate(2001, 1, 3);
System.out.println(myDate3.getDate());
}
}
➡️ 캡슐화 (Encapsulation), 상속 (Inheritance), 다형성 (Polymorphism)
1) 패키지
2) API
3) 클래스 Loader
4) 클래스 Directory
➡️ dog 메서드의 반환값이 없음
public void dog()
➡️ 생성자와 클래스 이름이 다름
Dog d = new dog();
➡️ 메인 메서드의 매개변수형이 잘못 됨
public static void main(String[] args)
➡️ import
1) 호출 시점에 new 키워드가 사용한다.
2) Class명과 같은 이름을 쓴다.
3) Return 값을 명시해 주어야 한다.
4) 객체 값을 초기화 시키는데 사용된다.
과제 1 (Encapsulation 개념)
문제
1. 클래스 이름은 Account로 합니다. 2. package명은 workshop.account.entity입니다. 3. 고객번호(custId), 계좌번호(acctId), 잔액(balance)에 해당하는 변수를 선언합니다. 모든 변수들을 다른 클래스에서 직접 사용하지 못하도록 private으로 선언하며, 고객번호, 계좌번호는 String type으로 , 잔액은 int type으로 합니다. 4. 멤버변수 balance는 private으로 선언하였기 때문에 다른 클래스에서 이 멤버변수에 대해 직접 값을 읽거 나 쓸 수 없습니다. 다른 클래스에서 잔액의 값을 할당하고, 읽을 수 있도록 메서드를 작성합니다. 1) 값 할당 메서드 메서드 이름 : setBalance, 아규먼트: int newBalance , 리턴타입: void 2) 값 얻기 메서드 메서드 이름 : getBalance, 아규먼트: 없음 , 리턴타입: int type 5. 멤버변수 custId와 acctId에 대해서도 값을 할당하고, 읽을 수 있는 메서드를 작성합니다. -setCustId, getCustId, setAcctId, getAcctId 6. 계좌잔액을 입력한 금액만큼 증가(입금) 시키는 메서드를 작성합니다. 메서드이름 : deposit, 아규먼트: int amount , 리턴타입: void 7. 계좌잔액을 입력한 금액만큼 감소(출금) 시키는 메서드를 작성합니다. 메서드이름 : withdraw, 아규먼트: int amount , 리턴타입: void 8. Account클래스를 객체 생성하여 이용하는 클래스인 TestAccount 클래스를 작성합니다. 1) package는 workshop.account.test입니다. 2) Account 클래스가 다른 package에 있기 때문에 import 해야 합니다. 3) 실행 가능한 메서드인 main 메서드를 작성해야 합니다. a. Account 클래스의 객체를 생성합니다 (new 연산자를 사용함) b. 생성한 Account 객체의 멤버변수의 값을 아래와 같이 할당합니다. 고객번호 : “A1100”, 계좌번호 : “221-22-3477”, 잔액 : 100000 c. 고객번호와 계좌번호를 화면에 출력합니다. d. 잔액을 화면에 출력합니다. e. 잔액을 10000원 증가시킵니다. f. 잔액을 화면에 출력합니다. g. 잔액을 20000원 감소시킵니다. h. 잔액을 화면에 출력합니다.
Account.java
package workshop.account.entity;
public class Account {
private String custId;
private String acctId;
private int balance;
public int getBalance() {
return balance;
}
public void setBalance(int newBalance) {
this.balance = newBalance;
}
public String getCustId() {
return custId;
}
public void setCustId(String custId) {
this.custId = custId;
}
public String getAcctId() {
return acctId;
}
public void setAcctId(String acctId) {
this.acctId = acctId;
}
public void deposit(int amount) {
balance += amount;
}
public void withdraw(int amount) {
if ((balance - amount) >= 0) {
balance -= amount;
}
else {
System.out.println("잔액이 부족합니다.");
}
}
}
TestAccount.java
package workshop.account.test;
import workshop.account.entity.Account;
public class TestAccount {
public static void main(String[] args) {
Account act = new Account();
act.setCustId("A1100");
act.setAcctId("221-22-3477");
act.setBalance(100000);
System.out.println("고객 : " + act.getCustId());
System.out.println("계좌번호 : " + act.getAcctId());
System.out.println("잔액 : " + act.getBalance());
act.deposit(10000);
System.out.println("잔액 : " + act.getBalance());
act.withdraw(20000);
System.out.println("잔액 : " + act.getBalance());
}
}
package chap02.entity;
/**
* 영화정보를 담는 클래스
*
* @author 홍길동
* @version 1.0, 2023/09/12
*/
public class Movie {
// Movie의 속성을 변수로 선언
public String title;
public String director;
public String starring;
public int raing;
public Movie()
{
this.title = title;
this.director = director;
this.starring = starring;
this.raing = raing;
}
/**
* 모든 정보를 갖는 Movie 클래스의 생성자 * @param title 제목
* @param director 감독
* @param starring 주연
* @param rating 등급
*/
public Movie(String title, String director, String starring, int raing)
{
this.title = title;
this.director = director;
this.starring = starring;
this.raing = raing;
}
// Source -> Generate Getters and Setters로 생성
// Method Signature
/**
* 제목 정보에 대한 getter * @return 영화제목
*/
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public void playMovie() {
System.out.println(title + "을 상영합니당");
}
}
javadoc
Identifier
Keyworkd
Data Type
객체 생성시, 메모리가 할당되는 순서
this 키워드
1) $money
2) is-valid
3) _leftTime
4) 4chonman
5) man4ma
➡️ 2️⃣ : - 대신 _ 사용
4️⃣ : 숫자로 시작X
float z;
int x,y;
boolean d;
1) z=3.1415; x=14;
2) x = 14; d = "false";
3) z = 3.1415; d = "false";
4) x = 14; y = x;
➡️ 1️⃣ : z=3.1415f;
2️⃣ : d = false;
3️⃣ : z=3.1415f;, d = false;
public class Time {
int hour, minute, seconds;
public static void main( String[] args ) {
Time start, end;
start = new Time(); }
}
1)start.hour = 8;
start.seconds = 0;
2)start.hour = 8;
minute = 0;
3)start.seconds = 0;
end.hour = 16;
4)end.hour = 16;
minute = 0;
➡️ 3️⃣ : 초기화가 되어있지 않아 runtime 에러
4️⃣ : 초기화가 되어있지 않아 runtime 에러
1)Package Name
2)Class Name
3)Contant Variable Name
4)Interface Name
➡️ this
변수의 분류
선언위치에 따라
변수의 생명, 초기화 문제, 참조 범위
지역변수
package chap04;
public class Initializing {
public void doComputation()
{
int x = 10;
int y; // local 변수 초기화 필요
int z = 0;
if ( x > 50 ) { y = 9;
}
z = y + x;
}
}
연산자
promotion & casting
int[] myArray = new int[6];
myArray = new int[10]; // size 늘어나는 것이 아니라, 새로운 배열이 생성
1)float [][] mat = new float[4][4];
2)float [] mat [] = new float[4][6];
3)float [][] mat = new float[4][];
4)float [][] mat = new float[][4];
public class Test {
public static void main ( String[] args ) {
int [] x ;
System.out.println( "Value is " + x[5]);
}
}
1) 컴파일 오류가 발생됩니다.
2) 런타임 오류가 발생됩니다.
3) 아무 것도 출력되지 않습니다.
4) Value is 0 이 출력됩니다.
public class Test {
public static void main ( String[] args ) {
int[] x = new int[10];
System.out.println( "Value is " + x[5] );
}
}
1) 컴파일 오류가 발생됩니다.
2) 런타임 오류가 발생됩니다.
3) 아무 것도 출력되지 않습니다.
4) Value is 0 이 출력됩니다.
public class Movie {
private int rating;
private String title;
public Movie(int rtng, String name) {
rating = rtng;
title = name;
}
public static void main( String[] args ) {
Movie myMovies[] = new Movie[2];
____________________________
}
}
1) myMovies[0].title = “Maxtrix 3”;
2) myMovies[0] = new Movie( 13, “Maxtrix 3” );
3) myMovies[0] = new Movie[3];
4) myMovies = new Movie( 13, “Matrix 3” );
코드 재사용하는 방법
상속
Refactoring과 Desing Pattern (GoF Pattern)
접근 제한자
Overriding과 Overloading
Method Overriding (재정의)
Custructor Overloading
Super 키워드
Constructor
class Animal { }
class Dog extends Animal { }
class Cat extends Animal { }
Dog d1,d2;
Animal a1,a2;
a1 = new Animal( );
d1 = new Dog( );
a2 = (a)d1;
d2 = (b)a2;
1)a 없음 b 없음
2)a Animal b 없음
3)a 없음 b Dog
public class Example{
public static void main( String[] args ){
SubClass s = new SubClass( "Hi“ );
BaseClass b = new BaseClass( "Hello“);
}
}
class SubClass extends BaseClass{
String s;
public SubClass( String st )
{
s = st; // 이거 대신 super(st) 사용
System.out.print( s );
}
}
class BaseClass{
String s;
public BaseClass( String st )
{
s = st;
System.out.print( s );
}
}
1)HiHello
2)HelloHi
3)컴파일 오류 발생
4)런타임 오류 발생
➡️ 3️⃣ : 부모의 기본 생성자가 없음 (BaseClass에 기본 생성자 만들거나, 만들지 않을 경우 자식에서 부모의 생성자를 호출해야함(super(st))
public Picture drawPicture(int x, int y, double val){...}
1)public Picture drawPicture( int x, double val, int y ){...}
2)public SmallPicture drawPicture( int x, char z, int y, double val ){...}
3)public Picture drawPicture( int x, int y, double val, String label ){...}
4)public SmallPicture drawPicture( int x, int y, double val ){...}
➡️ 4️⃣ : 매개변수가 동일해서 (오버로딩은 매개변수/타입 달라야함, 리턴값만 다른 경우 오버로딩 불가)
public class A
{
String s = "Hello";
public String toString()
{
return s;
}
public static void main( String[] args )
{
A a = new A();
System.out.println( a );
}
}
1)a 객체의 클래스이름과 주소가 출력됩니다.
2)아무것도 출력되지 않습니다.
3)“Hello”가 출력됩니다.
4)컴파일 오류가 발생합니다.
1) 생성자는 Overriding 할 수 없다.
2) 자식 method의 접근 제한자는 부모의 method의 접근 제한자보다 제한적이어야 한다.
3) Overriding 하는 method는 부모 method와 같아야 하는것은 이름, argument 리스트이다.
4) Overriding 하는 method는 return type는 같지 않아도 된다.
➡️ 2️⃣ : 부모의 접근제한자보다 자식이 더 넓어야함 (부모 - protected, 자식 - public)
3️⃣ : method이름, argument, return type 동일
4️⃣ : method이름, argument, return type 동일
다형성
실행 시에는 실제 new를 통해서 생성 되는 객체의 메소드 실행
Casting
A instance of B
Object 클래스
Wrapper 클래스
1)abstract class A{
abstract void aMethod( );
}
2)abstract class A{
void aMethod( ){ }
}
3)interface A{
void aMethod( );
}
4)interface A{
void aMethod( ){ }
}
public interface Flyer{
public void takeOff( );
public void land( );
}
abstract class Animal{
abstract void eat( );
public void walk( ){}
}
public Eagle extends Animal implements Flyer {
//여기에 반드시 구현해야 할 메소드를 모아놓은 것을 고르세요.
}
1)takeOff, land()
2)takeOff(), land(), eat()
3)eat()
4)eat(), walk()
class Count{
int a = 0;
static int b =0;
void increase()
{
a++;
b++;
}
public class CountTest{
public static void main( String[] args ){
Count c1 = new Count();
Count c2 = new Count();
c1.increase( );
c2.increase( );
System.out.println( c1.a + ",“ + Count.b ); }
}
}
1)1,1
2)2,2
3)1,2
4)2,1
1) static은 멤버 변수, 멤버 메소드 등의 지정자로 사용된다.
2) static으로 선언된 변수는 객체 생성을 통하여서만 참조할 수 있다.
3) static 변수는 선언할 때 초기화 할 수 있다.
4) 로컬 변수에 static을 붙이면 global 변수와 같은 기능을 한다.
➡️ 2️⃣ : class 이름.변수명으로 참조 가능
1) class선언 시 사용할 수 없다.
2) static 키워드와 같이 쓸 수 없다.
3) member 변수 선언 시 사용하면, 해당 멤버는 상수가 된다.
4) local 변수 선언 시 사용하면, 상수가 되기 때문에 초기화할 필요 없다.
컬렉션
List 메소드
함수형 인터페이스
package chap09.collections;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
public class TestArrayList {
public static void main(String[] args) {
List<String> strList = new ArrayList<>();
strList.add("java");
strList.add("javaScript");
strList.add("java");
System.out.println(strList);
for (String value : strList) {
System.out.println(value);
}
// 1단계 (consumer을 상속받은 myconsumer 작성)
strList.forEach(new MyConsumer()); // 낭비
// 2단계 (consumer을 익명 내부 클래스로 작성)
System.out.println("----익명 내부 클래스-----");
strList.forEach(new Consumer<String>() {
@Override
public void accept(String t) {
System.out.println(t);
}
});
// 3단계 (람다식으로 작성)
System.out.println("----람다식----");
// Iterable의 forEach(Consumer consumer)
// Consumer의 추상메서드가 void accept(T t)
strList.forEach(val -> System.out.println(val));
// 4단계 (method reference)
System.out.println("-----method reference-----");
strList.forEach(System.out::println); //String::new
}
}
class MyConsumer implements Consumer<String> {
@Override
public void accept(String t) {
System.out.println("MyConsumer에서 출력 " + t);
}
}
람다식 실습
package workshop.person.control;
import workshop.person.entity.PersonEntity;
import java.util.*;
public class PersonManager {
public void fillPersons(List<PersonEntity> persons) // persons 배열에 정보 set
{
persons.add(new PersonEntity("이성호","7212121028102", "인천 계양구", "032-392-2932"));
persons.add(new PersonEntity("김하늘","7302132363217", "서울 강동구", "02-362-1932"));
persons.add(new PersonEntity("박영수","7503111233201", "서울 성북구", "02-887-1542"));
persons.add(new PersonEntity("나인수","7312041038988", "대전 유성구", "032-384-2223"));
persons.add(new PersonEntity("홍정수","7606221021341", "서울 양천구", "02-158-7333"));
persons.add(new PersonEntity("이미숙","7502142021321", "서울 강서구", "02-323-1934"));
persons.add(new PersonEntity("박성구","7402061023101", "서울 종로구", "02-308-0932"));
persons.add(new PersonEntity("유성미","7103282025101", "서울 은평구", "02-452-0939"));
persons.add(new PersonEntity("황재현","7806231031101", "인천 중구", "032-327-2202"));
persons.add(new PersonEntity("최철수","7601211025101", "인천 계양구", "032-122-7832"));
}
public void showPerson(List<PersonEntity> persons) // 전체 persons 정보를 display
{
for (PersonEntity person : persons)
{
System.out.print("[이름] " + person.getName() + '\t');
System.out.print("[성별] " + person.getGender() + '\t');
System.out.println("[전화번호] " + person.getPhone() + '\t');
printItemLine();
}
// 람다식 표현
persons.forEach(person -> {
System.out.print("[이름] " + person.getName() + '\t');
System.out.print("[성별] " + person.getGender() + '\t');
System.out.println("[전화번호] " + person.getPhone() + '\t');
printItemLine();
});
}
public void showPerson(List<PersonEntity> persons, String name) // 특정 person의 상세 정보를 display
{
for (PersonEntity person : persons)
{
if (person.getName() == name)
{
System.out.println("-- 이름 : '" + name + "' (으)로 찾기 결과입니다. --");
printItemLine();
System.out.println("[이름] " + person.getName());
System.out.println("[성별] " + person.getGender());
System.out.println("[전화번호] " + person.getPhone());
System.out.println("[주소] " + person.getAddress() );
}
}
}
public int findByGender(List<PersonEntity> persons, char gender) // 해당 Gender의 인원수 return
{
int count = 0;
for (PersonEntity person : persons)
{
if (person.getGender() == gender)
count++;
}
return count;
}
public void printTitle(String title) // Title 출력하는 메서드
{
System.out.println('\n' + title + '\n');
}
public void printTitleLine() // TilteLine 출력하는 메서드
{
for (int i = 0; i < 60; i++)
System.out.print('=');
System.out.println();
}
public void printItemLine() // ItemLine 출력하는 메서드
{
for (int i = 0; i < 60; i++)
System.out.print('-');
System.out.println();
}
public static void main(String[] args) {
PersonManager pManager = new PersonManager();
// PersonEntity[] persons = new PersonEntity[10];
int gender_count;
//PersonEntity 엘리먼트를 담아주는 역할을 하는 ArrayList 생성
List<PersonEntity> persons = new ArrayList<>();
pManager.printTitle("@@@ 인물 정보 조회 시스템 @@@");
pManager.printTitleLine();
pManager.fillPersons(persons);
pManager.showPerson(persons);
gender_count = pManager.findByGender(persons, '여');
System.out.println("성별 : '여'(은)는 " + gender_count + "명 입니다.");
pManager.printTitleLine();
pManager.showPerson(persons,"김하늘");
}
}
package chap09.collections;
import java.util.HashSet;
import java.util.Set;
import chap02.entity.MyDate;
public class TestHahSet {
public static void main(String[] args) {
Set<String> myset = new HashSet<>();
myset.add("java");
myset.add("javascript");
myset.add("java");
myset.add("python");
myset.forEach(val -> System.out.println(val));
Set<MyDate> dateset = new HashSet<>();
dateset.add(new MyDate(2023,9,13));
dateset.add(new MyDate(2023,8,16));
dateset.add(new MyDate(2023,9,13));
dateset.forEach(date -> System.out.println(date.getDate()));
}
}
package chap09.collections;
import java.util.HashMap;
import java.util.Map;
public class TestHashMap {
public static void main(String[] args) {
Map<Integer, String> myMaps = new HashMap<>();
myMaps.put(100, "java"); // 동일키가 나와서 무시
myMaps.put(200, "javascript");
myMaps.put(300, "java");
myMaps.put(100, "python");
System.out.println(myMaps);
// 1개만 데이터 꺼내기
String value = myMaps.get(100);
System.out.println(value);
for(Integer key : myMaps.keySet()) {
System.out.printf("key = value : %d = %s\n", key, myMaps.get(key));
}
//public Set<Map.Entry<E,V> entrySet()
// Map.Entry<K,V> getkey(), getvalue()
for (Map.Entry<Integer, String> entry : myMaps.entrySet())
{
System.out.printf("%d = %s \n",entry.getKey(), entry.getValue());
}
}
}
public void second()
{
try {
first();
}
catch( UserDefinedException e )
{
}
}
public void first() _____ UserDefinedException {
______ new UserDefinedException();
}
1)throws, throws
2)throw, throws
3)throw, throw
4)throws, throw
import java.io.*;
public class Test {
public static void main( String[] args ){
int a[] = new int[5];
try {
a[5] = 5;
}
catch ( _____________ e ){
System.out.println( "Exception이 발생 했습니다 : " + e);
}
}
}
1)IOException
2)FileNotFoundException
3)Exception
4)ClassNotFoundException
try{
int x = 10/0;
System.out.print( “a” );
}
catch( NullPointerException e1 ) {
System.out.print( “b” );
}
catch( Exception e2 ){
System.out.print( “c” );
}
finally{
System.out.print( “d” );
}
System.out.println( “e” );
1)abcde
2)bde
3)cde
4)cd
public class UserDefinedException ______________{ public UserDefinedException(){
super( “사용자 정의 예외 발생” ); }
}
1)implements Throwable
2)extends Exception
3)implements Exception
4)아무 코드도 필요하지 않습니다.
1)java.util.Map
2)java.util.List
3)java.util.Set
4)java.util.Collection
Set set = new HashSet();
1)set.add( “3” );
2)set.add( new Integer(3).intValue() );
3)set.add( new Integer(3) );
4)set.add( new Object() );
➡️ 2️⃣ : 오토 박싱이 되지 않았을 때는 int라서 오류였지만, 지금은 개선되어 가능
// 012345678901234567
String s = "ABCDEFGH IJKLMN ";
System.out.println( "1 : " + s.substring( 3, 6 ) ); System.out.println( "2 : " +s.substring( 9 ) );
System.out.println( "4 : " +s.charAt( 5 ) );
System.out.println( "5: " + s.trim() + "XY" );
s.concat( " TEST" ); System.out.println( "6: " + s );
s = s.concat( " TEST" ); System.out.println( "7: " + s );
➡️
String str1 = "abc";
String str2 = "ABC";
String str3 = new String("abc");
String str4 = "abc";
if( str1.equals( str2 )){
System.out.println( "equals test : str1과 st2는 같은 string입니다." );
}else{
System.out.println( "equals test : str1과 st2는 다른 string입니다." );
}
if( str1.equals( str3 )){
System.out.println( "equals test : str1과 st3는 같은 string입니다." );
}else{
System.out.println( "equals test : str1과 st3는 다른 string입니다." );
}
if( str1.equals( str4 )){
System.out.println( "equals test : str1과 st4는 같은 string입니다." );
}else{
System.out.println( "equals test : str1과 st4는 다른 string입니다." );
}
➡️
String str1 = "abc";
String str2 = "ABC";
String str3 = new String("abc");
String str4 = "abc";
if( str1 == str4 ){
System.out.println( "equals test : str1과 st4는 같은 string입니다." );
}else{
System.out.println( "equals test : str1과 st4는 다른 string입니다." );
}
if( str1.equalsIgnoreCase( str2 )){
System.out.println( "equalsIgnoreCase test : str1과 st2는 같은 string입니다." );
}else{
System.out.println( "equalsIgnoreCase test : str1과 st2는 다른 string입니다." );
}
if( str1.compareTo( str2 ) < 0 ){
System.out.println( "compareTo test : str1는 st2보다 문자 순서가 빠릅니다." );
}else{
System.out.println( "compareTo test : str1는 st2보다 문자 순서가 빠르지 않습니다.");
}
➡️