java基础知识二

数据类型

Java是一种强类型语言,必须为每一个变量声明一种类型 Java声明一个变量以后,必须显式初始化。 习惯上常量名使用全大写。 Java7开始可以在数字中使用下划线,增加辨识度,比如:10_000_000等

关系运算符与boolean运算符

  1. && 短路与
  2. || 短路或
  3. !非 其中使用短路与或,当左边操作数已经确定表达式的值,右边的操作数就不必计算。

位运算符

&与 |或 ^异或 ~非

Math类

在Math类中,为了达到最快性能,所有的方法都使用计算机浮点单元中的例程。如果得到一个完全可预测的结果比运行速度更重要的话,那么应该使用StrictMath类,可以确保所有平台得到相同的结果。

数值间的转换

实线箭头表示转换数据无丢失,虚线箭头表示转换数据精度可能会丢失。就是字节数小的可以转换成字节数大的,相同大小字节不能转换,其中,整型可以转换成浮点数类型,浮点数类型转换成整型就可能丢失精度。 如果两个操作数,有一个是double类型,另一个操作数会转换成double; 否则,如果其中一个是float类型,另一个将会转换成float; 否则,如果其中一个是long类型,另一个将会转换成long; 否则,两个数将会转换成int类型。

字符串

String的substring方法可以从一个大的字符串提取一个子串。 String类没有提供用于修改字符串的方法,String是一个不可变类型,不可变类型的有点是:编译器可以让字符串共享。

检测字符串是否相等

可以使用equals方法检测两个字符串是否相等:

1Str为字符串变量 2 3Str.equals(otherString); 4//注:值为null的变量是不能调用方法的,所以Str需要先检测是否为空 5if(Str != null){ 6 Str.equals(otherString); 7} 8 9//或者已定的字符串常量放前面 10otherString.equals(Str);

值传递

1public class StringDemo{ 2 public static void main(String[] args){ 3 String s1 = "hello"; 4 String s2 = "world"; 5 System.out.println(s1 + "--------" +s2); 6 change(s1, s2); 7 System.out.println(s1 + "--------------" + s2); 8 9 StringBuffer sb1 = new StringBuffer("hello"); 10 StringBuffer sb2 = new StringBuffer("world"); 11 System.out.println(sb1 + "--------" +sb2); 12 change(sb1, sb2); 13 System.out.println(sb1 + "--------------" + sb2); 14 } 15 //String等包装类是值传递的,所以s1和s2是在main方法中定义的,change方法中的操作无法影响到main方法中的输出 16 //一个方法不能修改基本数据类型的参数 17 public static void change(String s1, String s2){ 18 s1 = s2; 19 System.out.println("this s1 = " + s1); 20 s2 = s1 + s2; 21 System.out.println("this s2 = " + s2); 22 } 23 //java 里只有值传递,一个方法不能实现让对象参数引用另一个新的对象,但是一个方法可以改变一个对象参数状态, 24 //下面change方法中sb1的地址值值改变了,main方法中sb1的地址值没变,sb2的地址值没变,但是地址中的参数改变了。 25 //StringBuffer的append方法可以改变sb2的状态,而sb1是企图让对象参数引用另一个新的对象,这个是无法影响到main方法中的 26 27 public static void change(StringBuffer sb1, StringBuffer sb2){ 28 sb1 = sb2; 29 System.out.println("this sb1 = " + sb1); 30 sb2 = sb2.append(sb1); 31 } 32}

空串

""空串

1str.length() == 0; 2str.equals("");

有时候需要检查字符串是否是空串和空值null,这里要先检测是否为空值null,空串和空值是不一样的。

代码点和代码单元

代码点:是指一个编码表中的某个字符对应的代码值,也就是Unicode编码表中每个字符对应的数值。在UTF-16中的基本多语言级别中,每一个字符用16位表示,通常被称为代码单元。因为UTF-16编码采用不同长度的编码表示所有的Unicode代码点,因此增补字符采用的是一对连续的代码单元进行编码。

构建字符串

使用StringBuilder类的append()方法构建:

1StringBuilfer sb = new StringBuilder(); 2 3//添加 4sb.append("要添加的东西"); 5 6//通过toString()方法就可以得到一个String对象 7String s = sb.toString();

输入输出

控制台读取输入输出

1 import java.util.Scanner; 2 3public class ScannerTest{ 4 public static void main(String[] args){ 5 Scanner sc = new Scanner(System.in); 6 if(sc.hasNext()){ 7 System.out.println(sc.next()); 8 } 9 10 } 11}

文件的输入输出

1import java.util.Scanner; 2import java.nio.file.Paths; 3import java.nio.file.Path; 4public class ScannerTest2{ 5 public static void main(String[] args) throws Exception{ 6 Scanner sc = new Scanner(Paths.get("D:\\javatest\\ScannerTest2.java")); 7 while(sc.hasNextLine()){ 8 System.out.println(sc.nextLine()); 9 } 10 } 11}

格式化输出

使用System.out.printf()格式化输出

1printf("x = %d, y = %f\n", x, y); //格式化输出 2/** 3* %s表示字符串 4* %d表示十进制证书 5* %f表示定点浮点数 6* %e表示指数浮点数 7* %表示通用浮点数 8* %c表示字符 9* %b表示布尔 10*/ 11 12System.out.printf("%,.4f", 10000.0/3.0); //逗号表示分隔符 13System.out.printf("%.4f", 10000.0/3.0); //.点后面的数字表示保留的小数位数

还可以使用String类的静态方法format创建一个格式化字符串,而不用打印输出:

String s = String.format("hello, %s next year, you'll be %s;" ,name, nice);

类的执行顺序

1/* 2* 父类静态初始化块 3* 子类静态初始化块 4* 父类初始化块 5* 父类构造方法 6* 子类初始化块 7* 子类构造方法 8*/ 9public class StaticClass extends sc{ 10 static{ 11 System.out.println("子类静态初始化块"); 12 } 13 { 14 System.out.println("子类初始化块"); 15 } 16 public StaticClass(){ 17 System.out.println("子类构造方法"); 18 } 19 public static void main(String[] args){ 20 StaticClass ss = new StaticClass(); 21 } 22} 23class sc{ 24 static{ 25 System.out.println("父类静态初始化块"); 26 } 27 { 28 System.out.println("父类初始化块"); 29 } 30 public sc(){ 31 System.out.println("父类构造方法"); 32 } 33}

枚举类 在比较两个枚举类型的值时,不要用equals方法,直接调用==就可以 toString的逆方法是valueOf();

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Java日期时间API系列31

  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )