LoginSignup
1
6

More than 5 years have passed since last update.

JavaGoldのためのかゆいところに手が届く備忘録

Last updated at Posted at 2017-02-05

2017/02/09 時間・日付 を追加

対象

javaGoldを狙う方
javaSilverの理解はできている方

概要

かゆいところに手が届く部分を中心にまとめる
内部クラスとか匿名クラスとか
備忘録を兼ねてますので、コメントや変数名の誤字脱字はご容赦ください(笑)
随時更新予定

static

static_.java
public class static_ {
    int x;
    static int y;

    //動的メソッドからstaticインスタンスへのアクセス
    void doA(){
        x=1; //OK
        y=2; //OK
    }

    static void doB(){
//        x=1; //NG
        y=2; //OK
    }
}

final

final_.rjava
//finalクラス
//継承不可
final class final_{

    //finalフィールド
    //再代入不可
    final int x = 0;

    //finalメソッド
    //オーバーライド不可
    final void doIt() {

        //finalローカル変数
        //再代入不可
        final int y = 1;

        //以下、コンパイルエラー
        /*
        x = 10;
        y = 10;
    }
}
class temp extends finalMethod {

    @Override
    public void doIt(){

    }
    */
    }
}

abstract

abstract_.rjava
abstract class A{
    void X (){};
    abstract void y();
//    void Z(); //abstractは必ずつけること
}
/* NG 抽象クラスはしっかり実装していないといけない
public class B extends A{
}
*/

//OK
abstract class C extends A{
    void y(){
        System.out.println("###");
    }
}

内部クラス

naibu.java
public class naibu {

    //以下、入れ子クラス

    //①staticめんばー・クラス
    static class X {}

    //②メンバークラス
    private class Y{}

    void doIt(){
        //③ローカルクラス
        class Z{}
    }

    //内部クラスの呼び出し
    public static void main(String args[]){

        Outer.Inner in = new Outer().new Inner();
        in.doIt();

        Outer.Inner.Inner2 in2 = new Outer().new Inner().new Inner2();
        in2.doIt();
    }
}

class Outer{

    public class Inner{

        public void doIt(){
            System.out.println("Outer->Inner");
        }

        public class Inner2{
            public void doIt(){
                System.out.println("Outer->Inner->Inner2");
            }
        }
    }
}

interfaceのdefault・static

interface_.java
public class interface_ {
    public static void main(String[] args){

        //staticメソッド
        Bar bar = new Bar();
        Foo.doA();
//        Bar.doA();//NG 実装クラス→staticのため
//        bar.doA();//NG 実装クラス→staticのため

        //defaultメソッド
        bar.doB();

    }
}

interface Foo {
    //内部でpublic static finalで修飾されている
    int interfaceMenba =10;
    public static final int interfaceMenba2 = 10;

    //通常の抽象メソッド
    //内部でpublic abstractで修飾されている
    void doZ();

    //staticメソッド
    static void doA() {
        System.out.println("static");
    }

    //defaultメソッド
    default void doB() {
        System.out.println("default");
    }


}
class Bar implements Foo {
     public void doZ(){
        System.out.println("doZ");
    }
}

匿名クラス

anonymous.java
public interface anonymous {
    public void doIt();
}

class anonymousImpl{
    public static void main (String[] args){

        //匿名クラスによて、宣言と同時に実装(実行はしていない)
        anonymous A = new anonymous() {
            public void doIt() {
                System.out.println("匿名クラスによるクラスの宣言");
            }
        };

        // 実行するだけだと、より簡略化
        new anonymous(){
            public void doIt(){
                System.out.println("匿名クラスによる実行");
            }
        }.doIt();
        //↑ここがポイント
    }
}

列挙型

rekkyo.java
public class rekkyo {
    //入れ子の列挙型
    public enum singou {
        GREEN, RED, YELOW
    }

    public static void main(String[] args) {
        //列挙型をすべて列挙
        for (singou2 s : singou2.values()) {
            System.out.println(s.name() + "#");
        }

        //列挙型の宣言とフィールドの参照
        Souldout so = Souldout.bro_hi;
        System.out.println(so.getV() + "#" + so);
    }
}

//トップレベルの列挙型
enum singou2 {
    GREEN, RED, YELOW;
    //列挙型内に変数・メソッドを置くことができる
    private int a;
    public int b;

    public int add(int a, int b) {
        return a + b;
    }

}

enum Souldout {
    //コンストラクタ付きの列挙型↓
    diggy_mo(2), sinnosuke(3), bro_hi(5);
    private int nenrei;

    //コンストラクタはprivateでなければならない
//    public Souldout(){
//    }
    private Souldout() {

    }

    private Souldout(int v) {
        this.nenrei = v;
    }

    public int getV() {
        return nenrei * 100;
    }
}

//インターフェースを実装することは可能
interface temp {
    void doItIt();
}
enum singou3 implements temp {
    GREEN, RED, YELOW;

    public void doItIt() {
        System.out.println("####");
    }
}

//ただし、クラスの継承は不可
class temp2 {
    int a;
}
/*
enum singu4 extends temp2{
}
*/

時間・日付

2017/02/06更新

DATE.java
import java.time.*;
import java.time.temporal.ChronoUnit;
import java.time.temporal.Temporal;
import java.time.temporal.TemporalAccessor;

import static java.time.temporal.ChronoUnit.DAYS;
import static java.time.temporal.ChronoUnit.MONTHS;
import static java.time.temporal.ChronoUnit.WEEKS;

public class DATE {
    public static void main(String[] args){

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //LocalDate・LocalDateTime
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //インスタンス作成は、以下の方法がある
        LocalDate ld = LocalDate.now();
        ld = LocalDate.of(2016, Month.MARCH,10); //  Month.MARCH ⇔ 2
        ld = LocalDate.parse("2016-12-12");
        //ld = new LocalDate();                //NG

        LocalDateTime ldt = LocalDateTime.now();

        //isBeforeメソッド
        //isAfterメソッド
        //System.out.println(ldt.isAfter(ld));  //NG  LocalDate と LocalDateTime
        //System.out.println(ld.isAfter(ldt));  //NG LocalDateTime と LocalDate
        System.out.println(LocalDate.now().isAfter(ld)); //OK

        //ldt = LocalDateTime.from(ld);  //NG LocalDateからLocalDateTimeにするには時間情報が必要!
        ld = LocalDate.from(ldt);       //OK   LocalDateTimeからLocalDateは時間情報は不要

        System.out.println(ldt.plus(5,MONTHS)
                + "#" + ldt.minus(365,DAYS)
                + "#" + ldt.until(ldt.plus(10,WEEKS),WEEKS));

        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //Temporal ←(継承)― TemporalAccessor ←(実装)― ChronoUnit
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
        TemporalAccessor ta =ChronoUnit.DAYS.addTo(LocalDate.now(),10);
        Temporal t =ChronoUnit.DAYS.addTo(LocalDate.now(),10);

        //LocalDateTimeとLocalDateTimeの互換性はない
        //long days = ChronoUnit.DAYS.between(LocalDateTime.now(),LocalDate.now().plus(5,DAYS));  //NG
        long days = ChronoUnit.DAYS.between(LocalDate.now(),LocalDate.now().plus(5,DAYS));          //OK

        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //Period 日付の期間をあらわす
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        Period p = Period.between(LocalDate.now(),LocalDate.now().plus(5,WEEKS));
        //Periodの中身をみる
        System.out.println(p.getDays());
        //さらにPeriodに期間を追加・削除も可能
        Period newP = p.minusDays(10);
        //Periodからaddすることもsubtractも可能
        LocalDate ld2 =(LocalDate) p.addTo(ld);
        ld2 =(LocalDate) p.subtractFrom(ld);
        //Period同士の加算・減算も可能
        Period p2 = p.plus(Period.ofDays(5));
        Period p3 = p.minus(Period.ofDays(5));

        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //Duration 日付の期間をあらわす
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        Duration d = Duration.between(LocalDateTime.now(),LocalDateTime.now().plusDays(1));
        System.out.println(d);
        d = Duration.of(1,ChronoUnit.MINUTES);
        System.out.println("nanos" + d.getNano());
        System.out.println("seconds" + d.getSeconds());

        DateTimeFormatter dtf_bid = DateTimeFormatter.BASIC_ISO_DATE;
        DateTimeFormatter dtf_idt = DateTimeFormatter.ISO_DATE_TIME;
        DateTimeFormatter dtf_ii = DateTimeFormatter.ISO_INSTANT;
        DateTimeFormatter dtf_original = DateTimeFormatter.ofPattern("yyyy_MM_dd_hh_mm_ss"); //独自の表示形式を定義

        System.out.println(
                dtf_bid.format(LocalDateTime.now())
                + "#" +dtf_idt.format(LocalDateTime.now())
                //+ "#" + dtf_ii.format(LocalDateTime.now())  //NG
                + "#" + dtf_original.format(LocalDateTime.now()));


        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //Instant  ある時点からの累計の秒数・ミリ秒数・ナノ秒数を持つクラス
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //ある時点とは↓
        System.out.println(Instant.EPOCH);  //1970年1月1日0時0分0秒

        //インスタンス取得
        Instant i1 = Instant.ofEpochMilli(51455414);
        Instant i2 = Instant.ofEpochSecond(51455414);
        Instant i3 = Instant.ofEpochSecond(51455414,2515);  // 第二引数はミリ秒
        //Instant instant = Instant.from(LocalTime.now());   //NG Unsupported

        //秒数・ミリ秒数・ナノ秒数の取得
        System.out.println(Instant.now().getEpochSecond());  //get
        System.out.println(Instant.now().toEpochMilli());    //to (なぜこれだけto?)
        System.out.println(Instant.now().getNano());         //get

        System.out.println(Instant.ofEpochMilli(500000));

        //各種TemporalからInstantへ
        //OffsetDateTimeから、toInstant()で取得
        OffsetDateTime odt = OffsetDateTime.now();
        System.out.println(odt.toInstant());
        //ZonedDateTimeから、toInstant()で取得
        System.out.println(ZonedDateTime.now(ZoneId.systemDefault()).toInstant());
        //LocalDateはoffsetを持たないので、instantを計算する際に、設定する必要あり
        System.out.println(LocalDateTime.now().toInstant(ZoneOffset.UTC));
    }
}

1
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
6