给大忙人看的Java核心技术笔记(1、基本的编程结构)

时间:2022-12-28 13:34:38

1、基本数据类型

  整型:int(+-20亿),long,short,byte(-128~127)

    Integer.MIN_VALUE,Integer.MAX_VALUE

    如果long不够用可以用BigInteger

    在Java中,整型的范围不依赖于程序所运行的机器。

      可以给数字添加下划线使得阅读更容易,如:

      int A = 100_000;

  浮点类型

    现在浮点类型默认使用double,float类型有个F后缀(3.14F)。没有F后缀的浮点类型默认为double,可以使用D为后缀(3.14D)

    Double.POSITIVE_INFINITY代表正无穷,Double.NEGATIVE_INFINITY代表负无穷,Double.NaN代表“非数值”。比如1.0/0.0,0.0/0.0,负数的平方根=NaN。

    浮点数不适合做金融计算,会有舍入误差。

    2.0-1.1 = 0.899999999999;1/10没有精确的二进制表示。应该使用BigDecimal!

  char型

    4A表示Unicode字符U+004A 拉丁字符J,可以写成\u004A(使用\u前缀)

    \n,\r,\t,\b代表换行、回车、tab、退格。

    在不同系统下换行符不同,window下是/r/n。Linux下是/n。可以使用

  

1 //从当前系统中获取换行符,默认是"\n"  
2 String lineSeparator = System.getProperty("line.separator", "\n");  
3   
4 String[] arr = fileContet.splite(lineSeparator );  

  布尔型

    在Java中布尔型不是数字类型。布尔型与整数0和1没有关系。

 

2、变量

  名称

    变量名中符号$是专门用在自动产生的名称中,不应使用。大小写敏感,名称不能使用空格或者符号,也不能使用关键字。

  尽量晚的声明变量

3、常量

  关键字final表示一个值,一旦赋值就不能改变。根据习惯常量的名称使用大写字母。也可以在方法外,使用static关键字声明常量。

1   public static final int DAYS_PER_WEEK=7;//直接写在类中
2 
3   final int DAYS_PER_WEEK=7;//写在类的方法里面

 

  final变量可以延迟初始化。只要在首次使用前被初始化即可。

  

1 final int DAYS_IN_FEBRUARY;
2 if(leapYear){
3     DAYS_IN_FEBRUARY = 29;
4 }else{
5     DAYS_IN_FEBRUARY = 28;   
6 }

 

  基本运算:17/5 = 3   ,    17.0/5 = 3.4.

    整数除以0会抛异常,浮点数除以0返回无限值或NaN

    在使用%运算的时候要注意负数的处理:

      一般。避免负数用(((position+adjustment)%12)+12)%12保证结果为0~11之间的数。

        【java有strictfp修饰符,保证所有浮点运算都是严格可移植的,现代处理器有的使用了超过64bit的浮点寄存器,增加速度,减少溢出风险。】

  数学方法:p15

  字符串比较

    用string.equals。

    在java虚拟机中,每个文字串只有一个实例,因此“world” == “world”,若是字符串是计算的来的,一定不是一个对象。

    比较字符串和文字串时,将文字串放在前面,防止空指针异常

      if(“world”.equals(location)|| null == location)

  String API

    在java中,String类是不可变的(immutable)。任何String方法都不能修改自己的字符串。会返回修改后的另一个对象!

  编码点和编码单元(Unicode)

    每个有效的Unicode值称为编码点。str.codePointAt(str.offsetByCodePoints(0,i));P26

  读取输入

    

Scanner in = new Scanner(System.in);
System.out.println("Input name :");
//读一行
String name = in.nextLine();
//读一个单词,空格分隔
String name = in.next();
//读整数
if(in.hasNextInt()){
  int age = in.nextInt();          
}
//读取密码不用Scanner类,可以用Console类
Console terminal = System.console();
String userNm = terminal.readLine("User name: ");
char[] pwd = terminal.readPassword(Password: );
//密码用char[]比String安全,用完后可以重写char[]!!!!!
//让System.in和System.out分别从input.txt读写入output.txt中
java mypackage.MainClass<input.txt>output.txt

   格式化输出

    System.out.printf()

    %f,%s,%d分别为float,string,int.  P29表1-5

    String.formate  P30表1-6 格式化输出的标记符

      +  为正数和负数打印符号

      -  左对齐

      ,  进行分组999,999

      #  加0x前缀

  控制流

    switch:

        记得在选择分支末尾添加break,否则全部执行。

    循环:

      

//跳出多层循环
outer:
while(true){
    ...
    while(true){
        ...
        if(true){
            break outer;
            ...
        }
    }
}
//outer是break的标签,可以是任何名字。

   数组

    当使用new构造数组时:

      数字类型(包括char)的数组用0填充。

      Boolean类型的数组用false填充。

      对象数组用空引用填充。

    ※泛型类不能使用基本类型作为类型参数。ArrayList<int>是非法的!

    每一种基本类型,都有对应的包装类:Integer、Byte、Short、Long、Character、Float、Double、Boolean。

    自动装箱:基本类型和他们对应的包装类型之间的转换时自动的。

    自动拆箱:

  数组和数组列表的复制

    将数组变量复制到另外一个数组变量,两个变量引用同一个数组。用静态方法Array.copyOf();

    

1 int[] copiedPrimes = Arrays.copyOf(primes,primes.length);
1 //复制数组列表
2 ArrayList<String> copiedFriends = new ArrayList<>(friends);
3 String[] names = ...;
4 ArrayList<String> friends = new ArrayList<>(Arrays.asList(names));

  数组的排序

    Array.sort(names);//数组排序

    Collections.sort(friends);//数组列表排序

    对于数组可以用parallelSort方法,分布到多个处理器进行处理。

  ※可变参数必须是方法的最后一个参数。

    public static double max(double first,double... rest);