일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- SAP
- 머신러닝
- 영어
- 비지니스영어
- Programming
- Mac
- node.js
- 노드
- IT
- db
- Spring Framework
- JavaScript
- 자바스크립트
- docker
- 도커
- SAP ABAP
- 자바
- Oracle DB
- SAP ERP
- nodejs
- 딥러닝
- oracle
- 파이썬
- 오라클 디비
- sap mm
- 유럽여행
- 오라클
- ABAP
- Python
- Java
- Today
- Total
JIHYUN JEONG
[java] 엄마도 이해하는 자바 기본 3일차 본문
□ 어제 수업 복습 (9:00 ~ 9:30)
- 상태 : 추상클래스 Shape, 서브클래스 Rect, Circle, 메인클래스 ShpaeUser
public class IShapeUser {
public static void main(String[] args) {
IShape[] is = new IShape[2];
is[0] = new ICircle(10); // ICircle의 주소값이 is[0]로 들어감, ICircle 다른 공간에 따로 생성됨
is[1] = new IRect(10, 25); // IRect의 주소값이 is[1]로 들어감, IRect 다른 공간에 따로 생성됨
for(IShape i : is){
System.out.println(i.getClass()+" "+i.getArea() +" "+ i.getCircum());
□ static
- 객체들 간에 공유되는 유일한 값
- 멤버필드, 메소드, 블록 앞에 사용
□ VM memory 구조
- Class area(구조가 등록되는 공간,클래스 구조) : StaticTest [**scount, count]
- Method stack frame : main()
- Heap : st1 [count] , st2 [count] , st3 [count]
※static은 Class area에 남아있고 Heap영역에는 들어가지 않는다. static scount를 사용할려면 Heap영역에서 Class area쪽을 참조해서 쓴다.
public class StaticTest {
int count;
static int scount;
public static void main(String[] args) {
StaticTest s1 = new StaticTest();
StaticTest s2 = new StaticTest();
StaticTest s3 = new StaticTest();
System.out.println("s1.count :" + ++s1.count + " " +"s1.scount :"+ ++s1.scount);
System.out.println("s2.count :" + ++s2.count + " "+ "s2.scount :"+ ++s2.scount);
System.out.println("s3.count :" + ++s3.count + " "+ "s3.scount :"+ ++s3.scount);
}
}
※ static은 Class area등록이 되서 scount가 먼저 생성되고 count는 객체가 생성될때 (Heap에) 생성된다.
정확하게 말하면 프로그램이 실행되기 전에 static은 등록됨
ex) 소스작성 → complie → [static수행 시기] → exe
※ static은 객체생성없이 클래스이름.변수로 사용하면 됨 (중요)
EX) java.lang.Object
-
- java.lang.Math
Math.PI
[예시]
public class StaticTest {
int count;
static int scount;
public static void main(String[] args) {
StaticMethod.go(); //
}
}
public class StaticMethod {
public static void go(){
System.out.println("gogogogogo...........");
}
public static void main(String[] args) {
System.out.println(StaticTest.scount); //
}
}
※ static block은 메인함수 실행 전에 사용할 경우
[예제]
public class StaticTest {
int count;
static int scount;
static{
System.out.println("static block1....");
}
public static void main(String[] args) {
StaticMethod.go();
}
static{
System.out.println("static block 2.....");
}
}
출력값
static block1....
static block 2.....
gogogogogo...........
□ package (10:30 ~ 11:30)
- 폴더와 같은 개념
- import 단축키 : Ctrl + Shift + O(알파벳)
package korea.seoul
○ Package 내부에서의 접근
범위 넓은 → 좁은 : public > protected > default > private
modifier |
Same class |
Same package |
Sub class |
Universe |
public |
Y |
Y |
Y |
Y |
protected |
Y |
Y |
Y |
N |
default |
Y |
Y |
N |
N |
private |
Y |
N |
N |
N |
※ getter, 값을 확인 → 반환 | setter, 값을 받아 → 저장
source → Generate Getter and Setter (Getter, Setter 자동생성)
source → Constructor and using field (생성자 자동 생성)
※ Dos 창에서 complie을 해야되는 상황
- Compile
c:\javatest> javac -d . Tommy.java
korea > seoul : Tommy.class
- Exe
c:\javatest> javac korea.seoul.Tommy
□ Exception (PM 1:00 ~
○ 프로그램 실행 중 발생하는 문제 상황
○ Ex) 데이터베이스 연결 시, 파일 입/출력시, 배열의 잘못된 인덱스 접근
□ Exception / Error
○ Error
- 복구 불가능한 문제 상황
- StackOverFlowError, NoSuchMethodError,....
○ Exception
- 복구 가능한 문제 상황
- NullPointerException, ArithmethicException, IOException, .....
- 컴파일러가 컴파일 시 확인하는 예외
* 예외처리 필수
* RuntimeException 유형이 아닌 예외
- 컴파일러가 컴파일 시 확인하지 않는 예외
* 예외처리 옵션
* RuntimeException 유형 예외
※ Exception
1. Runtime Exception (컴파일은 됨, 신경 안써줘도 됨)
2. Non-Runtime (컴파일 부터 안됨, 신경 꼭 써야함)
□ Exception Handling
1. 예외가 발생한 곳에서 직접 처리 (주로 이게 많이 사용)
- try ~ catch ~finally
2. 호출자로 보내서 예외처리 위임
- throws
※ exception type 확인 방법
※ 지역변수는 항상 초기값을 주어야 한다. 기본값이 없다.
○ 예외처리 처리 방법
1. try~catch
2. throws
※ Exception이 다른 exception의 최상위 Exception
□ Inner class (즉, 클래스 안에 클래스)
- Inner class는 class 안에서만 쓰임
- Public 클래스는 하나만 사용 할 수 있다, but Inner 클래스에 Public 클래스가 있어도 상관없다. Top level C
1. static class (많이 사용됨)
2. member class
3. local class (잘 사용이 안됨)
4. anonymous class (많이 사용됨, 안드로이드)
package asianaidt.inner;
// anonymous(무명클래스) class 예제
abstract class Song{
public abstract void sing();
}
interface Video{
public void start();
}
public class MP3Player {
public void play(Song s) {
s.sing();
}
public void play(Video v){
v.start();
}
public static void main(String[] args) {
MP3Player player = new MP3Player();
player.play(new Song(){ // Song을 상속 받는 이름 없는 서브클래스를 정의, 생성을 바로 함
public void sing(){
System.out.println("싸이-강남스타일"+" "+"Song의 서브클래스입니다. 그리고 sing 메소드를 재정의 했습니다.");
}
});
player.play(new Song(){
public void sing(){
System.out.println("김범수-보고싶다");
}
});
player.play(new Video(){
public void start(){
System.out.println("심형래-용가리");
}
});
}
}
□ JCF(Java Collection Framework)
- 여러 개의 데이터를 저장하고 관리할 수 있는 자료구조
- 데이터 저장 / 관리 방식에 따라 List/Set/Map 구조로 나뉨
□ Collection 관련 클래스
List |
Set |
Map |
순서 O 중복 O |
순서 X 중복 X |
(key, value) |
ArraryList Vector |
HashSet |
HashMap HashTable |
○ Vector
[예제]
package asianaidt.util;
import java.util.Vector;
public class VectorTest {
public static void main(String[] args) {
Vector v = new Vector(2,2); // vector의 기본크기는 10칸으로 만들어짐
System.out.println(v.capacity()); // vector의 순수한 크기
// vector의 사이즈를 지정하지 않을 경우 2배로 사이즈가 늘어남
v.add(100);
v.add(3.14);
v.add("hello");
System.out.println(v.capacity());
for(int i=0; i<v.size(); i++)
System.out.println(v.get(i));
Vector<String> v2 = new Vector<String>(); // 제너릭사용하여 String 타입만 가능
v2.add("hello");
v2.add("tommy");
v2.add("welcome");
for(String a : v2)
System.out.println(a);
}
}
○ ArrayList
[예제]
package asianaidt.util;
import java.util.ArrayList;
import asianaidt.abst.Circle;
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<Circle> list = new ArrayList<Circle>();
list.add(new Circle(5));
list.add(new Circle(8));
list.add(new Circle(10));
for(Circle a : list)
System.out.println(a.getArea());
}
}
○ HashSet
[예제]
package asianaidt.util;
import java.util.HashSet;
public class HashSetTest {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("111");
set.add("111"); // 중복 X
set.add("222");
set.add("333");
set.add("444");
for(String a : set)
System.out.println(a);
}
}
○ HashMap
[예제]
package asianaidt.util;
import java.util.HashMap;
public class HashMapTest {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<String, String>(); //HashMap<key,value>, key값은 중복되면 안됨
map.put("num", "111");
map.put("name", "data");
map.put("address", "seoul");
map.put("address", "berlin"); // 키값이 중복일땐 덮어쓰기가 됨
System.out.println(map.get("num"));
System.out.println(map.get("name"));
System.out.println(map.get("address"));
System.out.println(map);
}
}
※ 제너릭 (차후 개념 정리 예정)
'Information Technology > Java' 카테고리의 다른 글
[java] 엄마도 이해하는 자바 기본 6일차 (1) (0) | 2013.02.19 |
---|---|
[java] 엄마도 이해하는 자바 기본 5일차 (2) | 2013.02.18 |
[java] 엄마도 이해하는 자바 기본 4일차 (0) | 2013.02.18 |
[java] 엄마도 이해하는 자바 기본 2일차 (0) | 2013.02.18 |
[java] 엄마도 이해하는 자바 기본 1일차 (2) | 2013.02.18 |