10.13
注:
此篇随笔知识总结参考与《java核心技术卷1》
图片来源于网络
只用于个人学习总结以及分享学习心得使用
注释形式:
//
/**/
第一种只能注释单行代码
第二种可以界定一种范围来注释
数据类型:
有8种基本类型:
1.4种整形:int,short,long,byte(表示没有小数部分的数值,允许是负数)
2.2种浮点类型:float,double(表示有小数部分的数值,注:float类型后要有f/F作为后缀,不然就会默认为double类型)
3.1种字符类型:char(字符型,一般情况表示单个字符,还有Unicode字符可以用char值描述)
4. 一种布尔类型:boolean(有两个值true和false,多数用于判断逻辑条件之中)
声明变量:
每个变量都有一个类型type,声明变量就是“变量类型+变量名”
接下来列举:
double a;
int b;
long c;
boolean d;
(不能用java的保留字作为变量名)
接下来声明完变量后就要对变量进行初始化
如果使用未初始化的变量会ERROR
对声明过的变量进行赋值:“变量名 = 值;”
也可以声明和赋值同时进行:“变量 变量名 = 值;”
(注:变量的声明尽可能靠近第一次使用变量的地方,这是一种良好的程序编写风格)
常量:
final指示常量
final这个关键词只能被赋值一次,赋值之后就不能再更改了
希望一个常量可以在一个类的多个方法中使用,这时候可以用“static final”设置一个类常量
(注:类常量定义于main方法的外部)
枚举类型:
变量的取值只在一个有限的集合内
列:服装尺寸,编码
这时候可以自定义枚举类型,关键字“enum”
enum Size {small,medium,large,extra_large}
Size s =Size.small;Size类型的变量只能储存这个类型中声明给定的值,或者null(空值)
运算符:
- 算术运算符:+、-、*、/(加减乘除)
注:/和%的区别
第一个是除法,整数和整数是整数除法,其中一个是浮点数时,就是表示浮点除法
第二个是求余数,15%2=1
注:整数被0除会产生异常,浮点数被0除将会得到无穷大或者NaN的结果 - 数学函数和常量:
Math类中有数学函数
平方根用“sqrt”方法
double x = 4;
double y =Math.sqrt(x);幂运算在java中没有,但是我们可以借助pow方法
double y =Math.pow(x,a);
表示的是x的a次方
floorMod方法:
Math类三角函数:Math.sin……
Math类指数函数反函数:Math.exp……
表示pai和e常量的近似值:Math.PI,Math.E
import static java.lang.Math.*;
- 数值类型之间的转换

注:图源百度
红色箭头是表示会损失精度的转化
- 强制类型转换
double x = 9.9997;
int x1 = (int)x;
//注:如果想对浮点数进行舍入运算
//可以用Math.round- 结合赋值和运算符
x += 4;
x = x + 4;以上两个是相等的
- 自增与自减运算符
int n = 12;
n++;
//前缀形式会先加1- 关系和boolean运算符
3==7//检测相等性
3!= 7//检测不相等小于、大于、小于等于、大于等于
<、>、 <= 、>=
&&和||一个是与一个是或者
&&:条件同时满足
||:满足其中一个条件
三元操作符:“ ?: ”
- 位运算符
&、|、^、~
意思分别为:
and、or、xor、not
和 <<可以将位模式左移右移
- 括号与运算符级别
10.14
- 字符串:
没有字符串类型,在java类库中提供了一个预定类,自然的叫做String
双引号括起来的都是String类的一个实例
String a ="";
String b ="Hello";- 子串
substring方法可以从一个较大的字符串中提取出一个字串
例如:
String a = "hello";
String b =a.substring(0,3);//从0开始,到3为止,但是不包括3- 拼接
java语言允许使用+号链连接两个字符串
String a ="aaa";
String b ="bbb";
String c ="ccc";
String d =a+b+c;
System.out.println(d);将一个字符串和一个非字符串的值进行拼接时,后者会转换成字符串(任何一个java对象都可以转换成字符串)
int age = 13;
String rating ="age"+age;
System.out.println(rating);这种特性经常使用在输出语句中
System.out.println("age"+age);字符串里如果有空格,那么打印语句的时候也会打印这个空格
如果需要把多个字符串都放在一起,用一个界定符号分割,可以使用静态join方法
String all = String.join("/","a","b","c","d");
System.out.println(all);输出:a/b/c/d
在java11中,还提供了一个repeat方法:
String re ="java".repeat(3);
//输出javajavajava- 不可变字符串
String类没有提供修改字符串中某个字符的方法如果想修改,可以提取想保留的子串,再和希望的字符拼接
c = c.substring(0,1)+"a";
//这个就是运用了上面子串中说的substring方法
//从0开始,到1结束,但不包括1
System.out.println(c1);由于不能修改字符串中的单个字符,String类对象称为是不可变的,几就是几,虽然不能修改该这些值,但是我们可以重新赋值给c
- 检测字符串是否相等
可以用equals方法检测两个字符串是否相等
表达式:s.equals(t);
如果字符串s和t相等则返回true,如果不相等就返回false
s和t可以是字符串变量也可以是字符串字面量
String a ="aaa";
"hello".equals(a);不区分大小写的检测字符串是否相等用:equalsIgnoreCase方法
一定不要用==检测两个字符串是否相等,这个运算符只能确定两个字符串是否能存在于同一个位置上,如果存在一个位置上他们必然相等
但是完全有可能将内容相同的多个字符串副本放置再不同的位置上
String greeting = "Hello";
if (greeting == "Hell0") {
//return一个true
}
if (greeting.substring(0,3)=="Hel"){
//return一个false
}- 空串与Null串
空串""是长度为0的字符串可以用如下代码检测
if (greeting.length() == 0){
}
if (greeting.equals("")){
}空串是一个java对象,有自己的长度和内容,长度为0,内容为空
String变量可以存放一个特殊的值,名字是null
表示目前没有任何对象和该变量关联
要检查一个字符串是否为null
if (greeting == null){
}要检查一个字符串既不是null也不是空串
if (greeting != null && !greeting.equals("")){
}
if (greeting != null && greeting.length()!=0){
}- 码点与代码单元
后续补充 - StringAPI
API注释汇总了一些最常用的方法
每一个API的注释都是从包名开始
如java.lang.String
(方法后续补充意义和是示范代码) - 阅读联机文档
http://docs.oracle.com/javase/9/docs/api - 构建字符串
有时候需要由较短的字符串来构建字符串
如果一直采用字符串拼接来达到这个目的效率低
每次拼接都要构建一个新的String对象
可以使用StringBuilder类来避免这个问题
StringBuilder builder = new StringBuilder();
builder.append("111");
builder.append("123");
String a1 = builder.toString();
System.out.println(a1);API注释包含了StringBuilder类中的重要方法:
后续补充……
- 输入与输出:
- 读取输入
输出调用System.out.println(
输入要构造一个System.in关联的Scanner对象
Scanner scanner = new Scanner(System.in);
String name =scanner.nextLine();//一行输入
String name1 =scanner.next();//一个单词
int name2 =scanner.nextInt();//整数记得前面需要import java.util.*
- 格式化输出
格式化输出
此格式是真的字面意思
比如你希望输出美元,美分数等等……
用printf方法
(还有用于prinf的标志的表,暂时没有找到图片……) - 文件输入与输出
想要读取一个文件,需要构造一个Scanner对象
Scanner scanner = new Scanner(Path.of("my.txt"), StandardCharsets.UTF_8);如果文件名中包含反斜杠符号,就要记住反斜杠之前要再加一个额外的反斜杠转义
Scanner scanner = new Scanner(Path.of("my.txt"), StandardCharsets.UTF_8);
PrintWriter out = new PrintWriter("my.yxy",StandardCharsets.UTF_8);10.17
接上
- 控制流程:
- 块作用域
深入学习控制之前需要了解block的概念
复合语句使用若干条java语句组成的语句,用一对大括号括起来,块确定了变量的作用域
应该block之间可以进行嵌套
注:但是不能再嵌套的两个块中声明相同的两个变量
- 条件语句
java中条件语句的形势是if (condition)statement
需要执行多个语句可以使用block statement
if (condition){
statement1
statement2
……
}int a= 10;
if (a ==10){
System.out.println("a="+10);
}else {//else是当if条件不满足执行block中的语句
System.out.println("a!="+10);
}注:else的部分是可选的
else子句与最邻近的if构成一组
- 循环
条件为true的时候,while循环执行一条语句(块语句)
while (condition) statement
注:while在前的如果开始时循环条件为flase,块中的语句将一次都不会执行
如果想让while在前面执行语句,就用do while语句
do statement while (condition)
(示范代码后续补充)
- 确定循环
for语句
注:如果在for语句中定义了一个变量,那么这个变量就不能在循环体之外使用
如果希望在循环体外使用循环计数器的最终值,就要确保这个变量在循环外声明!
(示范代码后续补充)
- 多重选择
switch语句,将于选项值相匹配的case标签开始执行直到遇见break语句
如果没有相匹配的case标签,则会执行default语句
注:如果case标签里的语句没有使用break则会继续执行下一个case标签里的语句,有时候可能会引发严重的错误
(示范代码后续补充)
- 终端控制流程的语句
break语句:跳出循环
(示范代码后续补充)
标签:
break 标签;
执行后,会跳转到带标签的语句块末尾(标签必须放在希望跳出的最外层循环之前,并且必须紧跟一个冒号)
continue语句:中断正常的控制流程。
(示范代码后续补充)
- 大数
基本的浮点数和整数不能满足要求可以使用java.math包中的两个类:BigInteger和BigDecimal
BigInteger:实现任意精度的整数运算
BigDecimal:实现任意精度的浮点数运算
注:使用静态的valueOf方法可以将普通的数值转换成大数
BigInteger a =BigInteger.valueOf(1000000000);
//对于更大的数我们可以使用一个带字符串的构造器
BigInteger reallyBig = new BigInteger("100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000");注:不可以使用算术运算符处理大数,需要使用大数类中的方法(比如add和multiply方法)
(示范代码后续补充)
10.18
数组:
- 声明数组
数组是一种数据结构,用来储存同一类型的集合
声明数组:int a[i](a是一个整形数组,i就是数组中下标为一的整数)
不过,这里只声明了一个数组,并没有初始化
int[] a = new int[100](初始化了一个可以存储100个整数的数组)
当然,你也可以创建一个new int[n]的长度的数组,这个声明则会创建一个长度为n的数组
数组长度也不一定非要是常量
但一旦创建了数组就不能改变他的长度
int[] smallPrimes = {1,2,3,4,5,6};
//这是一个创建数组对象并且同时提供初始值的简写方式
//接下来我们来创建一个String类型的数组
String[] name={
"张三",
"李四",
"王五",
"天六"
};
//匿名数组
int[] smallPrimes = {1,2,3,4,5,6};
smallPrimes = new int[]{3,3,3,3,3};
System.out.println(smallPrimes);
//简写形式
int[] anonymous = {1,3,3,3,1};
smallPrimes = anonymous;- 访问数组元素
一旦创建了数组,就可以在数组之中填入元素,列如可以使用一个循环
int[] a = new int[100];
int i;
for(i=0;i<100;i++){
a[i] =i;
System.out.println(a[i]);
}创建一个数字数组的时候,所有的元素都是初始化为0
创建一个布尔数组的时候,所有的元素都是初始化为false
对象数组的元素则初始化一个null,表示还未存放任何对象
String[] strings = new String[10];
//则会创建包含10个null的数组
for (int i =0;i<strings.length;i++){
System.out.println(strings[i]);//在控制台打印出null
}
//如果你想让这数组包含空串,需要为元素指定空串
for (int i =0;i<10;i++){
strings[i] ="";
for (int i1 =0;i1<10;i1++){
System.out.println(strings[i]);
}
}for (i=0;i<a.length;i++){//使用 array.length
System.out.println(a[i]);//打印数组中的每一个元素
}- for each循环
for(variable:collection)statement
注:collection这一集合表达式必须是一个数组或者是一个实现了Iterable接口的类对象比如ArrayList
for(int element:a)
system.out.println(element)
打印数组a的每一个元素,一个元素占一行
“for each element in a”
当然,如果用array.length也是有一样的效果
但是这个语句明显显得更加简洁,不用去为了下标而担心
当然,坏处是如果你不想处理一个数组的整个元素,传统的for循环处理下标的方式更方便
- 数组拷贝
在java中允许将一个数组变量拷贝到另一个数组变量,这时两个变量将引用同一个数组
int[] smallPrimes = new int[]{1,2,3,4,5,6,7,8};
//一个数组要记得初始化,光声明是用不了的
int[] LuckNumbers = smallPrimes;
LuckNumbers[5]=12;
for (int i=0;i<LuckNumbers.length;i++){
System.out.println(LuckNumbers[i]);
}如上的是一种方法,还有一种方法要使用Arrays类的copyOf方法
int[] smallPrimes = new int[]{1,2,3,4,5,6,7,8};
//忘记啦,一个数组要记得初始化,光声明是不行的
int[] LuckNumbers = smallPrimes;
LuckNumbers[5]=12;
// for (int i=0;i<LuckNumbers.length;i++){
// System.out.println(LuckNumbers[i]);
// }
int[] LuckNumbers1 = Arrays.copyOf(LuckNumbers,LuckNumbers.length);
//第一个参数是被拷贝的数组,第二个参数是新数组的长度
LuckNumbers = Arrays.copyOf(LuckNumbers,2*LuckNumbers.length);
int[] new111 =Arrays.copyOf(smallPrimes,smallPrimes.length);
System.out.println(new111[0]);//控制台打印一下看看有没有拷贝
System.out.println(new111[1]);
System.out.println(new111[2]);
System.out.println(new111[3]);- 命令行参数
java Message -g cruel world
- 数组排序
想要对数组进行排序,可以用Arrays的sort方法
int[] a =new int[200];
//……
Arrays.sort(a);(抽牌随机抽数字……代码后续贴)
- 多维数组
int[][] two11 ={
{1,2,3,4},
{2,2,2,2},
{3,3,3,3}
};
System.out.println(two11[0][0]);
//多了一个框表示横向纵向,还是从0开始- 不规则数组
多维数组被称为数组的数组
(示范代码后续补充)
















