package chapter03;
// 비정방형 배열을 만들어 값 초기화하고 출력하기
//출력해야하는 결과
//35 36 37 38 39
//45
//55 56 57 58
//65 66
//75 76 77
public class IrregularArray2 {
public static void main(String[] args) {
int n[][] = new int [5][];
n[0]=new int [5];
n[1]=new int [1];
n[2]=new int [4];
n[3]=new int [2];
n[4]=new int [3];
for (int i = 0; i < n.length; i++) {
for (int j = 0; j < n[i].length; j++) {
n[i][j]=(i+3)*10+(j+5); // 35~77까지 출력
System.out.print(n[i][j]+" ");
}
System.out.println();
}
}
}
// 결과
// 35 36 37 38 39
// 45
// 55 56 57 58
// 65 66
// 75 76 77
package chapter03;
public class MakeArray_1 {
// 일차원 배열 생성 초기화해서 값 넣은 후, 리턴해서 100을 더하는 프로그램 작성
static int[] makeArray() {
int temp[] = new int[10];// 일차원 배열 생성
for (int i = 0; i < temp.length; i++) {
temp[i] = i + 1;
} // 초기화해서 값 부여
return temp;
}// makeArray는 메소드.
public static void main(String[] args) {
int intArray[];
intArray = makeArray();
for (int i = 0; i < intArray.length; i++) {
System.out.print(intArray[i] + 100 + " ");
} // makeArray와 intArray 배열 공유하고 100더하는 프로그램
}
}
//내가 한거(리턴 사용 안함
// int makeArray[] = new int[10];
// for (int i = 0; i < makeArray.length; i++) {
// for (int j = 0; j < makeArray.length; j++) {
// makeArray[i] = i + 1;
// }
// makeArray[i] = makeArray[i] + 100;
// System.out.print(makeArray[i] + " ");
// }
throws
메소드 선언부에 작성
리턴타입 메소드명(매개변수,...) throws 예외클래스1, 예외클래스 2,..{ }
메소드에서 처리하지 않을 예외를 호출한 곳으로 떠넘기는 역할
예시
package chapter03;
public class ThrowsExample {
public static void main(String[] args) {
try {
findClass();
} catch (Exception e) {
System.out.println("클래스가 존재하지 않습니다.");
}
}
public static void findClass () throws ClassNotFoundException {
Class.forName("java.lang.Stirng");
//클래스를 찾아감
// 여기선 JRE System Library에 있는 클래스를 찾는거임
//Class.forName("aaa");
// 자바 안에 있는 클래스를 찾는데,
//없으므로 클래스가 존재하지 않는다고 뜬다.
//? 맞나?
}
}
:실제로 존재하는 것, 사물 또는 개념.
쉽게 말하면 세상 모든 것이 객체(TV,의자,집 등등..)
Class TV {
String color;
boolean power;
int channel;
void power;
void channelUp;
void channelDown;
}
(자세한것은 추후 정리할 예정)
- 캡슐화
: 데이터가 유효한 값을 유지하도록, 또는 외부에서 데이터를 함부로 변경,접근하지 못하게 하도록 보호하는 것, 외부에서 불필요한, 내부적으로 사용되는 부분을 감추는 것
ex)private
로 지정하여 외부에 노출 x
- 상속
: 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것
장점 - 적은 양의 코드로 새로운 클래스 작성 가능, 코드 공통적으로 관리할 수 있어서 코드의 추가 및 변경에 용이
⇒ 재사용성 증가, 생산성과 유지보수에 기여- 상속을 구현하는 방법
새로 작성하고자 하는 클래스의 이름 뒤에 상속받고자 하는 클래스의 이름을 키워드extends
와 함께 사용 (부모로부터 확장됨을 뜻함)
기존 Animal의 경우 속성 2개 메소드 3개이지만
Human은 상속받은 속성 2개 + 새 속성 2개 = 속성 4개, 상속받은 메소드 3개 +새 메소드 3개 = 6개 이다.
(왼 - 절차 지향 프로그래밍
오- 객체지향 프로그래밍)
클래스 | 객체 |
---|---|
전자기기 | TV,라디오,전자레인지... |
사람 | 나, 너,앞집사람,옆집 사람.. |
붕어빵 틀 | 구워낸 붕어빵들... |
package chapter04;
public class Circle {
int radius;
String name;
public Circle( ) {//메소드 형태이지만 클래스 이름과 같은 메소드를 `생성자`라고 함.
}
public double getArea() {
return 3.14*radius*radius;
}//메소드 선언
public static void main(String[] args) {
Circle pizza;//pizza는 참조변수 Circle은 클래스
// 선언만 한 상태
pizza = new Circle(); //new연산자를 사용하여 객체(pizza) 생성
// 이걸 2줄로 했지만 1줄로도 가능함(31번째 줄 보기)
pizza.radius=10;//속성
pizza.name="자바 피자"; //속성
double area = pizza.getArea();//메소드 호출
System.out.println(pizza.name+"의 면적은 "+ area);
Circle dount = new Circle();
//객체 생성
//dount 참조변수
dount.radius=2;
dount.name="자바 도넛";
area = dount.getArea();
System.out.println(dount.name+"의 면적은 "+ area);
}
}
package chapter04;
import java.util.Scanner;
public class Rectangle {
int width;
int height;
// 속성 변수(필드)
public int getArea() {
return width*height;
} //메소드
//return이 없으면 오류남 //int 반환타입
public static void main(String[] args) {
Rectangle rect = new Rectangle();
//rect라는 객체 생성
// rect는 참조변수
Scanner scanner = new Scanner(System.in);
System.out.println(">>");
rect.width = scanner.nextInt();
//rect.width는 객체 속성
rect.height = scanner.nextInt();
//rect.height는 객체 속성
System.out.println("사각형의 면적은 "+rect.getArea());
//객체(rect)의 메소드 결과 바로 출력
//rect.getArea()에서 rect는 객체, getArea는 메소드
scanner.close();
}
}
: 인스턴스가 생성될때 호출되는 인스턴스 초기화 메소드
주로 초기작업에 사용함.(쉽게 말하면 객체변수들을 초기화)
생성자의 조건
1. 생성자 이름은 클래스 이름과 동일
2. 생성자는 return값 없음(void 생략 가능)
다시 한 번더 이야기하지만
컴파일러가 자동적으로 기본 생성자를 추가해주는 경우는 '클래스내에 생성자가 하나도 없을 때' 뿐
This 는 크게 2가지로 나눠진다.
1. 생성자의 이름으로 클래스명 대신 this 사용
2. 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫줄에만 호출 가능
package chapter04;
public class Circle2 {
int radius;
String name;
public Circle2() {
radius =1; name="";
}
public Circle2(int r,String n) {
radius =r; name="n";
}//매개 변수가 들어가면 여러개의 생성자 생성가능
public double getArae() {
return 3.14*radius*radius;
}
public static void main(String[] args) {
Circle2 pizza = new Circle2(10,"자바피자");
//객체 생성 pizza는 참조변수
double area = pizza.getArae();
System.out.println(pizza.name+"의 면적은 "+area);
Circle2 dount =new Circle2();
dount.name="도넛피자";
dount.getArae();
System.out.println(dount.name+"의 면적은 "+area);
}
}
//어린왕자 생텍쥐페리
//춘양전 작자미상
package chapter04;
public class Book2 {
String title;
String author;
void show() {
System.out.println(title+" @@@ "+author);
};
public Book2() {
this("","");
}//
public Book2(String title) {
this(title, "작장미상");
}
public Book2(String title,String author) {
this.title = title; this.author=author;
}
public static void main(String[] args) {
// Book2 littlePirce = new Book2();//객체 생성
Book2 littlePirce = new Book2("어린왕자","생텍쥐 페리");//객체 생성
Book2 loveStory = new Book2("춘향전");
Book2 emptyBook = new Book2();
littlePirce.show();
loveStory.show();
emptyBook.show();
// System.out.println(littlePirce.title+" @@@ "+littlePirce.author);
}
}
//출력 결과
//어린왕자 @@@ 생텍쥐 페리
//춘향전 @@@ 작장미상
// @@@
다음 main()메소드를 실행했을때 예시와 같이 출력되도록 TV 클래스 작성
package chapter04;
public class TV {
String maker;
String years;
String inch;
void show() {
System.out.println(maker+"에서 만든 "+years+"년형 "+inch+"인치 TV");
};
public TV(String maker,String years,String inch){
this.maker = maker; this.years=years; this.inch=inch;
}
public static void main(String[] args) {
TV myTV = new TV("LG","2017","32");
//TV myTV = new TV("LG",2017,32); 이렇게 하면
//int years; int inch; 로 적어도 괜찮음/
//
myTV.show();
}
}
소문자 알파벳 하나 입력시 감소하는 모양 만들기
예시)
소문자 알파벳 하나를 입력하시오>>e
abcd
abc
ab
a
package chapter04;
import java.util.Scanner;
public class PrintAlphabet {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("소문자 알파벳 하나를 입력하시오>>");
String n = scanner.next();
char c = n.charAt(0);
//abcdef char i =i-1; c인식 하면 i=65-1;
//아스키코드 사용
//abc ab a
// b//d //c==>b==>a
for (char i = c; i >= 'a'; i--) {
for (char j = 'a'; j < i; j++) {
System.out.print(j); //ab//abcd
//abc //abcde
}
System.out.println();
}
scanner.close();
}
}
package chapter04;
//강사님 방법
import java.util.Scanner;
public class ArrayMinMax {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("양수 10개를 입력하세요");
int[] arr = new int[10];
int min = Integer.MAX_VALUE;
//실제 그 데이터 타입이 표현할 수 있는 숫자의 범위중 가장 큰 값이 할당됨
int max =0;
for (int i = 0; i < arr.length; i++) {
arr[i] = scanner.nextInt();
if (arr[i]<min) {
min = arr[i];
}
if (arr[i]>max) {
max = arr[i];
}
}
System.out.println("가장 작은 수는 "+min+"이고 가장 큰 수는"+max+"이고, 최소값+최대값은"+(max+min)+"입니다.");
scanner.close();
}
}