<JAVA의 메모리 구조와 호출스택>
class Test{
private static int a = 1; //static : new 없어도 호출가능
private int b = 2; // 멤버변수
void testMethod(int parameter){ // 매개변수
int k = param; // k: 지역변수
}
<객체지향 - 다형성>
for(1~100){ // 다형성 안썼을때. 일일이 구분해야함.
if(한국사람)한국person 말하다
if(미국사람)미국person 말하다
...
}
for(1~100){ // 다형성 썼을때
person 말하다
}
<지역변수와 매개변수>
void test(int Param){ //매개변수
int i = param //지역변수
}
void test(String Param){
String s = param // 'call by value'
}
<변수의 종류 - 실습>
package Week01;
public class PassingValueType {
public static void main(String[] args) {
PassingValueType test = new PassingValueType();
int iValue = 1;
System.out.println("test01 before:" + iValue); //1
test.test01(iValue);
//call by reference로 파라미터를 넘기는 언어에서는 2로 값이 변경된다.
System.out.println("test01 after:" + iValue); //1
Box box = new Box();
System.out.println("test02 before:" + box.x); //0
test.test02(box);
System.out.println("test02 before:" + box.x); //0
Box box2 = new Box();
System.out.println("test03 before:" + box2.x); //0
test.test03(box2);
System.out.println("test03 before:" + box2.x); //1
}
void test03(Box box) {
box.x = 1;
}
void test02(Box box) { // box 매개변수로 받음.
box = new Box(); //새로이 인스턴스 생성
box.x = 1;
}
void test01(int param) {
param = 2;
}
}
class Box{ //new를 통해 인스턴스화하지않으면 사용불가능.
public int x; //멤버변수. int x는 0임.
}
------------------------------------------
package Week01;
import java.util.Scanner;
public class GradeCalcTest {
public static void main(String[] args) {
// 국어, 영어, 수학 점수를 받아서 총점, 평균 출력하기.
int kor, eng, math, tot;
float avg;
Scanner scanner = new Scanner(System.in);
System.out.println("국어 = ");
kor = Integer.parseInt(scanner.nextLine());
System.out.println("영어 = ");
eng = Integer.parseInt(scanner.nextLine());
System.out.println("수학 = ");
math = Integer.parseInt(scanner.nextLine());
tot = kor + eng + math;
avg = tot / 3.0f ;
System.out.printf("총점 : %d 점 %n,", tot);
System.out.printf("평균 : %.2f 점 %n,", avg);
}
}
<기본자료형 배열>
int[] a = new int[3];
a[0] = 1;
a[1] = 2;
a[2] = 3;
<참조자료형 배열>
Dog[] pets = new Dog[3];
pets[0] = new Dog(); //참조자료형이기 때문에 new로 인스턴스를 새로만듬 -> heap 영역에 있는것을 가리킴.
pets[1] = new Dog();
pets[2] = new Dog();
<다차원 배열>
[][]
첫번째 []는 참조영역
두번째 []는 실질적인 위치영역
--------------------------------------
<Overloading>
- 이름은 같지만 파라미터의 개수나 데이터형이 다른 여러개의 메소드를 정의 하는 것.
- 조건 : 같은 클래스, 같은 메소드 이름, 메소드의 파라미터개수가 다르거나 데이터형이 달라야함, 메소드의 리턴형은 가아도 되고 달라도 됨.
- 존재 이유 : 같은 메소드 이름을 사용할수 있게함.
package Week01;
public class OverloadTest {
public static void main(String[] args) {
f('c');
byte i = 2;
f('i');
short j = 2;
f('j');
f(2);
f(2L);
f(2.0);
}
private static void f(double d) {}
private static void f(long l) {}
private static void f(int i) {}
private static void f(short j) {}
private static void f(byte i) {}
private static void f(char c) {}
}
---------------------------------------
<배열>
초기화방법
- 자료형[] 배열명 = {값1, 값2, 값3...}
- 배열명 = new 자료형[개수]
- 배열명 = new 자료형[]{값1, 값2, 값3...}
package Week01;
public class VarArgsEx {
public static void main(String[] args) {
String[] strArr = {"100", "200", "300"};
System.out.println(concatenate("", "100", "200", "300"));
System.out.println(concatenate(",", strArr));
System.out.println(concatenate(",", new String[] {"1", "2", "3"}));
System.out.println("["+concatenate(",", new String[0]+"]"));
System.out.println("["+concatenate(",") +"]");
}
//가변인자 : 타입...변수명
//가변인자는 항상 마지막 매개변수
static String concatenate(String delim, String...args) {
String result ="";
for(String str:args) { // args를 배열안에 1개씩 넣어줌.
result+= str + delim;
}
return result;
}
}
----------------------------------------
package Week01;
public class Dog {
String name;//String의 초기값은 null이다.
public static void main(String[] args) {
Dog dog1 = new Dog();
dog1.bark();
dog1.name = "Bart";
//Dog배열을 만듭니다. (Dog참조변수)
Dog[] myDogs = new Dog[3];
//개를 몇마리 집어 넣습니다.
myDogs[0] = new Dog();
myDogs[1] = new Dog();
myDogs[2] = dog1;
//배열 레퍼런스를 써서 Dog객체에 접근합니다.
myDogs[0].name = "Fred";
myDogs[1].name = "Marge";
System.out.println("마지막 개의 이름: ");
System.out.println(myDogs[2].name);
int x = 0;
while(x<myDogs.length) {
myDogs[x].bark();
x = x +1;
}
}
//메소드는 main 밖에 넣어야함.
public void bark() {
this.name = ""; //this 로 초기화함.
System.out.println(name + "이 왈!하고 짖습니다.");
}
public void eat() {
}
public void chaseCat() {
}
}
-------------------------------------
package Week01;
//최대값/최소값 구하기
public class ArrayEx6 {
public static void main(String[] args) {
int i;
int[] score = {79, 88, 91, 33, 100, 55, 95};
int max = score[0]; //배열의 첫번째 값으로 최대값을 초기화한다.
int min = score[0]; //배열의 첫번째 값으로 최소값을 초기화한다.
for(i=0; i<score.length;i++) {
if(max<score[i]) //현재값이 최대값이면 그 값을 최대값으로 update
max = score[i];
if(min>score[i]) //현재값이 최소값이면 그 값을 최소값으로 update
min = score[i];
}
System.out.println("최대값:" + max);
System.out.println("최소값:" + min);
}
}
-------------------------------------------
package Week01;
//내림차순 정렬하기
public class ArrayEx10 {
public static void main(String[] args) {
int[] score = {79, 88, 91, 33, 100, 55, 95};
for(int i=0; i<score.length; i++) {
for(int j=0; j<score.length; j++) {
if(score[i]>score[j]) {
int temp = score[i];
score[i]=score[j];
score[j]=temp;
}
}
}
for(int k=0;k<score.length; k++) {
System.out.println(score[k] + " ");
}
}
}
------------------------------------------------
package Week01;
public class ClassTest {
private int[] sub; //field
private float avg; //field
public ClassTest() { //Construct
sub = new int[4];
avg = 0.0f;
}
public void calc() { //메소드
int tot = 0;
for(int a = 0; a<sub.length; a++) {
tot+=sub[a];
}
avg = tot/sub.length;
}
public static class ClassTest_Inner{ // Nested class
private String[] subname = {"국어", "영어", "수학"}; //field
public String getSubname(int x) { //메소드
return subname[x];
}
}
}
'Java' 카테고리의 다른 글
Java - 일반화, 추상화, 클래스(생성자, this, super, 접근제한자, static, final), is a/has a, 상속, object class, 연산자, state 패턴, 클래스 다이어그램, 재귀함수 (0) | 2019.07.09 |
---|---|
기본 알고리즘 (0) | 2019.07.08 |
은행계좌시스템 (0) | 2019.07.01 |
문자열 (0) | 2019.06.27 |
Collections Framework (0) | 2019.06.15 |