Java基础学习笔记
前言
c语言: 数据类型、控制流程、函数、指针、数组
c++: 面向对象、群体类、泛型
类是对象的抽象,对象是类的实例
java: Swing、集合类、流类库、多线程、网络通信、数据库、AWT……
后继课程: 数据库、数据结构、初级软件实作、JSP、高级软件实作……
Java必知
Object类是Java中所有类的直接或间接基类
Object的方法:
unicode
汉字范围:[\u4e00]–[\u9fe5]
'\u4e00'
[\u4e00-\u9fe5]{2,4}
一、基础知识
数据类型
数据类型转换
隐式类型转换
按精度从低到高转换
byte–>short–>int–>long–>float–>double
char–>int–>long–>float–>double
注:byte与char之间不能转换
应用:可以用派生类对象表示基类对象
显式类型转换
把高精度的变量赋值给低精度的变量时,必须使用显示类型转换运算
(类型名)要转换的值
除boolean类型外,其他基本类型都能以显式类型转换的方法实现转换
注:把一个整数赋值给byte、short、int、long型变量时,不可以超出变量的取值范围,否则必须进行强制类型转换
byte b=(byte)129;
注:隐式转换有风险,当转换与实际一致时才不容易出错
//装箱
Object sender = new JButton();
//拆箱
((JButton)sender).setText("点击成功");
流程控制
条件语句
1.if条件语句
2.if…else条件语句
3.else if条件语句
4.switch多分支语句
循环语句
1.while循环语句
2.do…while循环语句
3.for循环语句
4.foreach循环语句
for(元素类型 x : 遍历对象obj){
引用了x的java语句
}
理解:循环遍历对象obj,将每次循环到的元素赋值给x
例如:使用foreach语句遍历整型数组
int arr[]={5,13,96};
for(int x:arr){
syso(x);
}
//输出结果:
//5
//13
//96
5.break语句
6.continue语句
数组
一维数组
创建一维数组
1.先声明,再用new进行内存分配
数组元素类型 数组名字[];
数组元素类型[] 数组名字;
数组名字 = new 数组元素的类型[数组元素的个数];
注:使用new关键字分配内存时,整型数组中各个元素的初始值都为0.
int arr[];
arr=new int[5];
2.声明同时分配内存
数组元素的类型 数组名[] = new 数组元素的类型[数组元素个数];
int month[]=new int [12];
//注意看month后面的[]里面不写元素个数!
初始化一维数组
int arr[]=new int[]{1,2,3,4,5};
int arr2[]={1,2,2,6}
二维数组
创建二维数组
1.先声明,再使用new分配内存
数组元素的类型 数组名字[][];
数组元素的类型[][] 数组名字;
int a[][];
a=new int[2][4];
或者
a=new int[2][];
a[0]=new int[2];
a[1]=new int[3];
2.声明的同时为数组分配内存
int a=new int[2][4];
初始化二维数组
数组元素类型 数组名[][]={value1,value1...valuen};
int myarr[][]={{1,2},{3,4},{5,6}};
常用属性
length
int[][] intArr1 = {{1,2,3,4},{2,3,4,5}};
intArr1.length;
intArr1[0].length;
intArr1.length的结果为8?错!!!intArr1.length获取到的是该二维数组的第一维长度,也就是行数
intArr1[0].length就很好理解了,获取到的是该二维数组的第二维长度,也就是列数
数组的基本操作
遍历数组
用foreach遍历二维数组
int arr[][]={{4,3},{1,2}};
int i=0;
for(int x[]:arr){
i++;
int j=0;
for(int e:x){
j++;
if(i==arr.length&&j==x.length){
syso(e);
}else{
syso(e+" ");
}
}
}
Arrays类
1.填充替换数组元素
filll(int [] a,int value)
:将指定的value值分配给int型数组的每个元素
fill(int [] a, int fromIndex, int toIndex, int value)
:将指定的value值分配给int数组指定范围中的每一个元素[fromIndex,toIndex)
2.对数组进行排序
Arrays.sort(object)
3.复制数组
copyOf(arr,int newlength)
arr:要进行复制的数组
newlength:指复制后的新数组的长度。当新数组的长度大于原数组时,java会根据原数组的类型来填充值(eg:整型数组用0填充,字符类型数组用null填充)
int arr[]=new int[]{13,24,12};
int newarr[]=Arrays.copyOf(arr,5);
for(int x:newarr){
syso(x);
}
//输出结果:
//13
//24
//12
//0
//0
copyOfRange(arr, int fromIndex, int toIndex)
4.查询数组
binarySearch(Object[] a,int fromIndex, int toIndex, Object key)
:[fromIndex,toIndex)
字符串
声明字符串
String str;
注:声明的字符串变量必须经过初始化才能使用
创建字符串
1.String(char a[])
char a[]={'h','e','l','l','o'};
String s=new String(a);
2.String(char a[],int offset,int length)
3.String(char[] value)
字符串基本信息
字符串长度
str.length();
字符串查找
1.indexOf(String s)
:返回参数字符串s在指定字符串中首次出现的索引位置,如果找不到,则返回-1
2.lastIndexOf(String str)
:返回指定字符串最后一次出现的索引位置
获取指定索引位置的字符
charAt(int index)
字符串操作
连接字符串:"+"
连接多个字符串
连接其他数据类型
获取子字符串
1.substring(int beginIndex)
:返回从指定的索引位置开始截取到字符串结尾的子串
2.substring(int beginIndex, int endIndex)
:返回在指定范围截取的子串
去除空格
trim():清除前导空格和尾部空格
应用:获取用户名、账号、密码
字符串替换
replace(CharSequence target,CharSequence replacement)
String str="Hello world";
str.replace("ll", "kk");
syso(str);
//输出结果:"Hello world"
//怎么没有替换呢?
//原因:str引用字符串常量"Hello world"
str2="Hello world";
//str2与str引用的是同一个地址的字符常量!
//因而使用replace不能直接在原先的字符串上作出修改
//不只是replace,java中很多函数都如此
//正确用法:
//replace会返回一个操作过后的新字符串
//因此需要一个字符串来承接新的结果
str=str.replace("ll", "kk");
syso(str);
//输出结果:"Hekko world"
判断字符串的开始与结尾
1.startsWith(String prefix)
:判断当前字符串对象是否以指定的内容开始
2.endsWith(String suffix)
判断字符串是否相等
String str1="Hello world";
String str2="Hello world";
syso(str1==str2);
//结果是true?
//错!!!
//在java中不能再用"="来比较两个字符串的内容是否相等
//原因:在java中"="比较的是两个字符串的地址是否相同
//显然,除非是同一个字符串对象,否则返回值都为false
1.equals()
str1.equals(str2);
2.equalsIgnoreCase()
:比较时忽略大小写
比较字符串
str.compareTo(String otherstr)
大小写转换
1.大写转小写
str.toLowerCase()
2.小写转大写
str.toUpperCase()
字符串分割
1.split(String sign)
:根据给定的分割符对字符串进行分割
str.split(String sign)
2.split(String sign, int limit)
:根据给定的分割符对字符串进行有限次的分割
字符串与字符数组
toCharArray()
:将字符串转化为字符数组
String str="Hello!";
char cc[]=str.toCharArray();
for(char c:cc)
syso(c);
//输出结果:
//H
//e
//l
//l
//o
//!
正则表达式
字符串生成器StringBuilder
使用StringBuilder的原因:
普通的字符串是引用字符串常量,当需要大量重复修改字符串时开销很大
1.append(content)
2.insert(int offset,arg)
StringBuilder bf=new StringBuilder("hello");
bf.insert(5,"world");
syso(bf.toString());
3.delete(int start ,int end)
StringBuilder bf=new StringBuilder("StringBuilder");
bf.insert(5,10);
syso(bf.toString());