Java SE基础复习01

Java se 复习01

① 用cmd命令行运行Java源文件。
新建文本(Java文件后缀),编写Java源代码,。打开cmd命令行窗口,切换到Java文件的目录(例如命令行输入d:),输入javac 源码名称,编译成功后自动生成class文件,输入Java 源码名称,回车输出运行结果。
在这里插入图片描述在这里插入图片描述
*类名称和文件(源代码)名称必须一致
在这里插入图片描述

② 标识符命名规则。
1、 硬性规范:
 可以包含英文字母,数字,$,_
 不能数字开头
 不能是关键字
2、 通用规范:
 类名:首字母大写,后面每个单词首字母大写(大驼峰)
 变量名:首字母小写,后面每个单词首字母大写(小驼峰)
 方法名:同变量名
 包名:所有字母小写
 常量名:所有字母大写,多个单词用下划线分隔
③ 基本数据类型和引用数据类型。
基本:整形,浮点型,字符型,布尔型(long类型范围小于float类型) float类型数据赋值后要加上f或F,long类型数据赋值后面加l或者L,例float num=2.5F;long num=2.4L;
引用:字符串,数组,类,接口,Lamda
④ 数据类型转换。
 自动类型转换:
1、 范围由小变大 long num=100;
2、 不需要特殊处理,自动完成
 强制类型转换:
1、 代码需要处理,不能自动完成
2、 范围由大变小
3、 格式:int num=(int)100L;
4、不推荐使用,可能产生精度损失,数据溢出
⑤ 关于运算符%的相关运算。
当%的左边是负数时,计算结果也为负数,右边为负数时负号忽略。
在这里插入图片描述
⑥ 位运算符(了解)
 左移<<:m<<n即m*2的n次方在这里插入图片描述
图解如下:
在这里插入图片描述

 右移>>:m>>n即m*2的-n次方
在这里插入图片描述
图解如下:
在这里插入图片描述
 无符号右移>>>:无符号的右移空位直接补0
在这里插入图片描述

	总结:左移右移本质上是根据二进制数进行移动来运算,有符号的右移看右移后的首位是0还是1,是0空位就补0,是1就补1,无符号的右移空位直接补0。
	与运算(&)和或运算(|)和异或运算(^)和反码运算(~):转换成二进制运算

在这里插入图片描述
Eclipse中运行结果:
在这里插入图片描述

	*&运算中只有都为1时结果为1,其他情况都为0,|运算中只有都为0时结果为0,其他情况都为1,异或^运算中相同为0不同为1。

⑦ 关于动态声明数组。
动态声明数组会默认初始化值,如int a[]=new int[4],每个元素默认为 0。整形数组的初始值是0,对象数组的初始值是null。
⑧ 二位数组初始化时,可以只定义第一位数组不定义第二维数组,例int a[][]=new int[2][],即只定义有几个一维度数组,不定义一个一维度数组中有几个元素,直接默认初始化。
⑨ 数组的主要几个算法问题。
1、 数组的最值、总和、平均数问题。
2、 数组的复制,反转。

//数组复制
	   int copy[]=new int[a.length];
	   for(int i=0;i<copy.length;i++){
		   copy[i]=a[i];
		   System.out.print(copy[i]+" ");
	   }
       //数组反转
	   int temp[]=new int[a.length];
	   int k=0;
	   for(int i=a.length-1;i>=0;i--){
		   temp[k++]=a[i];
	   }
	   a=temp;//数组之间赋值
	   System.out.println("");
	   for(int i=0;i<a.length;i++){		
		   System.out.print(a[i]+" ");
	   }

3、 数组元素的排序。
 冒泡排序

//数组冒泡排序
	   int temp=0,k=0,flag=0;
	   for(int i=0;i<a.length-1;i++){
		   flag=0;
		   for(int j=0;j<a.length-i-1;j++){
		         if(a[j+1]<a[j]) {temp=a[j+1];a[j+1]=a[j];a[j]=temp;flag=1;}//相邻元素比较,交换元素
		         k++;
		     }
//如果遍历一遍数组没有进行交换,说明已经有序,不用再进行比较,直接跳出循环
		   if(flag==0) break;
		   }

输出结果:
在这里插入图片描述

**冒泡排序的主要思想在于双重嵌套循环,第一重循环(i)是遍历的次数,第二重(j)是遍历数组并且相邻元素比较。**每一趟遍历后会出现此趟遍历的最值在最右方或者最左方,剩下的元素再进行遍历和比较。注意:每一趟遍历会出现一个最值,并且此最值不再参加下一次遍历,直到遍历过程没有交换元素操作即没有出现新的最值(已经有序)。
 快速排序
快速排序的主要思想是找分割点,使用递归对数组进行多次分割直到数组元素有序。每次以最左边的元素为中心点,小于中心元素的在左边大于中心元素的在右边,这里使用了两个基准点,分别从左和从右向中间移动并进行排列。注意必须要右边的基准点先比较和移动,否则比基准数大的元素会由于和基点交换被排到左边去。
附快排代码:

package demo2;
public class demo2 {
    public static void main(String []args){
	    int arr[]={23,56,324,-45,53,2,543,23,654,76,5465,32,78,90,7,5};
	    int right=arr.length-1,left=0;
	    for(int i=0;i<arr.length;i++){
	    	System.out.print(arr[i]+" ");
	    }
	    quickSort(arr,left,right);//注意参数的left和right是数组的索引值
	    System.out.println("");
	    for(int i=0;i<arr.length;i++){
	    	System.out.print(arr[i]+" ");
	    }
  }
    
    public static void quickSort(int a[],int left,int right){
    	//先找到分割点,当左基准点小于右基准点时则继续递归下去
    	if(left<right){
    		int point=splitPoint(a,left,right);
    		//递归分割点左边
    		//System.out.println(a[point]);
    		quickSort(a, left, point-1);
    		//递归分割点右边
    		quickSort(a, point+1, right);
    	} 	
    }
    
    public static int splitPoint(int a[],int left,int right){
    	//以第一个元素为中心点
    	int first=a[left];
    	while(left<right){
    		//右基准点先往左移动,寻找比中心点小的元素(即比中心点大时继续移动)
    		while(left<right&&a[right]>=first) right--;
    		//找到后和索引为left的元素交换
    		swap(a,left,right);
    		//然后再让左基准点往右移动
    		while(left<right&&a[left]<=first) left++;
    		swap(a, left, right);
    	}
    	//此时left为分割点,返回分割点
    	return left;
    }
    
    public static void swap(int a[],int left,int right){
    	int temp=0;
    	temp=a[left];
    	a[left]=a[right];
    	a[right]=temp;
    }
}

参考链接:
https://www.bilibili.com/video/BV1CJ411m7gg?p=39

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值