본문 바로가기
학원수업/12월

12/01 국비학원 자바수업 4회차(변수의 종류, 인스턴스화 객체화, 파라미터, 쓰레드)

by 코딩마스터^^ 2022. 12. 1.

변수의 종류

 

1.원시형변수->호출하면 값이 나온다

2.char, byte, short, int, long, float, double-정수형, 실수형

3.boolean-제어문 중요함!-흐름을 다르게 할때-분기문(if, switch)

4.참조형 변수->호출하면 주소번지가 나온다.

 

원시형 변수를 사용할때는 대입 연산자를 사용한다.

변수를 사용하면 일괄처리를 할 수 있다.--한번에 처리

package dev_java.ch01;

public class Variable2 { // 클래스 안에는 변수와 메소드를 선언할 수 있다.
  
  public static void main(String[] args) {
    System.out.println("소나타");
    System.out.println("소나타");
    System.out.println("소나타");
    System.out.println("======================");
    String carName = "프라이드";
    System.out.println(carName);
    System.out.println(carName);
    System.out.println(carName);

변수의 장애는???

 

원시형 변수는 한번에 하나만 담을 수 있다.

package dev_java.ch01;

public class Variable3 { 
  public static void main(String[] args) {
    
    int i = 1;
    System.out.println(i);
    i=3;
    System.out.println(i);
    i=5;
    System.out.println(i);
  }

}

overwrite-->변수는 하나에 하나만 담을 수 있다. 그럼 같은 변수에 다른값넣으면 덮어쓰기된다. 그게 오버 롸이트

 

변수는 명사형과 동사형

동사형은 필드

변수를 담을 수 있는것은 클래스

변수 여러개 담을 수 있다.

변수를 맞는 타입으로 선언해야한다.

 

같은 이름의 변수는 중복선언 안된다

타입을 빼면 사용이다. 선언이 아니다

선언할때는 타입을 붙인다.

 

인스턴스화 객체화

DeptVO deptVO = new DeptVO();//인스턴스화
DeptVO deptVO;//선언
deptVO= new DeptVO();//인스턴스화 객체생성
deptVO =new DeptVO();//변수 선언이 아니라 객체생성
    deptVO.deptno=30;

인스턴스화는 Heap에 상주한다.

DeptVO deptVO

같은 이름을 두번 선언하는것은 안된다.

왜? 변수 이름이 deptVO로 같으므로

그래서 선언 안하고 객체화만

deptVO =new DeptVO();//변수 선언이 아니라 객체생성

타입은 같지만 다른 객체이다. 전의 객체와의 연결을 끊고 다른 주소랑 연결한것이다.

 

 

전역변수

-클래스급

지역변수

-인스턴스변수.변수 로 호출할수없다

정적변수

 

 

접근제한자

생략가능

private

protected

패키지가 다르다고 하더라도 둘의 관계가 상속 관계이면 접근 가능

friendly상태 -아무것도 없는거

패키지 다르면 접근 불가능

public

 

문제 이해 해보기

package dev_java.ch01;

class Param {
  int ival;----전역변수 컨벤션 : 초기화를 생략할 수 있다. 생성자가 해주니까. 디폴트값은 0이다. 지역변수는 생략 안된다. 
ival변수는 non-static상태 static 은 하나이다. 공유
 
간접 참조방식???
 
8번에 선언은 되어있는데 초기화가 되어있지않다. 생성이 안되어있다. 인스턴스화 안했다.
17번에 선언하고 인스턴스화했다.
 
메소드의 파라미터 자리는 지역변수이다.----변수 기준? 메소드 안에서 선언을 하고 안하고 차이???

클래스 안의 메인 메소드는 엔트리 포인트=엔트리 쓰레드이다. 가장 먼저 호출 된다. 순서1번 main thread

순서=알고리즘=위치

 

Thread 

하나의 자원을 여러 사람이 사용할수있다.

한사람 한사람이 다 쓰레드이다.

사람이 많다. 멀티 쓰레드이다. 경합이 벌어진다.

 

18번에서 호출하고있다.

17번에서 만든 객체를 effectParam 메소드 안에서 쓰고싶다.

어떻게? 주소번지를 넘긴다.

파라미터

//자바에서는 같은 이름의 메소드를 중복 정의 할 수 있다.
    //단, 파라미터의 갯수가 다르거나 또는 타입이 다르면 인정해줄게
메소드의 파라미터 자리는 메소드가 호출될때 정의가 된다.

 

변수 이름 앞에 static(고정)이 있으면 인스턴스화 없이도 호출이 가능함.

이 말은 같은 객체를 복제하지 않는다는 의미

 

변수앞에 static이 올수도 안올수도 있다.

메소드 앞에도 올 수 있다.

그렇다면 인스턴스화 하는것과 뭐가 다르지?

myCar.carColor 전역 변수만 

인스턴수변수.변수 로 호출할수있다.

insert here

자동차 색상을 출력할 수 있나요?

 

클래스들은 초기값이 null이다.

오브젝트는 티폴트가 null이다.

실체가 없다. 주소번지가 가리키는 객체가 사라졌다.

그러나 타입은 남았다.

=null 이후에

myCar.carColor=보라색

이걸 넣을수 있나요?

안된다. 런타임 에러(Exception)가 난다. 주소번지가 없어서 저장을 할수없다.

선언하는것 말고 초기화까지 해줘야 null exception이 일어나지 않는다.

 

주소값을 같게 만들기

package dev_java.ch01;

public class PrideMain {
  public static void main(String[] args) {
   Pride myCar= new Pride();
   Pride herCar= new Pride();
   myCar= herCar;

   System.out.println(myCar==herCar); 
  }
 
  
}

myCar 주소 @abc1234

herCar 주소 @abs1235

myCar=herCar ---->서로 다른 주소번지가 같은 객체를 참조하게 되었다.

 

숙제!

package dev_java.ch01;

public class String1 {
  public static void main(String[] args) {
    String s1 = "안녕";
    String s2 = "안녕";
    String s3 = new String("안녕");
    String s4 = new String("안녕");

    /*s1와 s2의 주소번지는 같나? 참OR거짓
    그리고 이유에 대해 설명하시오
    s3,s4의 주소번지가 같니?
    만일 s3이 가리키는 문자열이 s4와 같은지를 비교하려면 어떡하지? 구글링해봐
     * 
     */
  }
  
}

String은 클래스 타입 중 유일하게 원시형 타입처럼 값을 바로 출력해줌

String은 클래스 급이다

 

 

 

댓글