java学习笔记(Core Java)1-3
要准备学习下java了,按着《core java》的内容,简单的做了一下笔记。这本书有很多地方对C++和java的语法作了对比,所以对于从C++向java方向转的人来说,非常有利!
javac xxx.java
java xxx
java applet: appletview xxx.html (浏览器加载)
第三章 基本类型
1) 对大小写敏感 强调main方法时公有的
2)java没有无符号类型
3)float后面必须有F 标记,double 也可以加上D
4) 错误溢出:正无穷 负无穷 NaN(非数字 0/0=NaN)
可以用 Double.isNan(x) 判断是不是非数字
5)char类型 转换Unicode编码方便 不建议使用
32→空格
48→0
65→A
97→a
6)常量 final 类似于 const
7)位运算 与 或 异或 非 (可用来屏蔽某些位)
移位操作 << >> (快速计算或屏蔽位)
>>> 用来填充最高位
8)Math库 包含数学方法与符号
9)强制转换 cast
10)String 这是一个预定义类
截取字串 substring(int index,int length)
拼接 +
截取和拼接可以动态改变字符串长度
不要用==号比较字符串大小 (c: strcmp)
因为String时一个类,所以改变字符串时,会重新指向新的字符串,原有的字符串就会被释放掉
字符串长度为0和null 不是一码事,null表示没有任何对象与之关联
字符数据类型是一个采用UTF-16编码表示Unicode代码点的代码单元
因为有些字符咋不同编码下,字符长度不同
length() 返回UTF-16下的代码单元
/////////////////////////////////////////////////////
charAt() 返回指定位置的代码点,注意不是字符!!
codePointCount(0,str.length()) 返回字符串char(代码点)的数量
/////////////////////////////////////////////////////
String APi
compareTo(String other) //顺序比较
startWith(String prefix)
endsWith(String suffix)
substring()// 若干重载 分割
equal(Object other)
equalIgnoreCase(String other)//忽略大小写
indexOf() //若干重载函数 返回第一个匹配位置
lastindexOf() 返回最后一个匹配位置
length();
toLowerCase() 小写
toUpperCase() 大写
trim() 删除首尾空白
replace(CharSequence oldString,CharSequence newString) //字符串替换,可以使用StringBuild或String做CharSequence
11)StringBuild(前身 StringBuffer) 构建字符串 如果频繁的改变字符串长度
StringBuild s = new StringBuild();
s.append(ch);
String ss = s.toString();
StringBuild Api
length()
append() //若干重载
appendCodePoint(ing cp) 追加代码点并转化为代码单元
setCharAt(int i,char c) 第i个代码点替换为c
insert(int pos, string/char) 插入
delete(int start,int end)删除srat开始到end-1结束的代码单元
String toString() 将缓冲器内容刷新到String中去
12)输入输出
输出 System.out.println()
输入 import java.util.* //引入包
Scanner in = new Scanner(System.in);//System.in 输入流
String name = in.nextLine(); //控制台输入一行
in.next()
in.nextInt()/nextDouble()
采用Console 处理不如Scanner方便。Console没有处理输入单个单词或数值的方法
格式化输出printf(与C相似:%s,%d.%f...%tc(时间输出,c完整时间,其他字母还会有不同含义))
同时也可用使用String.format(与C相似:%s,%d.%f...%tc)创建格式化字符串
(c# 使用占位符,索引从0开始,java的从1开始,避免混肴)
13)文件输入输出
读取文件:
使用Scanner,构建一个File对象
Scanner in = new Scanner(Paths.get("myfile.txt"))//使用双反斜杠转义;之后可以使用 Scanner常规方法 读取一个文件
写文件:
PrintWriter out = new PrintWriter(""myfile.txt"")
;之后可以使用 System.out常规方法(println、print、printf) 写入一个文件了
Scanner(File f);
PrintWrite(String filename);
static Path get(String parhName) //根据指定路径名构建一个path
///////////////////////
控制流程跳过
///////////////////////
14)大数值 位于java.math库中
BigInterger 实现任意精度整数运算
BigDecimal 实现任意精度浮点数运算
!!!不能重载运算符号 并且也没有办法自定义运算符重载
(先构建对象,在调用方法,省略例子)
valueOf() 可将普通数值转化为大数值
15)数组 new运算符创建空间大小,因为他是创建到堆中的
不能使用=对数组进行简单的赋值,这是将两个引用指向同一个内存。一个改变后,另一个也会同时改变。同时原有的数组内存将被舍弃回收
凡是在堆上分配空间的,使用=会改变引用对象(或重新创建新对象),同时舍弃原有的对象空间
16)for循环与for each循环
17)数组初始化与匿名数组(默认:数值:0,boolean:false,String:null)
18)数组拷贝
使用=拷贝时,两个变量指向同一块内存
若向拷贝值,使用Arrays。copyOf(数组名,新数组长度),返回一个新数组
通常用来改变数组的大小
类似于c++ 数组指针 int* a = new int[100];(我说咋这么像!!)
int[] a = new int[100];
19)命令行参数 public static void main(String[] args);
20)数组排序 随机数 Math.random() [0-1)的随机数
Arrays.sort() //快排
////////////////////////////////////////
Arrays Api
static String toString(type[] a)
static type copyOf(type[] a,int length)
static type copyOf(type[] a,int start,int end)
static void sort(type[] a) 快排
static int binarySearch(type[] a,type v)
static int binarySearch(type[] a,int start,int end,type v)二分查找法
static void fill(type[] a,type v) 填充v值
static boolean equal(type[] a,type[] b)
////////////////////////////////////////
21)二维数组 快速打印二维数组a
System.out.println(Arrays.deepToString(a))
23)锯齿数组 java多维数组类似于数组的数组,数组中的数组
for(int i = 0;i < a.length;i++) {
for(int j = 0; j< a[i].length; j++) {
a[i][j] = 1;
}
}
double [][] d = new double[10][6]
等同于:
double **d = new double*[10];
for(int i = 0; i < 10; i++)
d[i] = new double[6];