java笔记--基本的编程结构

本文深入讲解Java的基础知识,包括基本数据类型、变量定义与使用、算术运算、数学方法、类型转换等内容。此外还介绍了字符串操作、数组及列表的使用方法,以及输入输出的基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1 基本类型
整型(int 4, long 8, short 2, byte 1)、浮点(float 4, double 8)、布尔(boolean 1)、char型(char 1)

  1. int整形最大/小数:Integer.MAX_VALUE 和 Integer.MIN_VALUE,其他几个整形类似。
  2. Double.POSITIVE_INFINITY 代表正无穷(1.0 / 0.0), Double.NEGATIVE_INFINITY 代表负无穷,Double.NaN 代表非数值(0.0 / 0.0 或者负数的平方根)
    所有的非数值都认为是彼此不相同的,因此无法使用 if( x == Double.NaN) 来检查 x 是否为非数值,正确的方法为:Double.isNaN(x)。同理还有检测是否为正无穷的。
    由于舍入误差(计算机以2进制存储数字),浮点数不适用于做金融计算,需要使用 BigDecimal 类
  3. char 型描述了java使用的UTF-16编码中的编码单元,转义"’" --> “’”,转义 “” --> “\”
  4. java 中布尔型和数字没有任何关系!
    1.2 变量
  5. 变量名由数字、字母、_、$组成,需要注意的是,字母和数字指的是任何字母表上的任何字母,不仅仅只是拉丁字母,因此 π 也是合法名称。
  6. final 一旦被赋值就无法改变(需要说明的是,当final修饰对象的引用时,只是声明改引用永不改变,但改变对象自身完全是合法的)。看下面的代码:
    /**
  • 这是合法的,它只是在首次被使用之前被初始化了一次
    */
    public static void main(String[] args) {
    final int a;
    if (args.length > 0){
    a = 10;
    } else {
    a = 11;
    }
    }
  1. java 不允许 int a=b=1; 这样的初始化,报变量b不存在异常。
    1.3 算数操作
      • × / % = == != () [] . ++ – 等
  2. 少数右结合性操作符:~ ! ++ – +(一元操作符) -(一元操作符) ()(case转换) new = 以及所有的 /= */ 同类型的。[ (j -= i += k) --> j -= (i += k) ]
  3. 数学方法
    public void func_math(){
    Math.pow(2,3); // 2 的 3 次方
    Math.random(); // 产生 [0,1)之间的随机数
    Math.min(2,4); // 返回2 – 返回两数之间最小的
    Math.max(3,4); // 返回两数之间最大的
    double x = Math.PI; // x = 圆周率
    Math.multiplyExact(1000000000, 3); // 严格计算,当溢出时抛出异常,同样还有其他Exact结尾的方法,只能用于int或者long计算
    System.out.println(1000000000*4); // 将产生溢出,产生我们并不需要的值
    }
  4. 类型之间的转换
    强转换会导致结尾,要想取得四舍五入的效果,需要使用 Math.round() 方法
    数字类型的转换,当类型不同时,会将其中较小类型的转换为较大类型
  5. 关系和逻辑操作符
    1. 短路现象 && 与 ||:只要得出总的表达式为真,后面那个表达式就不会在被执行
    2. 位操作符:(0xF:0000 0000 0000 1111)
      & 按位与 -> n & 0xF:只取 n 最后4位
      | 按位或 -> n | 0xF:将 n 最后4位置1
      ~ 取反 -> 相当于!,按位取反
      ^
      << 左移,多出的位数用0补全

      右移

  6. 大数:BigInteger 对象代表了任意长度的整数,封装任意进度的整数运算,BigDicimal 是对浮点型的同样实现

public void func_big(){
BigInteger big1 = BigInteger.valueOf(1111111111111111111L);// BigInteger.valueof()将long型转换为BigInteger
BigInteger big2 = new BigInteger(“11111111111111111111111111111”); // 使用字符串初始化
// java 不允许对象使用操作符,因此操作大数时必须调用方法
BigInteger n = null;
n = big1.multiply(BigInteger.valueOf(12)); // n = 1…1 * 12
BigDecimal big02 = BigDecimal.valueOf(2, 0); // 2 * 10^0
}
1.4 字符串
public void func_string(){
String names = String.join(",",“张三”,“李四”,“王五”);// names = “张三,李四,王五”
// 当要多次进行字符串拼接操作时,使用StringBuilder以节省资源(因为String的’+'操作会创建一个新的String对象)
StringBuilder sb = new StringBuilder();
sb.append(names);
// 字符串分割
String word = “hello world”;
String str01 = word.substring(6, 11);
System.out.println(“分割后的字符串:” + str01);// substring(x,y) 取的是原字符串的[x,y),由于String又是从0开始计算的,所以新字符串的长度刚好是 y-x
// 测试是否相等
String str02 = null;
if ("".equals(str02) && “”.equalsIgnoreCase(str02)){
System.out.println(“相等”);
} else {
// == 和 != 比较的是对象在内存中的位置,位置相同(即哈希码相同),那么结果为true,因此要比较String是否相同应当使用equals(),
// 值得说明的是,将要比较的字符串写在前面,防止字符串为空时抛出异常
System.out.println(“不相等”);
}
String first = “abc”;
String second = “efg”;
first.compareTo(second);// 当first在字典中排在secound前面时将返回负数(理解为 first-secound < 0),相等返回0

// 其他 API
first.startsWith("a"); // 是否以某个字符串开头,类似的:endWith(String str),contains(CharSequence str);
first.indexOf("a"); // a 第一次出现的下标,类似的:lastIndexOf(String str),indexOf(String str, int fromIndex),lastIndexOf(String str, int fromIndex)
first.replace("abc","efg"); // replace(CharSequence oldStr, CharSequence newStr) 将所有的oldStr换为newStr
first.trim(); // 删掉前后空白

}
1.5 输入输出
System.in 只有一个读取单个字节的方法,因此要读取字符串和数字,必须构造一个依赖于System.in的Scanner对象
public void func_io(){
Scanner in = new Scanner(System.in);
while (in.hasNextLine()){ // hasNextLine() 判断当前光标后时候还有行,且此时会进入输入状态
String newLine = in.nextLine(); // 键盘中以回车作为一行的结束,nextLine会将回车前的输入作为一行
if ("".equals(newLine)){
System.out.println(“输入结束”);
break;
}
String word = in.next(); // 读取一个单词,单词以空格分开
int i1 = in.nextInt(); // 读取一个单词,并转换为 int,此外还有转换为 double。
}
// 读取密码时
Console console = System.console();
String username = console.readLine(“请输入用户名”);
char[] password = console.readPassword(“密码:”);
}
1.6 循环与分支

  1. 执行for循环,先执行初始化操作,在进行判断,判断为TRUE则执行。
  2. switch
    1. default 可以放在任何位置,当没有匹配的时候执行
    2. 遇到break或者到达末尾结束
    3. 遇到匹配值开始执行
      1.7 数组和列表
      public void func_array(){
      // 1. 数组的创建[以下都带上列表]
      int[] arr01 = new int[5]; // 使用new创建的数组,int默认填充0,boolean默认填充false,对象默认填充null
      int[] arr02 = new int[]{1,2,3}; // 在创建的同时初始化,此时[]中不能填写数组的长度
      int[] arr03 = {1,2,3}; // 上述形式的简写
      ArrayList list01 = new ArrayList<>();
      // 2. 复制
      int[] arr11 = Arrays.copyOf(arr01, arr01.length); // 使用copyof()复制数组,
      ArrayList list02 = new ArrayList(list01); // 用另一个列表初始化一个列表,相当于复制
      /**
      1. Array 和 ArrayList 的转换:
    • 基本类型数组与ArrayList的转换:不能直接转换,必须借助显示循环或者流
    • 对象类型数组与ArrayList的转换:使用 toArray(T[] t)
      */
      ArrayList list11 = new ArrayList(Arrays.asList(“张三”,“李四”)); // asList()中参数也可以填数组
      String[] arr12 = new String[list11.size()];
      list11.toArray(arr12);
      }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值