-class1 클래스-
public class Class1 {
int num;
void methodA() {
System.out.println("Class1 methodA()");
}
}
-test1클래스-
public class Test1 {
public static void main(String[] args) {
Class1 class1; //타입 Class1
class1 = new Class1();
System.out.println("num: "+class1.num);
class1.methodA();
class1.num=1234;
System.out.println("num: "+class1.num);
}
}
-time클래스-
public class Time {
int hour;
int minute;
int second;
String getCurrentTime() {
return this.hour + "시 "+this.minute+"분 "+this.second+"초"; //this는 자기자신객체
}
}
-test2 클래스-
public class Test2 {
public static void main(String[] args) {
Time time;
time = new Time();
System.out.println(time.getCurrentTime());
time.hour=10;
time.minute=38;
time.second=22;
System.out.println(time.getCurrentTime());
}
}
-test3 클래스-
public class Test3 {
public static void main(String[] args) {
/*
int [] arr = new int[5]; //정수배열
for(int num: arr) { //여러개의 값을 가지는 배열이나, 컬렉션에서 씀
System.out.println(arr[num]);
}
*/
//Time [] arr = new Time[5]; //인스턴스의 주소값 5개의 주소값 저장 가능, 레퍼런스 배열
Time [] arr = {new Time(),new Time(),new Time(),new Time(),new Time()};
arr[0].hour=11; arr[0].minute=01; arr[0].second=10;
arr[1].hour=12; arr[1].minute=01; arr[1].second=10;
arr[2].hour=13; arr[2].minute=01; arr[2].second=10;
arr[3].hour=14; arr[3].minute=01; arr[3].second=10;
arr[4].hour=15; arr[4].minute=01; arr[4].second=10;
//Time [] arr = new Time[5];
/*
arr[0]=new Time();
arr[1]=new Time();
arr[2]=new Time();
arr[3]=new Time();
arr[4]=new Time();
*/
for(Time time : arr) { //앞에는 타입
System.out.println(time.getCurrentTime());
}
/*
for(int i=0; i<arr.length; i++) {
System.out.println(arr[i]);
}
*/
}
}
-class2 클래스-
public class Class2 {
static int classVar; //클래스 변수 될려면 static 붙이기 0값으로 초기화
int instanceVar; //0값으로 초기화
void methodA() {
int methodVar;
methodVar = 10;
System.out.println("methodVar: "+methodVar);
}
}
-Test4클래스-
public class Test4 {
public static void main(String[] args) {
System.out.println("classVar: "+Class2.classVar);
Class2.classVar =1000;
System.out.println("classVar: "+Class2.classVar);
Class2 c1,c2;
c1 = new Class2();
c2 = new Class2();
System.out.println("c1.instancVar: "+c1.instanceVar);
System.out.println("c2.instancVar: "+c2.instanceVar);
c1.instanceVar = 1234;
c2.instanceVar = 5678;
System.out.println("c1.instancVar: "+c1.instanceVar);
System.out.println("c2.instancVar: "+c2.instanceVar);
System.out.println("c1.classVar: "+c1.classVar);
System.out.println("c2.classVar: "+c2.classVar);
c1.methodA(); //method변수
}
}
-class3클래스-
public class Class3 {
static int classVar = 1234;
int instanceVar = 5678; //바로 초기화하는거 별로 안좋음
static void classMethodA() {
System.out.println("classMethodA()");
}
static void classMethodB() {
System.out.println("classVar: "+classVar);
Class3.classMethodA();
}
void instanceclassMethodA() {
System.out.println("instanceclassMethodA()");
}
void instanceclassMethodB() {
System.out.println("classVar: "+classVar);
Class3.classMethodA();
System.out.println("instancVar: "+this.instanceVar);
this.instanceclassMethodA();
}
}
-test5클래스-
public class Test5 {
public static void main(String[] args) {
//ClassmethodB(), instancemethodB()
//를 호출하는 문장을 작성하세요.
Class3.classMethodB();
Class3 c3 = new Class3();
c3.instanceclassMethodB();
}
}
-time클래스 활용-
-Test6 클래스-
public class Test6 {
void callByValue(int num) {
num *= 2;
System.out.println("callByValue() num : "+num);
}
void callByReference(Time [] arr) {
//Time 클래스 배열을 입력으로 받아 오는 타임 객체의 값을 0시 0분 0초로 초기화하는 코드를 작성하세요.
//Time [] arr = new Time[]{new Time()};
System.out.println("\n callReference() arr : ");
for(int i=0; i<arr.length; i++) {
arr[i].hour=0;arr[i].minute=0;arr[i].second=0;
System.out.println(arr[i].getCurrentTime());
}
}
public static void main(String[] args) {
int num =4;
//callByValue(num)을 호출하는 문장을 작성하세요.
Test6 t6 = new Test6();
System.out.println("CallByValue() 호출전: "+num);
t6.callByValue(num);
System.out.println("CallByValue() 호출후: "+num);
//Time 클래스 배열을 입력으로 callByReference()메서드를 호출하는 문장을 작성해보세요.
Time [] arr = {new Time(),new Time(),new Time()};
arr[0].hour=11; arr[0].minute=01; arr[0].second=10;
arr[1].hour=12; arr[1].minute=01; arr[1].second=10;
arr[2].hour=13; arr[2].minute=01; arr[2].second=10;
System.out.println("\nCallByReference() 호출전 arr: ");
for(Time time : arr) { //앞에는 타입
System.out.println(time.getCurrentTime());
}
t6.callByReference(arr);
System.out.println("\nCallByReference() 호출후 arr: ");
for(Time time : arr) { //앞에는 타입
System.out.println(time.getCurrentTime());
}
}
}
-class4 클래스-
public class Class4 {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
int add(int [] arr) {
int result = 0;
for(int num : arr) {
result += num;
}
return result;
}
}
-Test7클래스-
public class Test7 {
public static void main(String[] args) {
Class4 class4 = new Class4();
System.out.println(class4.add(10,20));
System.out.println(class4.add(10.5,20.5));
System.out.println(class4.add(new int[] {10,20,30,40,50}));
}
}
-class5 클래스-
public class Class5 {
String name;
String gender;
int age; //3개는 필수 입력사항
String hobby; //선택 입력사항
Class5(){
}
Class5(String name,String gender, int age){
this(name,gender,age,null);
}
Class5(String name,String gender, int age,String hobby){
this.name = name;
this.gender = gender;
this.age = age;
this.hobby = hobby;
}
//생성자 3개
public String toString() {
return this.name + " / "+this.gender+" / "+this.age+" / "+this.hobby;
}
}
-test8 클래스-
public class Test8 {
public static void main(String[] args) {
Class5 c1,c2,c3;
c1 = new Class5();
c2 = new Class5("손흥민","male",31);
c3 = new Class5("류현진","mael",37,"야구");
System.out.println(c1.toString());
System.out.println(c2.toString());
System.out.println(c3.toString());
}
}
-class6클래스-
public class Class6 {
static int classVar;
int instanceVar;
static {
Class6.classVar = 1234;
}
Class6(int instanceVar){
this.instanceVar = instanceVar;
}
}
-Test9클래스-
public class Test9 {
public static void main(String[] args) {
System.out.println(Class6.classVar);
Class6 c1,c2;
c1 = new Class6(5678);
c2 = new Class6(3579);
System.out.println(c1.instanceVar);
System.out.println(c2.instanceVar);
}
}
-parents 클래스-
public class Parent {
int num1;
Parent(){
num1 = 100;
}
void methodA() {
System.out.println("methodA()");
}
}
-child 클래스-
public class Child extends Parent {
int num2;
Other other;
Child(){
num2 = 200;
other = new Other();
}
void methodB() {
System.out.println("methodB()");
}
}
-other 클래스-
public class Other {
int num3;
Other(){
num3 = 300;
}
void methodC() {
System.out.println("methodC()");
}
}
-Test10 클래스-
public class Test10 {
public static void main(String[] args) {
Child child = new Child();
System.out.println("num1: "+child.num1);
child.methodA();
System.out.println("num2: "+child.num2);
child.methodB();
System.out.println("num3: "+child.other.num3);
child.other.methodC();
}
}
-parent클래스-
public class Parent {
int num1;
Parent(){
num1 = 100;
}
void methodA() {
System.out.println("Parent methodA()");
}
}
-child2클래스-
public class Child2 extends Parent {
int num1;
Child2(){
num1 = 200;
}
void methodA() {
System.out.println("Child methodA()");
System.out.println("Child num1: "+ num1);
}
void methodB() {
System.out.println("Parent num1: "+ super.num1); //super 부모의 숨겨진 num, 부모의 메서드 num1호출
}
}
-Test11클래스-
public class Test11 {
public static void main(String[] args) {
Child2 child2 = new Child2();
System.out.println("num1: "+child2.num1);
child2.methodA();
child2.methodB();
}
}
-parent2 클래스-
public class Parent2 {
int num1;
//자식인스턴스가 생성될때 항상 부모의 인스턴스가 먼저 생성된다.
//단, 자동 생성되는 부모 인스턴스는 매개변수가 없는 생성자를 이용여 생성된다.
Parent2(){
this.num1 = 100;
System.out.println("Parent 클래스의 인스턴스 생성");
}
}
-child3 클래스-
public class Child3 extends Parent2 {
int num2;
Child3(){
this.num2 = 100;
System.out.println("Child3 클래스의 인스턴스 생성");
}
}
-test12 클래스-
public class Test12 {
public static void main(String[] args) {
Child3 child3 = new Child3();
}
}
-parent3클래스-
public class Parent3 {
int num1;
Parent3(int num1){
this.num1 = num1;
System.out.println("Parent 클래스의 인스턴스 생성");
}
}
-child4 클래스-
public class Child4 extends Parent3 {
int num2;
Child4(int num1, int num2){
super(num1);
this.num2 = num2;
System.out.println("Child3 클래스의 인스턴스 생성");
}
}
-test13클래스-
public class Test13 {
public static void main(String[] args) {
Child4 child4 = new Child4(123,456);
System.out.println("num1: "+child4.num1);
System.out.println("num2: "+child4.num2);
}
}
-서로 관련된 클래스와 인터페이스의 묶음.
-클래스가 물리적으로 클래스파일*.class 인 것처럼, 패키지는 물리적으로 폴더이다. 패키지는 서브패키지를 가질 수 있으며, '.'으로 구분한다.
-클래스의 실제이름은 패키지명이 포함된 것이다.
-rt.jar는 java API의 기본 클래스들을 압축한 파일
-패키지는 소스파일에 첫 번째 문장(주석제외)으로 단 한번 선언한다.
-하나의 소스파일에 둘 이상의 클래스가 포함된 경우, 모두 같은 패키지에 속하게 된다.(하나의 소스파일에 단 하나의 public클래스만 허용한다.)
-모든 클래스는 하나의 패키지에 속하며, 패키지가 선언되지 않은 클래스는 자동적으로 이름없는(unnamed)패키지에 속하게 된다.
-패키지가 없는 클래스 있을수 있지만, 다른클래스에서 사용불가능
-사용할 클래스가 속한 패키지를 지정하는데 사용.
-import문을 사용하면 클래스를 사용할 때 패키지명을 생략할 수 있다.
-java.lang패키지의 클래스는 import하지 않고도 사용할 수 있다.
-import문은 패키지문과 클래스선언의 사이에 선언한다.
-import 패키지명.클래스명;
-import문은 컴파일 시에 처리되므로 프로그램의 성능에 아무런 영향을 미치지 않는다.
-이름이 같은 클래스가 속한 두 패키지를 import할 때는 클래스 앞에 패키지명을 붙여줘야 한다.
이렇게 쓰면 보기 편함!
com.lg.dept.project.className 순서로!
-jar = Java Archive
참고문헌- 자바의정석 (남궁성)