首先介绍一下有关Stringbuilder和Stringbuffer的一些知识点:
Stringbuilder和Stringbuffer原理相同,是多线程下的安全版本,后者因为加锁了稍微慢于前者一点,但是这两者字符拼接速度都远远大于string类型。
(大量拼接)StringBuilder 事先申请足够大的数组,不需要每次循环都申请空间,少了很多申请和销毁空间的无用功,所以速度快,StringBuffer 跟上述原理一样,只不过加了锁,比上述稍微慢一点点。
string每次值发生变化都会申请空间,所以string类运行比较慢。
(少量拼接)用字符串(String)拼接。
通常Stringbuffer用法是Stringbuffer1.append(Stringbuffer2)表示两个相加,而a.append(i+),指的是a=a+i。
凡是类名带buffer的--->内部实现都是基本类型数组。
操作系统读写某个数据时要先找到其地址。
存储单元越大,读取速度越快,但是空间浪费越严重;越小,读取速率越慢,但是空间利用率越高。我们一般系统内存和磁盘的存储单元是4kb,其中磁盘的可以修改的。
为什么内存小,磁盘大,但是都设置4kb呢?内存注重性能(速度),磁盘注重存储。
一个存储单元至少消耗4kb。存储一般采用数组节省内存空间。
偏移地址的意义就是,某个存储单元的地址是基地址,偏移地址类似于“门牌号”,方便找到存储单元内的某个位置。有效地址=基地址+偏移地址
输入输出:
要想通过控制台进行输人,首先需要构造一个 Scanner 对象,并与“ 标准输人流” System.in 关联。
Scanner in = new Scanner(System.in);
运用.nextInt 读取整数
int a = in.nextlnt();
运用.nextLine读取一行字符串(可以包含空格)
String a = in.nextLine();
同理,要想读取下一个浮点数, 就调用 nextDouble 方法。
double a = in.nextdouble();
注意,调用这些方法要记得在程序最开始添上一行
import java.util.*;
直接将x输出到控制台上
System.out.print(a);
格式化输出:用对应格式来替换%字符。
System.out.printf("Hello, %s. Next year, you'll be %d", name, age);
获取当前执行文件的路径并输出:
import java.util;
public class Test{
public static void main(String[] aaa){
String dir = System.getProperty("user.dir");
System.out.println(dir);
}
}
记事本原理:(有个头部,用来辨别编码格式,之后进行定长读取)读取之后与事先有的形成库进行对比,相应的编码对应相应的符号,显示到记事本上。
(知识扩展)word文档中同一个字的不同字体,也对应不同的编码(自定义编码),用别的文档打开可能会乱码。常用字体的常用字号会设置相应的编码值(用的频率非常高,用编码速度快),不常用的字号不设置编码(按比例缩小,速度比较慢)部分英文字体共用一套编码。
控制流程:
块(即复合语句)是指由一对大括号括起来的若干条简单的 Java 语句。
熟知各种语句:if语句,while循环语句,for循环语句,swich多重选择语句。
介绍一下foreach语句:
用foreach遍历一维数组:
int[] a = new int[3];
for(int d:a)
System.out.println(d);
for each遍历二维数组:
int[][] n = new int[3][4];
for(int[] d:n){
for(int[] e:d)
System.out.println(e);
}
要想快速地打印一个二维数组的数据元素列表, 可以调System.out.println(Arrays.deepToString(a));输出格式为: [[16, 3, 2, 13], [5, 10, 11, 8], [9, 6, 7, 12], [4, 15, 14, 1]]
如果是有规律的计算,要套用公式,千万不要盲目用for循环。
switch击穿:假如swich中有若干个case选项,swich(1),匹配到case1,但是case1里面没有break,swich就会接着向下匹配,一直到有break为止,这就是swich击穿。
swich可选中的类型:•类型为 char、byte、 short 或 int 的常量表达式。
•枚举常量。
•从 Java SE 7开始, case 标签还可以是字符串字面量(就是字符串)。
break只能打断一层循环,不能打断多层。continue是打断当前循环直接进行下一次循环。
大数值:
如果基本的整数和浮点数精度不能够满足需求, 那么可以使用java.math 包中的两个
很有用的类:Biglnteger 和 BigDecimaL 这两个类可以处理包含任意长度数字序列的数值。
Biglnteger 类实现了任意精度的整数运算, BigDecimal 实现了任意精度的浮点数运算。
使用静态的 valueOf方法可以将普通的数值转换为大数值:Biglnteger a = Biglnteger.valueOf(100);
不能使用人们熟悉的算术运算符(如:+ 和 *) 处理大数值。 而需要使用大数
值类中的 add 和 multiply 方法。
Biglnteger c = a.add(b); // c = a + b
Biglnteger d = c.nul tipi y(b.add(Biglnteger.val ueOf(2))); // d = c * (b + 2)
数组:
一维数组的命名方式:
int[] a = {1,2,3,4,5}
int[] a = new int[]{1,2,3,4,5}
二维数组:
int[][] a = new int[3][5];
int[][] b = {
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0}
};
三维数组:
int[][][] c = new int[3][4][5];
int[][][] d = {
{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}},
{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}},
{{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}}
};
数组排列:Arrays.sort(a),将数组a内的数字进行顺序排序。
int[] a ={4,45,7,3,2,9,65,354};
Arrays.sort(a);
for(int b:a ){
System.out.println(b);}
输出结果为: 2 3 4 7 9 45 65 354
补充知识点:引用类型里的等于号,相当于把自己的指向换掉,指向新地址新内容,而原本指向的数据会被释放掉。