슬라이드 1

Similar documents
PowerPoint Presentation

JAVA PROGRAMMING 실습 08.다형성

PowerPoint Presentation

PowerPoint Presentation

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

PowerPoint Presentation

슬라이드 1

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

슬라이드 1

Design Issues

PowerPoint Presentation

Microsoft PowerPoint - 2강

JAVA PROGRAMMING 실습 05. 객체의 활용

07 자바의 다양한 클래스.key

유니티 변수-함수.key

슬라이드 1

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

gnu-lee-oop-kor-lec06-3-chap7

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

비긴쿡-자바 00앞부속

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 02. 표준 입출력

PowerPoint 프레젠테이션

PowerPoint Presentation

슬라이드 1

Microsoft PowerPoint - Chapter 6.ppt

PowerPoint Presentation

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

슬라이드 1

PowerPoint 프레젠테이션

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

PowerPoint Presentation

JAVA PROGRAMMING 실습 02. 표준 입출력

02 C h a p t e r Java

PowerPoint Template

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - Lect04.pptx

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

Microsoft PowerPoint - chap03-변수와데이터형.pptx

JAVA PROGRAMMING 실습 02. 표준 입출력

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

금오공대 컴퓨터공학전공 강의자료

05-class.key

Microsoft PowerPoint - Java7.pptx

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

슬라이드 1

PowerPoint Presentation

제11장 프로세스와 쓰레드

JAVA PROGRAMMING 실습 05. 객체의 활용

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

(Microsoft PowerPoint - java2-lecture3.ppt [\310\243\310\257 \270\360\265\345])

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

Microsoft PowerPoint - lec2.ppt

교육자료

쉽게

PowerPoint Presentation

JAVA PROGRAMMING 실습 09. 예외처리

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Network Programming

Microsoft PowerPoint - lec7_package [호환 모드]

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

Microsoft PowerPoint - Chap12-OOP.ppt

Microsoft PowerPoint - 13_UMLCoding(2010).pptx

JUNIT 실습및발표

PowerPoint Presentation

rmi_박준용_final.PDF

Cluster management software

Microsoft Word - EEL2 Lab4.docx

Microsoft Word - java19-1-midterm-answer.doc

슬라이드 1

12-file.key

Microsoft PowerPoint - hci2-lecture4 [호환 모드]

TEST BANK & SOLUTION

Spring Boot/JDBC JdbcTemplate/CRUD 예제

PowerPoint Presentation

PowerPoint 프레젠테이션

gnu-lee-oop-kor-lec11-1-chap15

쉽게 풀어쓴 C 프로그래밊

Microsoft PowerPoint - 04-UDP Programming.ppt

Java ...

슬라이드 1

untitled

ilist.add(new Integer(1))과 같이 사용하지 않고 ilist.add(1)과 같이 사용한 것은 자바 5.0에 추가된 기본 자료형과 해당 객체 자료 형과의 오토박싱/언박싱 기능을 사용한 것으로 오토박싱이란 자바 컴파일러가 객체를 요구하는 곳에 기본 자료형

자바 프로그래밍

PowerPoint Presentation

4장.문장

Microsoft PowerPoint - additional06.ppt [호환 모드]

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

1

Transcription:

10. 숫자와정적변수, 정적메소드 학습목표 정적메소드와정적변수상수래퍼클래스포매팅

숫자는정말중요합니다 Math 클래스 출력방식조절 String 을수로변환하는방법 수를 String 으로변환하는방법 정적메소드 정적변수 상수 (static final)

Math 메소드 거의 전역메소드 (global method) 인스턴스변수를전혀사용하지않음 인스턴스를만들수없음 Math mathobject = new Math(); int x = Math.round(42.2); int y = Math.min(56, 12); int z = Math.abs(-343); % javac TestMath.java TestMath.java:3:Math() has private access in java.lang.math Math mathobject = new Math(); ^ 1 error

일반메소드와정적메소드 일반메소드 public class Song { String title; public Song(String t) { title = t; public void play() { SoundPlayer player = new SoundPlayer(); player.playsound(title); t2 Song t2.play(); 말해줄께조규찬 Song 객체 s3 Song s3.play(); Song String title play() 보고싶다김범수 Song 객체

일반메소드와정적메소드 정적메소드 (static method) public static int min(int a, int b) { // a 와 b 중에서더작은것을리턴 Math min() max() abs() Math.min(42, 36); 정적메소드를호출할때는클래스명을, 정적메소드가아닌메소드를호출할때는레퍼런스변수명을사용 객체가없다!!

인스턴스를만들수없는메소드 추상클래스 생성자를 private 으로지정한클래스 정적메소드만들어있는클래스는생성자를 private 으로지정하여인스턴스를만들수없도록하는것이좋습니다. 정적메소드가있다고해서무조건인스턴스를만들수없도록하진않습니다.

정적메소드와인스턴스변수 정적메소드에서는인스턴스변수를쓸수없음 정적변수만써야함 public class Duck { private int size; public static void main(string[] args) { System.out.println( Size of duck is + size); public void setsize(int s) { size = s; public int getsize() { return size; % javac Duck.java Duck.java:4: non-static variable size cannot be referenced from a static context System.out.println( Size of duck is + size); ^

정적메소드에서의메소드호출 정적메소드에서는정적메소드만호출할수있습니다. public class Duck { private int size; public static void main(string[] args) { System.out.println( Size of duck is + getsize()); public void setsize(int s) { size = s; public int getsize() { return size; % javac Duck.java Duck.java:4: non-static method getsize() cannot be referenced from a static context System.out.println( Size of duck is + getsize()); ^

바보같은질문은없습니다. 클래스명이아니라레퍼런스변수명을써서정적메소드를호출하는건어떻게된건가요? 그렇게하는것도가능합니다. 하지만그런다고해서그메소드가인스턴스메소드인것은아닙니다. Duck d = new Duck(); String[] s = {; d.main(s);

정적변수 정적변수 (static variable) 어떤인스턴스에서도값이똑같은변수 class Duck { int duckcount = 0; public Duck() { duckcount++; public class Duck { private int size; private static int duckcount = 0; public Duck() { duckcount++; public void setsize(int s) { size = s; public int getsize() { return size;

정적변수 정적변수는공유됨 같은클래스에속하는모든인스턴스에서정적변수의하나뿐인복사본을공유함 인스턴스변수 인스턴스마다하나씩 정적변수 클래스마다하나씩

정적변수초기화 초기화시기 클래스가로딩될때 두가지규칙 객체가생성되기전에초기화됨 정적메소드가실행되기전에초기화됨 % java PlayerTestDrive 0 1 class Player { static int playercount = 0; private String name; public Player(String n) { name = n; playercount++; public class PlayerTestDrive { public static void main(string[] args) { System.out.println(Player.playerCount); Player one = new Player( Tiger Woods ); System.out.println(Player.playerCount);

상수 static final 변수 == 상수 public static final double PI = 3.141592653589793; 상수변수명은모두대문자로씀 정적초기화부분 (static initializer) class Foo { final static int x; static { x = 42;

static final 변수초기화방법 선언할때초기화 public class Foo { public static final int FOO_X = 25; 정적초기화부분에서초기화 public class Bar { public static final double BAR_SIGN; static { BAR_SIGN = (double) Math.random(); % javac Bar.java Bar.java:1: variable BAR_SIGN might not have been initialized 1 error

final 키워드 변수를 final 로지정하면그값을바꿀수없음 메소드를 final 로지정하면오버라이드할수없음 클래스를 final 로지정하면확장할수없음 class Foof { final int size = 3; final int whuffie; Foof() { whuffie = 42; void dostuff(final int x) { void domore() { final int z = 7; class Poof { final void calcwhuffie() { final class MyMostPerfectClass {

바보같은질문은없습니다 클래스를 final 로지정하는경우는? 보안문제때문에이렇게하는경우가종종있습니다. String 같은클래스를누군가가확장해서 String 객체가들어갈자리에다형성을이용해서하위클래스를집어넣으면보안에심각한구멍이생길수도있습니다. 어떤클래스의특정메소드를반드시있는그대로써야한다면클래스를 final 로지정해서확장할수없도록하면됩니다.

Math 메소드 Math.random() 0.0 이상 1.0 미만의 double 값리턴 double r1 = Math.random(); int r2 = (int) (Math.random() * 5); Math.abs() 절대값을리턴 int x = Math.abs(-240); double d = Maht.abs(240.45); Math.round() 반올림하여 int 또는 long 을리턴 int x = Math.round(-24.8f); int y = Math.round(24.45f); Math.min() 두인자중더작은값리턴 int x = Math.min(24, 490); double y = Math.min(90876.5, 90876.49); Math.max()

래퍼 (wrapper) 클래스 래퍼클래스 각원시유형에해당하는객체 Boolean Character Byte Short Integer Long Float Double int x = 32; ArrayList list = new ArrayList(); list.add(x); int i = 288; Integer iwrap = new Integer(i); int unwrapped = iwrap.intvalue();

오토박싱과원시 / 객체유형 자바 5.0 이전 public void donumsoldway() { ArrayList listofnumbers = new ArrayList(); listofnumbers.add(new Integer(3)); Integer one = (Integer) listofnumbers.get(0); int intone = one.intvalue(); 자바 5.0 이후 ( 오토박싱을쓰는경우 ) 원시유형 래퍼객체변환을자동으로처리 public void donumsnewway() { ArrayList<Integer> listofnumbers = new ArrayList<Integer>(); listofnumbers.add(3); int num = listofnumbers.get(0);

오토박싱이작동하는경우 메소드인자 void takenumber(integer i) { 리턴값 int givenumber() { return x; 부울표현식 if (bool) { System.out.println( true ); 수에대한연산 Integer j = new Integer(5); Integer k = j + 3; 대입 Double d = x;

래퍼클래스의정적유틸리티메소드 String 을원시값으로바꾸는방법 String s = 2 ; int x = Integer.parseInt(s); double d = Double.parseDouble( 420.24 ); boolean b = new Boolean( true ).booleanvalue(); String t = two ; int y = Integer.parseInt(t);

원시숫자를 String으로바꾸는방법 String 의 + 연산자를활용하는방법 double d = 42.5; String doublestring = + d; 유틸리티메소드를사용하는방법 double d = 42.5; String doublestring = Double.toString(d);

숫자포매팅 자바에서는숫자포매팅기능과입출력기능이분리되어있습니다. 포매팅방법 1. 포매터를만듭니다. 2. 포매팅시킵니다. public class TestFormats { public static void main(string[] args) { String s = String.format( %,d, 1000000000); System.out.println(s); 1,000,000,000

숫자포매팅 format( I have %.2f bugs to fix., 476578.09876); I have 476578.10 bugs to fix. format( I have %,.2f bugs to fix., 476578.09876); I have 476,578.10 bugs to fix. %[ 인자번호 ][ 플래그 ][ 너비 ][. 정밀도 ] 유형 format( %,6.1f, 42.000); 유형지시자 %d 십진수 %f 부동소수점수 %x 16진수 %c 문자

날짜포매팅 String.format( %tc, new Date()); 날짜, 시각모두 Sun Nov 28 14:52:41 MST 2004 String.format( %tr, new Date()); 시각만 03:01:47 PM Date today = new Date(); 요일, 월, 일 String.format(%tA, %tb, %td, today, today, today); Sunday, November 28 String.format(%tA, %<tb, %<td, today); today 를한번만인자로전달하면됨

java.util.calendar java.util.date 보다는 java.util.calendar 를써야함 표준 API 에서는대부분 java.util.gregoriancalendar 를사용 현재시각에대한타임스탬프용으로는계속 java.util.date 를써도됨 Calendar 객체생성법 Calendar cal = new Calendar(); 에러!!! Calendar cal = Calendar.getInstance();

import static 구문 자바 5.0 에서새로추가된문법 정적클래스나정적변수, 열거형 (enum) 을쓸때 import static 구문을쓸수있음 코드를읽기가힘들어질수있으므로주의!! import static java.lang.system.out; import static java.lang.math.*; class WithStatic { public static void main(string [] args) { out.println( sqrt + sqrt(2.0)); out.println( tan + tan(60));

숙제 본문을꼼꼼하게읽어봅시다. 연필을깎으며, 두뇌운동및 10 장끝에있는연습문제를모두각자의힘으로해결해봅시다. 포매팅관련코드들을실행시켜보면서어떤결과가나오는지확인해보고, 조금씩고쳐가면서포매팅연습을해봅시다. API 문서를살펴보면서또어떤다른메소드들이있는지확인해봅시다.