Day07:Java核心类

Java核心类

字符串和编码

String 字符串

实际上字符串在String内部是一个char[]数组。字符串是不可变的。

字符串的比较: 必须使用equals()方法。要忽略大小写比较,使用

equalsIgnorecase()。

String的不变性设计可以看出,如果传入的对象有可能改变,我们需要复制而不是直接引用。

字符串的操作不改变原字符串内容、而是返回新字符串

注意以下两段代码的区别:

 public class Main {
     public static void main(String[] args) {
         int[] scores = new int[] { 88, 77, 51, 66 };
         Score s = new Score(scores);
         s.printScores();
         scores[2] = 99;
         s.printScores();
    }
 }
 
 class Score {
     private int[] scores;
     public Score(int[] scores) {
         this.scores = scores;
    }
 
     public void printScores() {
         System.out.println(Arrays.toString(scores));
    }
 }
 --------------------------------------------
  public class Main {
     public static void main(String[] args) {
         int[] scores = new int[] { 88, 77, 51, 66 };
         Score s = new Score(scores);
         s.printScores();
         scores[2] = 99;
         s.printScores();
    }
 }
 
 class Score {
     private int[] scores;
     public Score(int[] scores) {
      int[] newscores=new int[scores.length];
         for(int i=0;i<scores.length;i++)
             newscores[i]=scores[i];
         this.scores=newscores;
    }
 
     public void printScores() {
         System.out.println(Arrays.toString(scores));
    }
 }
 

 

字符编码

  • ASCII 英文

  • GB2312 中文

  • Unicode 全球统一

  • UTF-8 把固定长度的Unicode变成1~4字节的UTF-8编码。

StringBuilder

Java标准库提供了StringBuilder,它是一个可变对象,可以预分配缓冲区,这样,往StringBuilder中新增字符时,不会创建新的临时对象。

没搞懂这些东西,廖雪峰的练习涉及到数据库了,以后再看。

.append() 可以用来链式拼接字符串,好像用的很多,不太理解。

var 类型 java10版本新出特性,声明时赋值。代码更加简洁。

StringJoiner

用来给字符串添加分隔符,例如

  var sj= new StringJoiner(",")

还可以加开头和结尾,例如加上 hello,bye

 var sj=new StringJoiner(","," Hello","Bye");

String.join() 在不需要添加开头和结尾的时候可以用

 String[] names={"Bob","Alice","Grace"};
 
    var s=String.join(",",names);

包装类型

想要把int基本类型变成一个引用类型,我们可以定义一个Integer类,它只包含一个实例字段int,这样,Integer类就可以视为int的包装类

可以写一个方法,返回该int型的实例字段。

 public class Integer {
     private int value;
 
     public Integer(int value) {
         this.value = value;
    }
 
     public int intValue() {
         return this.value;
    }
     Integer n = null;
 Integer n2 = new Integer(99);
 int n3 = n2.intValue();

包装类型非常有用,Java核心库为每种基本类型都提供了对应的包装类型

 Integer n = new Integer(100);
 Integer n=Integer.valueOf(100);

推荐使用第二种方法创建。

Integer.valueOf是静态工厂方法,它尽可能地返回缓存的实例以节省内存。

所有的整数和浮点数的包装类型都继承自Number类,可以非常方便地直接通过包装类型获取各种基本类型

 // 向上转型为Number:
        Number num = new Integer(999);
 // 获取byte, int, long, float, double:
        byte b = num.byteValue();
        int n = num.intValue();
        long ln = num.longValue();
        float f = num.floatValue();
        double d = num.doubleValue();

JavaBean

get和set方法称为读写属性。

只有getter是只读,只有setter是只写。

枚举类enum

 enum Weekday {
     SUN, MON, TUE, WED, THU, FRI, SAT;
 }

虽然是引用类型,但枚举类可以用“ == ”比较。

特点

  • 定义的enum类型总是继承自java.lang.Enum,且无法被继承;

  • 只能定义出enum的实例,而无法通过new操作符创建enum的实例;

  • 定义的每个实例都是引用类型的唯一实例;

  • 可以将enum类型用于switch语句。

  • enum的构造方法要声明为private,字段强烈建议声明为final

记录类

BigInteger

任意大小的数,可以超过long,超过64位。暂时用不到

BigDecimal

任意大小且精度完全准确的浮点数。

常用工具类

Math

 求绝对值:Math.abs();
 取最大或最小值:Math.max();  Math.min();
 计算x^y次方:Math.pow(2,10); 2的10次方
 计算√x:Math.sqrt();
 计算e^x次方:Math.exp();
 计算以e为底的对数:Math.log(4);
 计算以10为底的对数:Math.log10();  
 三角函数:Math.sin();
  Math.cos();
  Math.tan();
 几个数学常量:Math.PI  // 3.14159...  
      Math.E   // 2.7182818
 生成一个随机数x,x的范围是0<= x< 1:Math.random();

Random 创建伪随机数

 Random r=new Random();
  r.nextInt();   //生成随机数

创建Random实例时,如果不给定种子,就使用系统当前时间戳作为种子,因此每次运行时,种子不同,得到的伪随机数序列就不同。

如果我们在创建Random实例时指定一个种子,就会得到完全确定的随机数序列

SecureRandom

创建安全的随机数。

 

posted @ 2021-10-13 23:08  027code  阅读(206)  评论(0)    收藏  举报