프로그래밍공부노트

Day 13 - JAVA(String 자르기, Final, Interface, Extends, Switchcase) 본문

JAVA

Day 13 - JAVA(String 자르기, Final, Interface, Extends, Switchcase)

SANGJIN-YU 2021. 2. 26. 20:24
반응형

26. String 자르기 이어서....

메소드 설명
String java.lang.subString(int) Index를 기준으로 잘라낸다.
Arguments index를 포함하여 끝까지
Argements 두개 endindex -1
String[] java.lang.String.split(String) 기준 단어를 가지고 잘라내는 것
StringTokenizer java.util.StringTokenizer(객체,"token") 정한 token으로 잘라내서 StringTokenizer로 반환
iterater를 통해서 객체가 존재하지 않을때까지 출력
""값이 없다고 판단이 되는 값은 인정하지 않음

split은 *.split() 에서 ()안의 값을 기준으로 잘라준다

 

StringTokenizer는 객체를 생성하여 사용하고 hasMoreElements는 객체 안에서 값을 꺼내는 것이다. 이 과정에서 꺼내진 값은 객체 안에서 사라진다. 객체 자체가 사라지는 것은 아니다.

 

hasMoreElements를 while문을 활용하여 반복 출력한 후 그대로 다시 실행하면 값이 나오지 않는다

즉, 첫번째는 값이 출력되고 두번째는 값이 출력되지 않는다.

 

<hijr과 111 사이의 공백은 특수문자이기때문에 한줄에 출력됨>

	
    import java.util.Arrays;
	import java.util.StringTokenizer;
	

	public class CutMehtod {
    public void myStringTokenizer() {
		
		String str1 = "abc efg hijr 111";
		StringTokenizer st = new StringTokenizer(str1);

//		System.out.println(st.countTokens());
		while(st.hasMoreElements()) { // 값을 꺼내면 객체안에서 값이 사라짐
			System.out.println(st.nextElement());
		}
		while(st.hasMoreElements()) { // 값을 꺼내면 객체안에서 값이 사라짐
			System.out.println(st.nextElement()); //객체가 사라진건 아님 사라졌으면 nullpointerexception
		}
       }

공백을 기준으로 자른 후 출력

<첫번째는 콜론을 기준으로 자르기, 두번째는 문자"o"를 기준으로 자르기 >

<두번째는 객체 자체를 출력했기 때문에 값이 아닌 객체가 만들어지는 java.lang.String 클래스와 @16진수 출력>

	public void MySplit() {
		String str  = "oop:foo:poo";
		
		String[] cStr = str.split(":");
		System.out.println(Arrays.toString(cStr));
	

		String[] cStr2 = str.split("o");
		System.out.println(cStr2); 
        }


 29. final 사용용도

  변수, extends, override 연관되어 있음

 - 변수 : 값 재입력 금지, 무조건 값이 입력되어 있어야함 / int final a = 10;

 - 클래스 : extends 금지 / public final class A{} 

 - 메소드 : 재정의 금지 / public final void a(){}

 

 

final의 대표적 사용 사례

 - Math.PI 고정값들

 - Java.lang.* 클래스들 (재정의하면 안됨)

public class Fianl_Exam {

	
	//Final은 변수(멤버필드, 지역변수)로 선언할 때 반드시 값을 입력
	
	public final int FIANL = 100; // 초기화 할때 값이 입력되는 것을 재입력이라고 판단하여 값이 있어야함
	
	
	public void fMethod() {
		final int F;
		int a;
		F = 10;
//		F = 20;//final 재입력 금지이기 때문에 적용 안됨 
		
	}
}

선언만 해놓으면 인스턴스화되면서 초기값이 만들어지는데 이때 재입력이라고 판단하여 오류


 30. 용어 2

 - interface

    1) interface 클래스 생성시 선언만 하면 구현하는 클래스에서 연산자 블록을 만들어서 직접 사용

    2) default는 공통기능을 가질 수 있게 하는 것 default 접근제한자와 다름

/**
 * 면적 계산을 위한 고정 값 PI와 만들어야할 메소드를 선언해 놓음
 * @author SANGJINYU
 *
 */
public interface IArea {

	public double PI = 3.14;
	
	public void areaCal(double x, double y); //선언만하고 연산자 블록 만들지 않음
	
	default void print(double res) { //1.8부터 가능 공통 기능을 가질 수 있는 default 추가
		System.out.println(res);
	}
		
}
package com.min.edu;

public class Triangle implements IArea {

//	public double result;
	
	
	@Override
	public void areaCal(double x, double y) {
	double	result = x*y*0.5;
		print(result);
	}
}

 


 31. 클래스의 생성과 실행 우선순위

 - 클래스의 구성요소 : 멤버필드, 멤버메소드, 생성자

 

 1) static이 먼저 메모리에 할당 method area

 2) 연산자 블록이 메모리에 할당 method area (멤버메소드가 메모리에 할당 method area )

* 위는 어플리케이션이 실행될 때 단 한번 올라간다.

 3) 생성자가 호출 heap

 


 32. jdk와 jre의 상관관계 

 

 1) 낮은 버전의 jre로 작성된 문서는 상위 jdk를 이용하여 Compile 가능하고 실행또한 가능하다

 2) 높은 버전의 jre로 작성된 문서는 낮은 버전의 jdk로 Compile이 되지 않는다. 즉, *.class파일 생성될 수 없다

 3) 높은 버전의 jre로 작성된 문서는 낮은 버전의 jre로 실행되지 않는다.

 

 => 결론은 IDE에서 JRE의 중요성보다는 JDK의 버전을 배포버전과 맞춰서 Compile해야한다.

 

 

ex) jre 1.6버전 이하에서는 switchcase문 String은 비교대상이 되지 않는다.

(jre 1.6문법에 맞춰 작성하여 jdk 1.7로 컴파일하면 class파일생성은 되지만 1.6에서 class파일 실행하면 실행 안됨

jre 1.7문법에 맞춰 작성 jdk 1.6으로는 컴파일할수 없다 배포가 안됨

 


 33. Switch ~ Case

 1) 1.6이하 JRE에서는 String 객체의 사용이 불가능함

 2) 1.7이상 JRE에서는 String도 비교할 수 있음

 3) key의 타입과 value의 타입은 반드시 같아야함

 4) break; 없을 경우 fall through가 동작되어 선택을 포함하여 모든 하위의 기능이 동작됨

 5) 범위 안됨

switch (key) {
case value:
break;
case value:
break;

default:
break;
}

 

반응형