《JAVA从入门到精通》学习笔记1-9章

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

移位可以是吸纳整数除以或乘以2n次方的效果。左移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)------删除去startend-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;iarray[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;iarray[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.0double型随机数

       扩展: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.BigIntegerjava.math.BigDecimal类,这两个类用于高精度计算

你可能感兴趣的:(java)