java核心技术读书笔记(第二天:基本程序设计结构)


1.第一个Java程序🐝

public class FirstCode{		//驼峰命名法
    public static void main(String[] args){
        System.out.println("Welcome to java");	//使用双引号界定符
    }
}

2.八种基本类型🐛

整型
int 	4字节		-21亿~21亿(大概)
short	2字节		-32768~32767
long	8字节		-9 223 372 036 854 775 808~9 223 372 036 854 775 807 //后缀L或l 如400000L
byte	1字节		-128~127
//java没有任何无符号形式的上述类型

十六进制:前缀0x或0X 如0xCAFE

八进制:前缀0 如010表示8

二进制:前缀0b或0B 如0b1001表示9

可以加下划线:1_000_000(ob1111_0100_0010_0100_0000)表示100万

浮点型
float		4字节		//有效位数6~7位  有后缀F或f 如3.14f 没有后缀是默认为double型
double		8字节		//有效位数15位	 可以选择性加后缀D或d 如3.14D

可以使用十六进制表示浮点数值:0.125=2-3表示为0*1.0p-3 此时p表示指数

浮点数采用二进制系统表示,有舍入误差

  • 正无穷大
  • 负无穷大
  • NaN Double.isNaN(x)判断是不是数值
char类型

表示单个字符,要用’ '括起来

Unicode转义序列会在解析代码之前得到处理

转义序列名称Unicode值(跟16进制数)
\b退格\u0008
\t制表\u0009
\n换行\u000a
\r回车\u000d
\"双引号\u0022
\’单引号\u0027
\\反斜杠\u005c
boolean类型

true false


3.变量与常量🦋

变量
常量

使用final修饰,不可再改变

枚举类型
enum Size{S,M,L,X};	//定义

Size s=Size.M;	//声明,只能设置定义中的值或者null

4.运算符🐌

算术运算符

使用严格浮点运算

public static strictfp void main(String[] ages){}
强制类型转换

大类型转换为小类型是需要强制转换(当精度造成丢失时)

double x=9.997;
int nx=(int)x;
> nx=9
double x=9.997;
int nx=(int)Math.round(x);	//round方法返回的结果为long类型
> nx=10
位运算符🤒
&("and")|("or")^("xor")~("not")

&
按位与
如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
|
按位或
两个相应的二进制位中只要有一个为1,该位的结果值为1
^
按位异或
若参加运算的两个二进制位值相同则为0,否则为1
~
取反
~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1
<<
左移
用来将一个数的各二进制位全部左移N位,右补0

>>
右移
将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数, 高位补0

左移和右移可以在补码的形式下进行,之后在转为原码。

数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

右移一位相当于除2,右移n位相当于除以2的n次方。

>>>

“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。

a=-1,a<<1
> a=-2
    
a=10,a>>1
> a=5

5.字符串🐞

子串
String greeting="Hello";
String s=greeting.substring(0,3);
> s="Hel"
拼接
String expletive="Hello";
String ager="World";
String message=expletive+ager;	//用‘+‘拼接,可以与数字拼接
String all=String.join("/",,"S","M","L","XL");	//用/界定符分隔
> all=S/M/L/XL
String repeated="java".repeat(3);	//重复3遍,java11中
> repeated="JavaJavaJava"
修改字符串
//String是不可变的,只能重新赋值
greeting=greeting.substring(0,3)+"p!";
检测是否相等
s.equals(t);
相等返回true,否则返回false
    
不区分大小写检测
s.equalsIgnoreCase(t);
compareTo

obj1.compareTo(obj2)
如果该方法返回0,则表示两个对象相等,如果该方法返回一个正整数,则表明obj1大于obj2;如果该方法返回一个负整数,则表明obj1小于obj2。

public class Main {
    public static void main(String[] args) {
        // 即参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,
        // 返回该不同的字符的asc码差值,如果两个字符串不一样长,可以参与比较的字符又完全一样,则返回两个字符串的长度差值
        String str1 = "abc", str2 = "ab", str3 = "abccc", str4 = "abe";
        System.out.println("str1.compareTo(str2):" + str1.compareTo(str2));
        System.out.println("str2.compareTo(str1):" + str2.compareTo(str1));
        System.out.println("str1.compareTo(str3):" + str1.compareTo(str3));
        System.out.println("str1.compareTo(str4):" + str1.compareTo(str4));
        Integer num1 = 1, num2 = 4;
        System.out.println("num1.compareTo(num2):" + num1.compareTo(num2));
        System.out.println("num2.compareTo(num1):" + num2.compareTo(num1));
        Character a = 'a', d = 'd';
        System.out.println("a.compareTo(d):" + a.compareTo(d));
    }
}
//输出
str1.compareTo(str2):1
str2.compareTo(str1):-1
str1.compareTo(str3):-2
str1.compareTo(str4):-2
num1.compareTo(num2):-1
num2.compareTo(num1):1
a.compareTo(d):-3
空串与Null串

检测是否为空

if(str.length()==0)if(str.equals(""))

检测是否为null

if(str==null)

检查二者

if(str!=null&&str.equals(""))	//要先检查是否为null
码点与代码单元

char数据类型是一个采用UTF-16编码表示的Unicode码点的代码单元

  • 常见的Unicode采用一个代码单元就可以表示
  • 辅助字符需要一对代码单元

得到码点数量

int cpCount=str.codePointCount(0,str.length())

返回位置n的代码单元(有时会不准确)

char last=str.charAt(n);

得到第i个码点

int index=str.offsetByCodePoints(0,i);
int cp=str.codePointAt(index);

更多详情参见《java核心技术卷一》P48
这里不多介绍

构建字符串
StringBuilder builder=new StringBuilder();	//构键一个空的字符串构键器
builder.append(str);	//添加元素到末尾
builder.setCharAt(int i,char c);	//将第i个代码单元设置为c
builder.insert(int i,String srt);	//在i个位置插入一个字符串
builder.delete(int startInder,int endIndex)	//删除偏移量从startIndex到endIndex-1代码单元
String newstr=builder.toString();	//完成构建

6.输入与输出🐜

Scanner类

从控制台读取字符

import java.util.Scanner;
Scanner input=new Scanner(System.in);
String name=input.nextLine();	//读取一行
String firstName=input.next();	//读取一个单词,遇空格停止
int age=input.nextInt();	//读取整数
double socre=input.nextDouble();	//读取浮点数

boolean hasNext();	//检测是否还有其他单词
boolean hasNextInt();	//检测是否还有其他整数
boolean hasNextDouble();
Console类

适合从控制台读取密码

Console cons=System.console();
String username = cons.readLine("User name:");	//提示用户输入信息
char[] paw = cons.readPassword("Password:");   //对数组填充完毕后,应立刻用一个填充值覆盖数组元素
String.format

创建一个格式化的字符串,而不输出打印

String message=String.format("hello,%s. Next year,you'll be %d",name,age);
常规时间输出
Date dNow = new Date( );
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
System.out.println("当前时间为: " + ft.format(dNow));
switch

尽量不要使用,如果case分支没有break,会继续执行下一个case语句,很危险。

switch(choice)
{
    case 1:
        ···
        break;
    case 2:
        ···
        break;
    default:
        ···
        break;
}
中断流程控制

带标签的break语句

read_data:		//要加上冒号
while(···){
    ···
    for(){
        ···
        if(){
            break read_data;	//跳转到带标签的语句块末尾
        }
    }
    ···
}

7.大数🪰

导入包

java.math.BigInteger java.math.BigDecimal

转为大数
  • BigInteger a=BigInteger.valueOf(100);
  • BigInteger a=new BigInteger("2361056831275839759832749274")
大数常量
  • BigInteger.ZERO
  • BigInteger.ONE
  • BigInteger.TEN
  • BigInteger.TWO
大数运算
  • 加:BigInteger c=a.add(BigInteger.valueOf(b))
  • 减:BigInteger c=a.subtract(b)
  • 乘:BigInteger c=a.multiply(b)
  • 除:BigInteger c=a.divide(b)
  • 求余:BigInteger c=a.mod(b)
  • 平方根:BigInteger c=a.sqrt(b)
  • 比较:int c=a.compareTo(b)

BigDecimalBigInteger类似,在除法运算时有一个指定舍入位数的方法

BigDecimal divide(BigDecimal other,RoundingMode mode)


8.数组🐢

声明匿名数组

new int[] {17,19,23,29,31,37}

smallPrimes=new int[] {17,19,23,29,31,37}

可以创建长度为0的数组,但与null 不同

创建一个数字元素时,所有元素都初始化为0,boolean数组的元素都初始化为false,对象数组初始化为null

打印数组中所有值的简单方法:System.out.println(Arrays.toString(a))

数组拷贝

int[] arr=Arrays.copyOf(arr,arr.length)

第二个参数是新数组的长度:int[] arr=Arrays.copyOf(arr,2*arr.length)

数组排序

int[] a=new int[10000]

Arrays.sort(a) 使用的是快速排序算法

二分查找:Arrays.binarySearch(a,v) 在a中查找值v

将所有数据元素设置为v:Arrays.fill(a,v)

比较两个数组是否相等:Arrays.equals(a,b)

二维数组

快速访问所有元素:

for(double[] row:a)
    for(double value:row)
        do something with value

快速打印二维数组数据元素列表

System.out.println(Arrays.deepToString(a));
输出格式:[[14,23,5],[56,7,21],[24,88,45]]
不规则数组
int[][] odds=new int[NMAX+1][];
for(int n=0;n<=NMAX;n++)
    odds[n]=new int[n+1];



🧱后续待更。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓晓的雨夜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值