<배열사용이유?>
---> 여러개의 데이터를 한 변수명으로 정의 ---> (인덱스)관리가 편해짐
---> 제약: 동일한 자료형, 고정된(수) 데이터만 입력!!
<java.util.Vector>
- 가변길이 배열
- 객체에 대한 참조(주소)를 가지는 배열
생성자)
Vector() : 묵시적으로 10개의 방을 가진 Vector객체생성
Vector(int size) : size지정된 크기의 Vector객체생성
Vector(int size, int incr) : size크기의 Vector객체생성
- 새로운 요소가 추가되어 크기가 늘어나야 할 경우 incr지정만큼 늘어남.
관련메소드)
boolean hasMoreElements() : 요소가 있으면 true, 없으면 false리턴
Object nextElement() : 다음 요소를 반환
import java.util.Enumeration;
import java.util.Vector;
public class VectorTest {
public static void main(String[] args) {
//Vector(int initialCapacity, int capacityIncrement)
//initialCapacity:방의크기, capacityIncrement: 방크기의 증가치
Vector v = new Vector(5,3);//벡터 : 데이터를 담는 바구니!!
//데이터 ----> element(요소)
System.out.println("벡터의 용량(방크기): "+ v.capacity());//5
System.out.println("벡터의 요소(입력된 데이터)갯수: "+ v.size());//★0
//벡터는 객체의 참조(a, new A())를 담는 배열
Integer su = new Integer(1);
int su2=2;
v.addElement(su);
v.addElement(su2);
for(int i=3; i<10; i++) {//3~9
v.addElement(i);
}
System.out.println("벡터의 용량(방크기): "+ v.capacity());//11
System.out.println("벡터의 요소(입력된 데이터)갯수: "+ v.size());//9
v.addElement(true);
v.addElement(3.14);
v.addElement("자바");
System.out.println("벡터의 용량(방크기): "+ v.capacity());//14
System.out.println("벡터의 요소(입력된 데이터)갯수: "+ v.size());//12
//벡터안의 데이터 포함 여부
if(v.contains(3.14)) {//요소 포함시 true리턴
System.out.println("3.14를 포함");
}
//벡터의 모든 요소 출력
Enumeration enu = v.elements();
//Enumeration(열거형 인터페이스) enu=[1,2,3,4,.....,"자바"];
System.out.println("------------------------");
while(enu.hasMoreElements()) {//요소가 있으면 true리턴
System.out.println(enu.nextElement());
}
}//main
}
import java.util.Vector;
class A{
void hello() {
System.out.println("A클래스안녕~!!");
}
}
public class VectorTest2 {
public static void main(String[] args) {
Vector v = new Vector();
v.add("안녕");//인덱스 0부여
v.add(new A());//인덱스 1부여
//v.get(int index)
Object ob = v.get(1);//두번째 데이터 얻기
//ob.hello(); //------> 에러발생!! --> 왜? 부모 참조변수를 통해 자식 호출 불가!!
A a = (A)ob;
a.hello();
//Vector<A> v2 = new Vector<A>();//---> v2에는 A클래스객체만 담겠습니다!!
Vector<A> v2 = new Vector<>();// JDK7버전부터 <> 빈 괄호 지원
v2.add(new A());//인덱스0
A obj = new A();
v2.add(obj);//인덱스1
A aa = v2.get(1);
aa.hello();
v2.get(1).hello();
/*
<>: 제네릭 타입 ---> 어떤 자료형을 사용할 지를 명시(명료성을 높임)
JDK5부터 지원
<E> : element(요소)가 어떤 자료형을 사용할 지 명시.
<K> : key가 어떤 자료형을 사용할 지 명시.
<V> : value가 어떤 자료형을 사용할 지 명시.
<T> : type에 어떤 자료형을 사용할 지 명시.
*/
}
}
import java.util.Vector;
public class VectorTest3 {
//★ Vector에 데이터 추가, 삭제, 수정, 검색하기!!
public static void main(String[] args) {
Vector<String> v = new Vector<>();
//데이터 추가
v.add("자바");//인덱스 0
v.add("SQL");//인덱스 1
v.add("HTML");//인덱스 2
v.add("JavaScript");//인덱스 3
v.add("JSP");//인덱스 4
v.add("자바");//인덱스 5
//데이터 삭제
//v.remove(int index);
//v.remove(Object o);
//v.remove(0);//첫번째 데이터를 삭제해라!!
v.remove("자바");
//데이터 수정
//v.set(int index,String 대체할element);
v.set(4, "자바프로그래밍");//5번째 데이터를 변경!!
//데이터 조회
// System.out.println("다섯번째 데이터: "+ v.get(4));
// System.out.println("여섯번째 데이터: "+ v.get(5));
/* for(; 배열명.length ;)//배열의 경우
for(; 문자열.length() ;)//문자열의 경우
for(; 벡터명.size() ;)//벡터의 경우
*/
//전체데이터 조회
for(int i=0; i<v.size(); i++) {//벡터의 인덱스를 표현
String s = v.get(i);
System.out.println(i+":"+s);
}
}
}
<Exception> 예외처리
- 프로그램 실행 중에 발생하는 예기치 않은 사건.
(자바는 프로그램 실행 중 발생할 수 있는 예외처리 기법제공. 발생하는 모든 예외를 객체로 취급, 예외관련 클래스를 제공)
예) 정수를 0으로 나누는 경우
배열의 첨자가 음수값을 가지는 경우
배열 첨자가 배열의 크기를 벗어나는 경우
부적절한 형변환이 일어나는 경우
int su = 3.14; //에러
int su = (int)3.14; //su변수에 3이 저장
double d = 30; //묵시적인 형변환!! d변수에 30.0 이 저장.
double d = (double)30; //명시적인 형변환!!
(int)"홍길동" (X)
(B)A (X)---> 만약 A클래스와 B클래스간에 상속관계가 없다면
(Object)String -----> Object ob = (Object)"길라임";
----> 부모캐스팅: 보통생략!! Object ob = "길라임";
ob.length() ? (X)
ob.toString() ? -----> String클래스의 toString()호출
(String)Object
----> 자식캐스팅 String str= (String)ob;
str.length() ? 3 (O)
(Parent)Child (Child)Parent ----> 상속관계에 있었을 때만 캐스팅이 가능.
입출력시 인터럽트가 발생하는 경우
입출력 위해 지정한 파일이 없거나 파일 이름이 틀린경우......
예외상황처리 ---> 자바언어를 더욱 강하게(robust) 만드는 요인!!
[기본예외상황처리기]
프로그램
실행 JVM : 예외발생시 관련된 예외클래스로 부터 예외 객체생성,
프로그램에서 지정된 예외처리루틴에게 넘겨준다.
예외발생
<Exception 클래스 계층구조>
java.lang.Object
java.lang.Throwable
Error Exception
Error : 하드디스크 포맷이 망가진경우, 메모리파괴, 스택오버플로우
(프로그램처리하지 않고 JVM에게 맡겨주는게 일반적임)
<예외처리 구문 형식> (try~catch문)
형식)
try{
예외가 발생할 가능성이 있는 문장;
}catch(예외타입 변수명){//catch(변수선언)
실제 예외가 발생시 처리할 문장;
}finally{
예외발생과 상관없이 반드시 실행할 문장;
}
메소드 정의(){
문장1;
문장2;
문장3;
.....
}
예외처리 case1) 각각 처리
try{
AException이 발생할 가능성이 있는 문장;
}catch(AException ae){
AException발생시 처리할 문장;
}
try{
BException이 발생할 가능성이 있는 문장;
}catch(BException be){
BException발생시 처리할 문장;
}
try{
CException이 발생할 가능성이 있는 문장;
}catch(CException ae){
CException발생시 처리할 문장;
}
예외처리 case2) 다중catch를 사용 : 일반적으로 많이 사용
try{
ParentException이 발생할 가능성이 있는 문장;
ChildException이 발생할 가능성이 있는 문장;
CException이 발생할 가능성이 있는 문장;
}catch(ChildException ae){
AException 발생시 처리할 문장;
}catch(ParentException be){
BException 발생시 처리할 문장;
}catch(CException ce){
CException 발생시 처리할 문장;
}
※ 다중 catch사용시 주의할 점:
만약 Exception들이 상속관계를 갖는다면 자식클래스부터 정의를 해야함!!
public class FileReader{
public FileReader(String fileName) throws FileNotFoundException{
}
public int read() throws IOException{
}
}
<상속관계에서의 예외>
- 상위클래스의 throws 예외 는 하위클래스에서 같거나 축소되어야 함. (<=== 오버라이
딩 규칙)
참고) 접근제한자의 경우 부모와 같거나 확대되어야 함. (<=== 오버라이딩 규칙)
class Parent{
public void hello()throws AException, BException{
}
}
class Child extends Parent{
public void hello()throws AException, BException {} (O)
public void hello()throws AException{} (O)
public void hello()throws BException{} (O)
public void hello(){} (O)
public void hello()throws AException, BException, CException {} (X)
public void hello()throws CException {} (X)
public void hello()throws Exception {} (X)
}
<ExceptionTest>
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class ExceptionTest {
public static void main(String[] args) {
//텍스트 파일(a.txt)을 읽어서 그 내용을 콘솔에 출력
//FileInputStream : 파일에 내용을 byte단위로 읽는 클래스
//FileReader :파일에 내용을 문자(char)단위로 읽는 클래스
//FileReader(String fileName) ---> fileName: 경로와 파일명
try{
//FileReader fr = new
FileReader("c:\\jaelee\\workspace\\JavaApp\\abc.txt");
//FileReader fr = new FileReader("c:/jaelee/workspace/JavaApp/abc.txt");
FileReader fr = new FileReader("a.txt");
//이클립스에서 프로젝트 종류가 JavaProject인 경우 '프로젝트명'까지 경로를 생략하는 것이 가능!!
/*System.out.println(fr.read());
System.out.println(fr.read());
System.out.println((char)fr.read());// (char)99 ----> 'c'
System.out.println(fr.read());
System.out.println(fr.read());
System.out.println(fr.read());//-1리턴 : 읽은 문자가 없을경우
*/
int i;
while( (i=fr.read()) != -1 ) {//읽은 문자가 있다면
System.out.print((char)i);
}
System.out.println("\n=========================");
System.out.println("파일읽기 성공~!!");
}catch(FileNotFoundException e) {
System.out.println("예외발생!!");
System.out.println("===> 파일이 존재하지 않습니다. 확인바랍니다^^*");
System.out.println("-------------------------------------");
System.out.println(e);
System.out.println(e.toString());//에러메시지
System.out.println(e.getMessage());//간단 에러메시지
e.printStackTrace();
}catch(IOException e) {
System.out.println("예외발생: "+ e.getMessage());
}
}//main
}
<ExceptionTest2>
public class ExceptionTest2 {
public static void main(String[] args) {
/*
String[] args={"10","5"};
String[] args={"ab","cd"};
String[] args={"10"};
su1 su2
----------
10 5
ab cd ===> NumberFormatException
10 X ===> ArrayIndexOutOfBoundsException
10 0 ===> ArithmeticException
*/
try{
System.out.println("매개변수로 받은 두개의 수!!");
int su1 = Integer.parseInt(args[0]);//Integer.parseInt("숫자로 구성된 문자열")
int su2 = Integer.parseInt(args[1]);
System.out.println("su1="+su1+", su2="+su2);
System.out.println("su1을 su2로 나눈 몫= "+ (su1/su2));
System.out.println("나눗셈을 잘 실행하였습니다~!!");
}catch(NumberFormatException e1) {
System.out.println("## 숫자만 입력하세요~!!");
}catch(Exception e) {//Exception e = new NumberFormatException();
//Exception e = new ArithmeticException();
System.out.println("모든 예외 처리: "+ e);
return;
}finally {
System.out.println("예외와 상관없이 반드시 실행해야 할 문장!!===>finally블럭!!");
//----> (파일,DB관련 객체)자원 반환 코드
}
System.out.println("마지막 문장~!!");
/*
catch(NumberFormatException e1) {
System.out.println("## 숫자만 입력하세요~!!");
}catch(ArrayIndexOutOfBoundsException e2) {
System.out.println("## 두개의 숫자를 입력하세요~!!");
}catch(ArithmeticException e3) {
System.out.println("## 0으로 나눌 수 없습니다~!!");
}
*/
}//main
}
<MatchesTest>
public class MatchesTest {
public static void main(String[] args) {
String str="";
str="a";
//str="aa";
//str="aaaaaaaaaaaaaaa";
//boolean str.matches(String regex);
//regex ----> regular expression (정규 표현식)
//regex를 통해 전달되는 패턴에 str이 부합(match)된다면 true를 리턴.
//출현횟수에 관련된 부호: ?, *, +
System.out.println(str.matches("[a]")); //a문자: 한번
System.out.println(str.matches("[a]?")); //a문자: 0,1
System.out.println(str.matches("[a]*")); //a문자: 0~무한대
System.out.println(str.matches("[a]+")); //a문자: 1~무한대
System.out.println("========================");
System.out.println(str.matches("[abc]"));//a 또는 b 또는 c 문자 중 1번 출현
String name="gildongA";
//name변수에 대한 영문자 체크!!
System.out.println("이름체크: "+
//name.matches("[abcdefghijklmnopqrstuvwxyz]+"));
name.matches("[a-zA-Z]+")); //[]안에서 '-'는 범위를 표현
String su="345678a";
//su변수에 대한 숫자 체크!!
System.out.println("숫자체크: "+ su.matches("[0-9]+"));
String hangul="나한글";
//hangul변수에 대한 한글 체크!!
System.out.println("한글체크: "+ hangul.matches("[ᄀ-힣]+"));
String id="gildong100456";
//id변수는 8~12자리, 영문자와 숫자조합
String idPattern="[a-zA-Z0-9]{8,12}";//8~12
//{8,12} 8이상~12이하 {8,}: 8이상 {8} : 8번
System.out.println("아이디체크: "+ id.matches(idPattern));
String juminBunho = "960302-1012345";
String juminPattern = "[0-9]{6}-[\\d]{7}";
System.out.println("주민번호체크: "+ juminBunho.matches(juminPattern));
String test="1";
System.out.println(test.matches("^[0-9-[1]]+$"));
}//main
}
<StringTest>
public class StringConvertTest {
public void convert1() {
String s1="우리나라";
String s2="대한민국만세!!";
s1=s1+s2;
/*
String클래스: 고정(길이)문자열!!
1. String클래스 객체 생성
2. 문자열변환을 위해서 임시로 StringBuffer클래스 객체생성
3. append()메소드 호출
4. StringBuffer객체를 String객체로 변환
5. 임시생성된 StringBuffer객체를 소멸.
*/
System.out.println(s1);
}
public void convert2() {
StringBuffer s1 = new StringBuffer("우리나라");
s1.append("대한민국만세!!");
/*
StringBuffer클래스: 가변(길이)문자열!!
1. StringBuffer클래스 객체 생성
2. append()메소드 실행.
*/
}
public static void main(String[] args) {
StringConvertTest sct = new StringConvertTest();
sct.convert1();
}
}
'JAVA' 카테고리의 다른 글
#9 Event 처리 (0) | 2018.12.02 |
---|---|
#8 중첩클래스, TUI, AWT, 데이터저장 (0) | 2018.11.26 |
#6 문자열 내용 비교, 이름(추가,검색,수정,삭제), String Test (0) | 2018.11.24 |
#5 인터페이스, final, 추상클래스, 배열, 2차원 배열 (0) | 2018.11.23 |
#4 제어문 추가, 객체지향 특징, 접근지정자, 생성자, this (0) | 2018.11.23 |