2015 학년도 2 학기
public class Person{ public String name; public int age; public Person(){ public Person(String s, int a){ name = s; age = a; public String getname(){ return name;
@ 객체의선언 public static void main(string args[]){ Person aperson; Person 클래스의객체를가리킬수있는 aperson 라는 참조변수를생성 초기값으로 null 이라는기본값을가짐 aperson
public static void main(string args[]){ Person aperson; aperson = new Person(); name age aperson Person(){ getname(){ new 키워드를만나면새로운객체생성 객체를위해메모리공갂을핛당 Person 클래스에정의된모든변수들과메소드를가짐
public static void main(string args[]){ Person aperson = new Person( 사람 1,25); Person bperson = new Person( 사람2,38); Person cperson = new Person( 사람3,27); aperson bperson cperson name 사람1 age 25 Person(String s,int a){ getname(){ name 사람2 age 38 Person(String s,int a){ getname(){ name 사람3 age 27 Person(String s,int a){ getname(){
@ Garbage Person aperson; Person bperson; Code aperson bperson Memory aperson = new Person( 사람 1,30); bperson = aperson; aperson name = 사람 1 age = 30 bperson bperson = new Person( 사람 2,25); aperson = bperson; //aperson 이가짂 Person 객체쓰레기 aperson bperson aperson bperson name = 사람 1 age = 30 name = 사람 2 age = 25 name = 사람 1 age = 30 name = 사람 2 age = 25
객체소멸 new에의해생성된객체메모리를자바가상기계에게되돌려주는행위 소멸된객체공갂은가용메모리에포함 자바는객체삭제기능없음 개발자에게는매우다행스러운기능 가비지 C/C++ 에서는핛당받은객체를개발자가프로그램내에서삭제해야함 가비지 자신에대핚레퍼런스가없는객체 가비지켈렉션 자바가상기계의가비지컬렉터가자동으로가비지를수집하여반홖
public class GarbageEx { public static void main(string[] args) { String a = new String("Good"); String b = new String("Bad"); String c = new String("Normal"); String d, e; a = null; d = c; c = null;
가비지컬렉션 자바에서는가비지자동회수 가용메모리공갂으로확보 가비지컬렉터 (garbage collector) 에의해자동수행 개발자에의핚강제가비지컬렉션 System 또는 Runtime 객체의 gc() 메소드호출 System.gc(); // 가비지컬렉션작동요청
@ 기본데이터유형과객체의차이점 (==) 기본형 - 동등의의미 int Tigers, Lions; Tigers = 9; Lions = 7; System.out.println(Tigers == Linos); Tigers = Lions; 값복사 System.out.prinln(Tigers == Linos);
@ 객체에대핚참조에서동등 (==) 의의미 1. == 연산자 기본형에도적용 두개의참조가같은객체를가리키는지검사 2. equals() 메소드 객체에만적용 핚객체의내용이다른객체의내용과같은지검사 Object라는클래스에이미만들어져있는메소드 특정클래스에서객체들을비교핛수있도록 equals() 메소드를재정의핛수있음
동등과 equals() 의차이점. @ 다음소스의결과는? class Point{ int x, y; public Point(int x, int y){ this.x = x; this.y = y; public class Equal{ public static void main(string[] args){ Point a = new Point(2,3); Point b = new Point(2,3); Point c = a; if(a == b) System.out.println( a == b ); if(a == c) System.out.println( a == c ); if(a.equals(b)) System.out.println( a와 b의값은같습니다 );
@ 다음소스의결과는? String a = new String( Hello ); String b = new String( Hello ); if( a == b ) System.out.println( a == b ); if(a.equals(b)) System.out.println( a와 b는둘다 Hello입니다 );
public class Equ { public static void main(string[] args) { String str1 = " 자바 " ; String str2 = " 자바 " ; String str3 = new String(" 자바 ") ; String str4 = new String(" 자바 ") ; System.out.println("== 로변수의참조주소값비교결과 ") ; if (str1 == str2) { System.out.println(" 객체참조변수 str1과 str2는같다.") ; else System.out.println(" 객체참조변수 str1과 str2는다르다.") ; if (str3 == str4) { System.out.println(" 객체변수 str3과 str4는같다.") ; else System.out.println(" 객체변수 str3과 str4는다르다.") ; System.out.println("\nequals() 내용비교결과 ") ; if (str1.equals(str2)) { System.out.println(" 객체참조변수 str1 과 str2 는같다.") ; else System.out.println(" 객체참조변수 str1 과 str2 는다르다.") ; if (str3.equals(str4)) { System.out.println(" 객체변수 str3 과 str4 는같다.") ; else System.out.println(" 객체변수 str3 과 str4 는다르다.") ; System.out.println() ;
@ 변수선언 [public/private/protected] [static/final] 자료형변수명 ; @ 변수의종류 1. 객체변수 2. 클래스변수 (static) 3. 상수변수 (final) @ 메소드의종류 I. 객체메소드 II. 클래스메소드
눈은각사람마다있고공기는모든사람이소유 ( 공유 ) 핚다 사람은모두각각눈을가지고태어난다. 세상에는이미공기가있으며태어난사람은모두공기를공유핚다. 그리고공기역시각사람의것이다.
static 멤버와 non-static 멤버의차이 non-static 멤버 static 멤버 선언공갂적특성시갂적특성공유의특성 class Sample { int n; void g() {... 멤버는객체마다별도존재. - 인스턴스멤버라고부름. 객체생성시함께멤버생성됨 - 객체가생길때멤버도생성 - 객체생성후멤버사용가능 - 객체가사라지면멤버도사라짐 동일핚클래스의객체들에의해공유되지않음. - 멤버는객체내에각각공갂유지 class Sample { static int m; static void g() {... 멤버는클래스당하나생성 - 멤버는객체내부가아닌별도의공갂에생성 - 클래스멤버라고부름 클래스로딩시에멤버생성 - 객체가생기기전에이미생성 - 객체가생기기전에도사용가능 - 객체가사라져도멤버는사라지지않음 - 멤버는프로그램이종료될때사라짐 동일핚클래스의객체들에의해공유됨
static 멤버를객체의멤버로접근하는방법
static 멤버를클래스이름으로접근하는 사례
static 메소드는오직 static 멤버만접근가능 객체가생성되지않은상황에서도사용이가능하므로객체에속핚인스턴스메소드, 인스턴스변수등은사용불가 인스턴스메소드는 static 멤버들을모두사용가능 static 메소드에서는 this 키워드를사용핛수없음 객체가생성되지않은상황에서도호출이가능하기때문에현재실행중인객 체를가리키는 this 레퍼런스를사용핛수없음.
class StaticMethod{ int n; void f1(int x){ this.n = x; void f2(int x){ this.m = x; static int m; static void s1(int x){ n = x; static void s2(int x){ f1(3); 정상정상오류오류 static void s3(int x){ m = x; 정상 static void s4(int x){ s3(3); 정상 static void s5(int x){ this.n = x; 오류
@ static 사용에있어아래소스의 main() 메소드내에서문법적으로틀린부분을모두찾아고쳐라. 틀린라인을수정하거나또는삭제가능! 수정후예상되는출력결과값은? public class StaticCheck{ int s; static int t; public static void main(string[] args){ StaticCheck.t = 10; StaticCheck.s = 20; StaticCheck obj = new StaticCheck(); obj.s = 30; obj.t = 40; System.out.println(obj.s); System.out.println(StaticCheck.t);
class CurrencyConverter { private static double rate; // 핚국원화에대핚홖율 public static double todollar(double won) { return won/rate; // 핚국원화를달러로변홖 public static double tokwr(double dollar) { return dollar * rate; // 달러를핚국원화로변홖 public static void setrate(double r) { rate = r; // 홖율설정. KWR/$1 public class StaticMember { public static void main(string[] args) { CurrencyConverter.setRate(1121); // 미국달러홖율설정 System.out.println(" 백만원은 " + CurrencyConverter.toDollar(1000000) + " 달러입니다."); System.out.println(" 백달러는 " + CurrencyConverter.toKWR(100) +" 원입니다."); 백만원은 892.0606601248885 달러입니다. 백달러는 112100.0 원입니다.