Java基础知识(3,4,7,8章笔记)
1.声明常量:final 数据类型 常量名称[=值]
常量名称通常使用大写字母,只能被赋值一次。当定义的final变量属于“成员变量”时,则必须在定义时就设定它的初值,否则会有编译错误。
2.静态成员变量的有效范围可以跨类,甚至可达到整个应用程序之内,对于静态变量,除了能在定义它的类内存取,还能直接以“类名.静态变量”的方式在其他类内使用。
3.逻辑运算符“&&”和“&”都表示“逻辑与”,二者的区别是?
使用“&”会判断每个表达式,当每个表达式都为ture是,逻辑与的结果才为true;而“&&”则是依次判断,当第一个表达式为false时则不去判断后续的表达式。
4.位运算符
按位与(&),都是1则结果为1,否则为0
按位或(|),都是0则结果为0,否则为1
按位取反(~),1变为0,0变为1
按位异或(^),同时为0或同时为1时,结果为0,否则为1
移位操作:<< 左移,将左边的操作数在内存中的二进制数据左移右边操作数指定的位数,左边移空的部分补0
>> 右移,最高位是0,移空的位置就填0;最高位是1,移空的位置填1
>>> 无符号右移,无论最高位是0还是1,移空的高位都填0
移位可以是吸纳整数除以或乘以2的n次方的效果。左移n位就是乘,右移n位是除。
5.运算符优先级由高到低的顺序依次是:增量和减量运算>算数运算>移位运算>比较运算>逻辑运算(&>^>|>&&>||)>赋值运算。
6.数据类型转换:低精度转化为高精度是隐式类型转换;把高精度变量赋给低精度连梁,必须使用显式类型转换运算,语法为:(类型名)要转化的值。当把整数赋值给一个byte,short,int,long型变量时,不可以超出这些变量的取值范围,否则必须进行强制类型转换。
7.foreach语句
foreach语句是for语句的特殊化,在遍历数组等方面提供了很大方便。
语法:for(元素变量x:遍历对象obj){语句块}
foreach语句中不必对元素变量x进行初始化
8.this关键字代表本类对象的引用。this引用的就是本类的一个对象,在局部变量或方法参数覆盖了成员变量时,添加this关键字明确引用的是类成员还是局部变量或方法参数。
this还可以作为方法的返回值,返回某类的一个引用。
9.类的构造方法
对象的构建是通过构造方法完成的,构造方法有两个特点:没有返回值;名称要与本类的名称相同,大小写也要一致。如果类中没有明确定义构造方法,则编译器自动创建一个不带参数的默认构造方法。
注意:如果在类中定义的构造方法都不是无参的构造方法,则编译器不会为类设置一个默认的无参构造方法,当试图调用无参构造方法实例化一个对象时,编译器会报错。只有在类中没有定义任何构造方法时,编译器才会在该类中自动创建一个不带参数的构造方法。
在无参构造方法中可以使用this关键字调用有参的构造方法,但使用这种方式需要注意只可以在无参构造方法中的第一句使用this调用有参构造方法。
10.静态变量、常量和方法
被声明为static的变量、常量和方法被称为静态成员,静态成员是属于类所有的,在本类或其他类使用类名和“.”运算符调用静态成员。语法:类名.静态类成员
静态成员的作用是为了提供共享数据或方法。
在JAVA中对静态方法有两点规定:
在静态方法中不可以使用this关键字。
在静态方法中不可以直接调用非静态方法。
在JAVA中规定不能将方法体内的局部变量声明为static的。
11.在JAVA中有两种对象的比较方式:“==”运算符和equals()方法
二者的区别:equals()方法是String类中的方法,它用于比较两个对象引用所指的内容是否相等;而“==”运算符比较的是两个对象引用的地址是否相等。
12.会被JAVA虚拟机视为垃圾的两类对象:对象引用超过其作用范围或对象赋值为0。
Java提供了System.gc()方法强制启动垃圾回收器。
13.Java为每个基本类型提供了包装类,当在某些情况下需要将基本类型作为对象来处理时,需用到包装类。
第五章 字符串
1.连接字符串:连接多个字符串可使用“+”运算符
2.获取字符串信息相关基本方法
(1)获取字符串长度:length()
(2)字符串查找
indexOf(String s)---------返回参数字符串s在指定字符串中首次出现的索引位置;若没有检查到字符串s,返回值为-1 语法:str.indexOf(substr)
lastIndexOf(String s)------返回指定字符串最后一次出现的索引位置;若没有检查到字符串s,返回值为-1 语法:str.lastIndexOf(substr) 注:如果lastIndexOf()方法中的参数是空字符串””,则返回的结果与调用该字符串length()的返回结果相同。
(3)获取指定索引位置的字符-----charAt()
语法:str.charAt(int index)
3.字符串操作相关基本方法
(1)截取子字符串---------subString()
subString(int beginIndex)------从指定索引位置截取到该字符串结尾
subString(int beginIndex,int endIndex)
(2)去除空格--------trim()
(3)字符串替换------replace() 语法:str.replace(char oldChar,char newChar) 参数可为字符或字符串
(4)判断字符串的开始------startsWith() 返回值为boolean类型
(5)判断字符串的结尾------endsWith() 返回值为boolean类型
(6)判断字符串是否相等------equals()
(7)判断字符串是否相等(忽略大小写)-----equalsIgnoreCase()
(8)按字典顺序比较两个字符串--------compareTo() 对象字符串位于参数字符串之前,比较结果为一个负整数;对象字符串位于参数字符串之后,比较结果为一个正整数;两字符串相等,则结果为0
(9)将字符串中所有字符从大写字母改为小写字母-----toLowerCase()
(10)将字符串中所有字符从小写字母改为大写字母------toUpperCase()
(11)分割字符串-----split() 使字符串按指定的分割字符或字符串进行分割,并将分割后结果存放在字符串数组中
split(String sign)-----sign为分隔符,也可以使用正则表达式
split(String sign,in limit)----------limit为限定拆分的次数
4.StringBulider类
使用“+”附加字符或字符串会产生一个新的String实例,会在内存中创建新的字符串对象,则会加大系统开销。由此引入StringBuilder类,StringBuilder对象将自动增加长度以容纳被附加的字符。若要StringBuilder对象最后输出字符串结果,使用toString()方法。
该类的常用方法:
(1)append()-------在字符串末端追加数据
(2)insert(int offset,arg)-------在指定位置插入内容
(3)delete(int start,int end)------删除去start到end-1的字符
第六章 数组
一、数组的创建及使用
1.数组创建
声明数组:
数组元素类型 数组名称[];
数组元素类型[] 数组名称;
为数组分配内存空间,此时必须指明数组的长度
数组名字=new 数组元素类型[数组元素的个数]
声明的同时为数组分配内存: 数组元素类型 数组名称[]= new 数组元素类型[数组元素个数] 例:int month[]=new int[12]
2.初始化数组
int arr[] = new int[]{1,2,3,5,25}
int arr[] = {1,2,3,5,25}
二、数组基本操作所涉及到的方法
java.util.Arrays 包含了用来操作数组的各种方法
1.fill()------用于对数组中的元素进行替换
fill(int[] a , int value)----将指定的值分配给int型数组的每个元素
fill(int[] a,int fromIndex,int toIndex,int value)----将指定的值分配给int型数组指定范围中的每个元素,填充的范围从索引fromIndex(包括)一直到索引toIndex(不包括)。如果fromIndex==toIndex,则填充范围为空
注:如果指定的索引位置大于或等于要进行填充的数组长度,则报出ArrayIndexOutOfBoundsException(数组越界异常)异常
2.sort()------用于对数组进行排序(默认升序)
Arrays.sort(object)------object是指进行排序的数组名称
3.copyof()------复制数组至指定长度
copyof(arr,int newlength)-------如果新数组的长度大于数组arr的长度,则用0补充(char类型数组是用null补充)
4.copyofRange()------将指定数组的指定长度复制到新数组中
copyofRange(arr,int fromIndex,toIndex)------新数组不包括索引是toIndex的元素
5.binarySearch()------用二分搜索法来搜索指定数组,以获得指定对象,该方法返回要搜索元素的索引值。注意:使用该方法前一定要用sort()方法对数组进行排序
binarySearch(Object[] a , Object key)------如果key包含在数组中,则返回搜索值的索引值;否则返回-1或-(插入点)。插入点是指搜索键将要插入数组的那一点,即第一个大于此键的元素索引。
binarySearch(Object[],int fromIndex,int toIndex,Object key)----在指定范围内查找,如果指定的范围大于或等于数组的长度,则会报出ArrayIndexOutOfBoundsException异常
三、2个基本的数组排序算法
1.冒泡排序
基本思想是对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面。
算法由双层循环实现,外层循环用于控制排序轮数,一般是要排序的数组长度减1。内层循环主要用于对比数组中每个临近元素的大小,以确定是否交换位置,对比和交换次数以排序轮数而减少。
public class BubbleSort {
public static void main(String[] args){
int array[]=new int[]{34,2,67,8,1,55};
BubbleSort sorter= new BubbleSort();
sorter.sort(array);
}
public void sort(int[] array){
for(int i=1;i
array[j+1]){
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
for(int i=0;i
2.直接选择排序
基本思想是将指定排序位置与其他数组元素做对比,如果满足条件就交换元素值。比冒泡排序的交换次数少很多。
算法每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好的数列的最后,直到全部待排序的数据元素排完。
public class SelectSort {
public static void main(String[] args){
int array[]=new int[]{34,2,67,8,1,55};
SelectSort sorter= new SelectSort();
sorter.sort(array);
}
public void sort(int[]array){
int index;
for(int i=1;i
array[index]){
index=j;
}
}
int temp=array[array.length-i];
array[array.length-i]=array[index];
array[index]=temp;
}
for(int i=0;i
第九章 数字处理类
1.Math类-----提供了众多数学方法,Math类中的所有方法都被定义为static形式,可使用Math.数学方法调用
2.随机数-----2种方法
(1)Math.random()方法
该方法默认生成大于等于0.0小于1.0的double型随机数
扩展:m+(int)(Math.random()*n)-------返回大于等于m小于m+n的随机数
(char)(char1+Math.random()*(char2-char1+1))--------返回任意两个字符之间的随机字符
(2)java.util.Random类
可以通过实例化一个Random类的对象创建一个随机数生成器
语法:Random r=new Random(seedValue)-------seedValue随机数生成器的种子,通常设置为系统当前时间
3.大数字处理类----java.math.BigInteger和java.math.BigDecimal类,这两个类用于高精度计算