Javaの基本的な自習ノート-第10章:オブジェクト指向の考え方

第10章:オブジェクト指向の思考

1.オブジェクト指向

1.プロセス指向のパラダイムは設計メソッドにあり、オブジェクト指向のパラダイムはデータとメソッドを結合することにあります。

2.クラスの抽象化とは、クラスの実現がクラスの使用から分離され、実現の詳細がカプセル化されてユーザーから隠されることを意味します。これは、クラスのカプセル化と呼ばれます。

2.クラス間の関係

クラス間の関係は、関連付け、集約、構成、および継承です。

1.関連付け:2つのクラス間のアクティビティを説明する一般的なバイナリ関係

2.集約は、学生と住所などの2つのオブジェクト間の属性関係を表す特殊な形式の関連付けです。1つのオブジェクトは、他の複数の集約オブジェクトが所有できます。

3.オブジェクトが集約されたオブジェクトに属している場合、そのオブジェクトと集約されたオブジェクトの関係は、組み合わせと呼ばれます。例:学生と名前

3.基本タイプをオブジェクトとして扱います

1.基本タイプ:int double char……
パッケージタイプ:整数二重文字……

各ラッパークラスには、オブジェクトを基本型の値に「変換」するためのintValue()、doubleValue()、およびその他のメソッドが含まれています。

基本的な型の値と数値を表す文字列を使用して、ラッパークラスを構築できます

compareTo()メソッドは、以下に対応する1、0、-1を返します。

	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		Integer i = new Integer(3);
		
		Double d = new Double(3.5);
		Double d2 = new Double("3.5");
		Double d3 = new Double("1.5");
		Double d4 = new Double("8.5");
		
		System.out.println(i.intValue());//3
		System.out.println(d.doubleValue());//3.5
		System.out.println(d2.doubleValue());//3.5
		System.out.println(Double.valueOf("6.5"));//6.5
		System.out.println(d.compareTo(d2));//0
		System.out.println(d.compareTo(d3));//1
		System.out.println(d.compareTo(d4));//-1
	}

文字列を2進数、8進数、10進数、16進数に変換します

        //语法:
        Integer i=Integer.parseInt(字符串,进制)//进制可以为2,8,10,16

		int i2=Integer.parseInt("011", 2);
		System.out.println(i2);//3

        //转换为16进制的第二种方法
        System.out.println(String.format("%x", 26));//1a


パッケージングクラスにはパラメータのない構造がないことに注意してください

2.ベーシックタイプとパッケージングタイプ間の自動変換
ベーシック->パッケージング(ボクシング)
パッケージング->ベーシック(ボックス化解除

Integer x=new Integer(2);//等价于 Integer x=2 (自动装箱)

//但是:
Double d=3;//错误
Double d=3.0//正确

Four。BigIntegerおよびBigDecimalオブジェクト

1.BigIntegerクラスとBigDecimalクラスは、任意のサイズと精度の整数または10進数を表すことができます。

2.新しいBigInteger(文字列)によって作成されました

	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		BigInteger bi = new BigInteger("1234567845678984327");
		System.out.println(bi);//1234567845678984327

		BigDecimal bd = new BigDecimal("3.14159265358979323846264338327950288");
		System.out.println(bd);//3.14159265358979323846264338327950288
	}

3.加算、減算、乗算、除算の残差を使用して、加算、減算、乗算、および除算の残差操作を実行します。

4.注:
結果を終了できない場合、BigDecimalは例外をスローします。オーバーロードされた除算を使用できます(BigDecimal d、小数点以下の桁数、除数)

	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
    System.out.println(fact(50));//返回50的阶乘结果
    //608281864034267560872252163321295376887552831379210240000000000
	}
	public static BigInteger fact(long x) {
    
    
		BigInteger sum=BigInteger.ONE;//BigInteger.ONE=1;
		for(int i=1;i<x;i++) {
    
    
			sum=sum.multiply(new BigInteger(i+""));//使用multiply做乘法
		}
		return sum;
	}

Five.Stringクラス

Stringオブジェクトは不変です。文字列が作成されると、コンテンツを変更することはできません
。Stringクラスには、文字列を処理するための13の構築メソッドと複数のメソッドがあります。

    char[] c= {
    
    'j','a','v','a'};
    String s=new String(c);
    System.out.println(s);//java

    String s1="welcome";//创建了一个对象,将Welcome放入了常量池中
    String s2=new String("welcome");//新的对象   如果常量池中不存在welcome,则词语局创建了两个对象,分别是将Welcome放入常量池中,将new的对象放入堆中
    String s3="welcome";//和s1指向同一个地址
    System.out.println(s1==s2);//false
    System.out.println(s1==s3);//true

文字列の一般的なメソッド:

    String s="hello java";
    System.out.println(s.replace('a', 'e'));//hello jeve
    System.out.println(s.replaceFirst("l", "y"));//heylo java
    System.out.println(s.replaceAll("l", "y"));//heyyo java
    String[] list=s.split("o");
    for(String i:list)
    System.out.print(i+" ");//hell   java

6.通常の表現

通常の表現:パターンを使用して文字列を照合、置換、分割します

文字列を文字配列に変換します。

    String s="hello java";
    char[] a=s.toCharArray();
    for(char i:a)
    System.out.print(i+" ");//h e l l o   j a v a 


上記のように、配列を文字列に変換します

通常、matches、replace、replaceAll、およびその他の方法を使用します。より包括的なBaidu用にプログラムすることをお勧めします。

7.StringBuilderおよびStringBufferクラス

1. StringBuilderクラスとStringBufferクラスに新しいコンテンツを追加、挿入、および追加できます。

2. StringBufferは、バッファーを同期的に変更し、StringBuilderが単一のタスクをより効率的に実行し、残りの2つはまったく同じであるため、複数のタスクの同時実行に適しています。

3. StringBuilderには、文字列を処理するための3つの構築メソッドと30を超えるメソッドがあります。

    StringBuilder s=new StringBuilder();//创建一个容量为16的空字符串构造器
    StringBuilder s2=new StringBuilder(20);//指定容量
    StringBuilder s3=new StringBuilder("hello java");//指定字符串
    
    System.out.println(s.capacity());//16
    System.out.println(s2.capacity());//20

促す:

文字列を変更する必要がない場合は、文字列を使用します。文字列は共有文字列を最適化するためです。

コンピューターでは、文字列コンストラクターは文字配列であり、コンストラクターの容量は配列のサイズです。容量を超えると、容量2 *(既存の容量+ 1)の配列が作成されます。

容量が大きすぎる場合は、trimToSize()を使用して容量を実際のサイズに減らすことができます

次の例では、文字列とその反転が実際に等しいことがわかります。

    StringBuilder s=new StringBuilder("java is fun");
    System.out.println(s.reverse());//nuf si avaj
    System.out.println(s.equals(s.reverse()));//true

その理由は、StringBuilderがequalsメソッドをオーバーライドせず、常に元のオブジェクトを指す
ためです。比較を行うには、toStringメソッドを追加する必要があります。

    System.out.println(s.toString().equals(s.reverse().toString()));//false

StringBuilderの他のメソッドはあまり導入されず、将来頻繁に使用されます

[後の補足] -2020-03-06

1. Stringクラスの内容は変更されません
。StringBuilderは動的に文字列を作成でき、スレッドに安全でない
StringBufferは動的に文字列を作成できます。これはスレッドセーフです。

2.速度とメモリ消費の観点からの3つの比較
速度:StringBuilder> StringBuffer> String
メモリ:String> StringBuffer> StringBuilder

	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		StringBuilder s = new StringBuilder();
		long remain1 = Runtime.getRuntime().freeMemory();// 剩余内存
		long begin = System.currentTimeMillis();
		for (int i = 0; i < 5000; i++) {
    
    
			s.append(i);
		}
		long end = System.currentTimeMillis();
		long remain2 = Runtime.getRuntime().freeMemory();// 字符串拼接完成后剩余内存
		System.out.println("使用毫秒数:" + (end - begin) + "\t使用内存:" + (remain1 - remain2));
//结果:StringBuilder:使用毫秒数:10	使用内存:1032240
     //StringBuffer:使用毫秒数:12	使用内存:1032240
     //String:使用毫秒数:4196	使用内存:-114659128
	}

3.シナリオを使用します。

  • 少量のデータは文字列を変更しません-文字列
  • シングルスレッドの文字列バッファで大量のデータを操作する-StringBuilder
  • マルチスレッド操作で大量のデータを操作するstringbuffer-StringBuffer

8.まとめ

この章の学習を通じて、オブジェクト指向の特性とクラスの4つの関係について学び、基本タイプとパッケージタイプの相互変換、自動ボックス化とボックス化解除、BigIntegerクラスとBigDecimalクラスの基本的な使用法を学びました。 Stringクラスの文字列の処理と保存のメカニズムに到達した後、StringBuilderとStringBufferの相違点と類似点を学びました。これは文字列のフルサービスと言え、それぞれに長所と短所があります。正規式については、この章でのみ説明します。非常に便利な機能ですが、能力が限られており、説明が十分に網羅されていないのではないかと心配です。バイドゥのこの側面を大量にプログラムすることができます。

いい加減にして!第11章もっとなるために...

おすすめ

転載: blog.csdn.net/weixin_42563224/article/details/104344271