Java学习日记-(一)~(三)是入门

130 阅读11分钟

Java入门(一)

JAVA结构&版本

#20190724

  1. 编辑→编译→执行

    • 记事本中编辑后,改后缀为.java文件;
    • DOS命令窗口中:javac 文件名.java,会生成.class文件
    • DOS中:java 文件名,执行.class文件
    • 反编译:从.class→.java的过程
  2. 关于.class

    • 生成的.class文件为字节码文件
    • 字节码程序可以运行在任何一个JVM(java虚拟机)上,以实现一次编写,到处运行。
  3. 关于java的结构

    • JDK:开发工具包
    • JVM:虚拟机
    • JRE:运行环境
    • 关系:JDK>JRE>JVM
  4. 关于Java的三大版本

    • JavaSE:标准版
    • JavaME:微缩版
    • JavaEE:企业版
    • 关系:JavaEE>JavaSE>JavaME
  5. eclipse快捷键

    • ctrl + d 删除行
    • alt + / 快速输出
  6. JAVA之父:詹姆斯·高斯林

  7. print和println的区别

    • print 不换行,字符输出
    • println换行
  8. DOS命令

    • cd \ 返回根目录

    • e: 进入e盘

    • dir 查看目录

    • cd .. 返回上级目录


命名法&数据类型&运算符&进制转换

#20190725

  1. typora字体及颜色设置方法

    <span style="color:red;">这是比font标签更好的方式。可以试试。</span>

    <font color=red size=4 face="黑体">color=#0099ff size=72 face="黑体"</font>

    这是比font标签更好的方式。可以试试。

    color=#0099ff size=72 face="黑体"

  2. 命名规则P18

  3. 帕斯卡命名法和驼峰命名法(见名知意)

    • 帕斯卡:GetUserName,常用于类名、接口名、枚举名
    • 驼峰:getUserName,常用于变量名、方法名
  4. 注释

    • 单行注释:ctrl + /

    • 多行注释:ctrl + shift + /

    • 文档注释:alt + shift + j

  5. 数据类型P21

    • 引用数据类型:引用java中的类,有n种
    • 基本数据类型:8种
    • boolean(1)、byte(1)、short(2)、char(2)、int(4)、long(8)、float(4)、double(8)
    • var 不确定数据类型,用的时候才知道
    • 默认值:整型=0,浮点型=0.0、字符型=\u0000、布尔=false
    • String类型是引用类
    • char类型是表示字符型,字符型是用' '的单个字符
    • long以L结尾,否则为int型;float以 f 结尾,否则默认为double型
  6. 基本数据类型和引用数据类型的区别

  7. 变量

    • [访问修饰符]变量类型 变量名[=初始值]

    • 变量要先定义再使用,使用前要初始化

    • final修饰的变量是不可再被修改的变量,是常量

  8. 数据类型转换

    • 自动转换 优先级级别:小→大

    • byte+short(+char)=int

    • 任何类型+字符串=字符串

    • 强制转换:byte+int→byte(可能会丢失精度)

      int i =123;
      byte b=(byte)i;
      

      byte b = i;  是错误的

  9. Scanner类

    • 使用前要导入包:import java.until.scanner;(scan+alt+/ 会自动导入)
    • 创建Scanner对象:Scanner input = new Scanner(System.in);
    • 键盘获取:String next() 获得字符串;boolean hasNext()判断是否有数据输入,是则返回true,否则返回false
  10. 赋值运算符:+=、-=、*=、/=、%=

    • byte或short在使用+=或-=时,不用强制转换类型:

      byte a =2;
      short b =3;
      a+=4;
      

      a=a+4;  //错误,因为byte优先级小于int需要转换类型 byte→int

    • 输入四位整数,分解获得各个位数

      //	分解获得个、十、百、千位
      	int ge,shi,bai,qian;
      	qian=num/1000;
      	bai=num/100%10;
      	shi=num/10%10;
      	ge=num%10;
      
  11. 关系运算符

    • ">" "<" ">=" "<=" 只支持数值类型比较
    • “==” “!=” 支持所有数据类型比较
    • 关系表达式运算结果是布尔值
    • ">" "<" ">=" "<=" 优先级高于 “==” 和 “!=”
  12. 逻辑运算符P29

    • &:全true为true,无论判断结果如何,两边都会计算

      &&:只要左边为false,另一边就不计算了

    • |:全false才false,无论判断结果如何,两边都会计算

      ||:只要左边为true,另一边就不计算了

  13. 位运算符P30

    • &:1+1=1
    • |:1+0=1
    • ^:1+1=0;1+0=1
    • <<:右侧补0(x左移n位=x *2^n)
    • (右移)>>:左侧补最高位,即符号位(右移n位就 /2^n)
    • (无符号右移)>>>:左侧空位补0
  14. 原反补

    • 正数的原、反、补就是它本身

    • 负数的反码=除符号位外其余取反

    • 负数的补码=反码+1

  15. 进制转换


循环结构&断点&数组

#20190726

  1. 程序的基本结构:

    • 顺序结构:从上至下依次执行,无判断/跳转/循环;
    • 选择结构:单分支、双分支、多分支结构( if 和 switch 语句)
    • 循环结构:while 、do-while 、for 、foreach;
  2. if

    if(表达式){
        语句
    }
    
    • 表达式是布尔类型的表达式,值为true或false
    • 语句必须包含{}
  3. switch

    switch(表达式){
    	case 常量1:
    		语句
    		break;
    		……
    		default:
    			语句
    			break;
    }
    
    • default 是可选项,当所有条件都不匹配时执行default
    • switch后的表达式允许是:int、byte、short、char、枚举类型、string类型
  4. 循环控制语句:

    • while、do-while、for
    • 一个循环由四部分组成:循环变量、循环条件、循环体、改变循环变量值
  5. for

    for(表达式1;表达式2;表达式3;){
        循环体
    }
    
    • 表达式1 是循环变量的初始化,只执行一次

    • 表达式2 是循环条件

    • 表达式3 是改变循环变量的值

  6. 循环语句对比

    循环特点使用场合
    for先判断,后执行已知循环次数的情况下
    while先判断,后执行先判断后执行,不知循环次数的情况下
    do-while先执行一次,后判断需要先执行的情况,次数没有比while多一次
  7. 跳转语句

    跳转语句特点/作用
    break结束当前循环,在switch中是跳出switch语句;只能用于循环语句和switch语句中
    continue强制跳过本次循环剩余代码,开始执行下一次循环
    return结束当前return所在方法的执行,回到调用方法的语句处
  8. 断点

    • 作用:在调试程序时停在断点处,单步执行,以便发现错误
    • 步骤:
      • 设置断点:双击要设置断点的代码左侧蓝色条
      • 启动调试:启动Debug调试(甲壳虫按钮)
      • 跟踪程序:即按键控制程序执行,F5“单步跳入”(跳入代码内部执行),F6"单步跳过"(不跳入,仅执行本行代码,执行完就跳到下一行)
      • 双击断点处则取消设置断点
  9. 数组

    • 名称解释
      数组有相同数据类型 且按一定次序排列 的 一组变量 的集合体
      数组元素构成一个数组的每个数据
      数组下标数组元素在数组中的位置,从0开始递增
      数组大小数组元素的个数叫数组大小或数组长度
    • 数组的使用

      • 定义数组

        数据类型[] 数组名;

        int[] score;

      • 为数组元素分配内存

        数组名=new 数据类型[数组长度];

        score=new int[5];

      • 数组元素初始化

        score[0]=1;

        score[1]=2;

      • 合成一步 int[] score=new int[]{123,12,104,11,5}; 或 int[] score ={123,12,104,11,5};

    • 数组内存的分配

    • 栈底是数组名称,因为栈是先进后出

      数组是引用类型,所以默认值是null

      内存地址编号是由操作系统分配的16进制数

    • 基本数据类型变量中存储的是真实数据,引用类型变量中存储的是内存地址编号

    • new在java中是分配内存的作用,new的值在堆中

      “=” 表示将new申请的内存空间首地址赋值给数组

心得体会

​ 通过今天的学习,我对循环以及跳转语句有了更深更清晰的认识,但是如果说掌握,我感觉我还差了点。因为同一道题不同的想法就有不同的解法,不懂算法也可能会找错方法,差了点应该就是差在这吧。像课后习题第四题,如果没有给出代码让我自己写,大概率写不出来,可能还是得多练。


数组&冒泡排序&异常&Arrays类

#20190729

一、 数组

1.遍历数组元素

for(元素类型 变量名:要循环的数组或集合){}

例:

//	定义数组
	int[] score=new int[10];
//	随机循环输入数组元素内容
	for(int i=0;i<10;i++){
        //Random要导包,35是随机数取值范围
		score[i]=new Random().nextInt(35);
	}
//	循环输出数组
	for (int i : score) {
		System.out.print(" "+i);
	}
	System.out.println();

2.Random伪随机数

  1. 正常用Random()时需要导入包:import java.util.Random;
  2. 在用Math.random()*10时不用导包,因为Math在lang包里;
  3. 10是随机数取值范围;
  4. 因为Math.random()是double类型,所以要强制转换;

二、排序

1.冒泡排序

  1. 定义:

    • 从第一个数开始,与相邻的元素比较。如果第一个比第二个大,就交换它们两个的位置;
    • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
    • 针对所有的元素重复以上的步骤,除了最后一个;
    • 注意只对相邻元素进行比较,每确定一个最大值为一轮
  2. 动图演示:

    img

  3. 代码实现:

    //	冒泡排序法
    	//外循环控制循环比较多少轮
    	for(int i=0;i<score.length-1;i++) {	
    		//内循环控制每轮比较多少次
    		for(int j=0;j<score.length-i-1;j++) {
    			if(score[j]>score[j+1]) {
    				int temp=score[j];
    				score[j]=score[j+1];
    				score[j+1]=temp;
    			}
    		}
    	}
    //	循环输出一维数组
    	for (int i : score) {
    		System.out.print(" "+i);
    	}
    

2.十大经典排序法

三、常见异常

1.下标越界异常

java.lang.ArrayIndexOutOfBoundsException

  • 若arrays下标为0~9,则arrays.lenght=数组长度=10

  • 数组下标是从0开始的,也就意味着最后一个元素的下标是arrays.length-1。

  • 如果下标大于arrays.length-1,就会抛出此异常

  • 例子对比:

    int[][] s = new int[][] {{0,1,2},{0,1,2,3}}; //不规则二维数组 System.out.println(s[0] [3]); //数组下标越界

    int[][] s1 = new int[3][4];
    s1[0][0] = 1;
    s1[0][1] = 2;
    s1[0][2] = 3;
    System.out.println(s1[0][3]);//不报错,因为在分配完内存后有默认值0
    

2.空指针异常

  • 操作值为NULL的变量,会抛出此异常
  • 当程序只给数组名分配空间,没有给数组元素分配空间,栈底数组没有指向堆的内存空间就是null

四、二维数组

1. 定义:

数据类型[][] 数组名称;

int[][] scores;

数据类型 数组名称[][];

int scores[] [];

2.分配内存:

`scores = new int[3][4];`

3. 赋值(初始化)

scores[0][0] = 0;//给二维数组第一行第一列赋值

scores[1][0] = 1;//给二维数组第二行第一列赋值

int[][] scores = new int[][]{{1,2,3},{2,3,4},{3,4,5}};

4.二维数组的遍历

public class Array {
    /**
	 * 题目:
	 * 计算二维表格里每行每列的总和
	 */
	public static void main(String[] args) {
//		定义二维数组和变量成绩总和
		int[][] score=new int[3][4];
		int total=0;
//		定义二维数组内容,用随机数
		for(int i=0;i<score.length;i++) {
			for(int j=0;j<score[i].length;j++) {
				score[i][j]=(int)(Math.random()*10);
				System.out.print(score[i][j]+",");
			}
			System.out.println();
		}
//		计算每行总和
		for(int i=0;i<score.length;i++) {
//			放在控制行的开始,在执行完一行后total清零
			total=0;
			for(int j=0;j<score[i].length;j++) {
				total+=score[i][j];
			}
			System.out.println("第"+(i+1)+"行总和="+total);
		}
//		计算每列总和
//		这里不能用score[i].length取列数,因为i还没定义
		for(int j=0;j<score[0].length;j++) {
//			放在控制列的开始,在执行完一列后total清零
			total=0;
			
			for(int i=0;i<score.length;i++) {
				total+=score[i][j];
			}
			System.out.println("第"+(j+1)+"列总和="+total);
		}	
	}
}

五、Arrays类

1.Arrays类常用方法

该类包含用于操作数组的各种方法(如排序和搜索)。

例如:

方法返回值说明
equals(a,b)boolean如果两个指定的字节数组彼此 相等 ,则返回 true
sort(a)void按升序排列数组的指定范围
toString(a)String返回指定数组的内容的字符串表示形式
fill(a,val)void将指定的val值分配给指定数组的指定范围的每个元素
copyOf(a,length)与数组类型一致复制指定的数组,用零截取或填充(如有必要),以便复制具有指定的长度
binarySearch(a,val)int使用二叉搜索算法搜索指定数组的下标。
补充:arraycopy方法
System.arraycopy(Object src, int srcPos,Object dest,int destPos, int length)

src参数是指不是数组的对象。 
dest参数是指不是数组的对象。 
src参数和dest参数是指组件类型是不同的基本类型的数组。 
src参数是指具有原始组件类型的数组, dest参数是指具有引用组件类型的数组。 
src参数是指具有引用组件类型的数组, dest参数是指具有原始组件类型的数组。

2.equals()和“==”

  1. equals用于判断两个字符串/数组是否相等,
  2. “==”用于判断内存地址是否相等
  3. 源码内equals()封装时用的也是”==“

3.sort()

  1. 使用时要导入包:import java.util.Arrays;

  2. Arrays.sort(要排序的数组名);

  3. for(int i=0;i<array.length;i++) {
    			Arrays.sort(array);
    			System.out.print(array[i]+",");
    			}
    
  4. sort排序

4.toString()

  1. 专门输出数组内容的方法,将一个数组转换为字符串并输出,

  2. 按顺序把多个数组元素连在一起,多个数组元素间用“, ”隔开

  3. int[] array=new int[] {23,45,13,47,5,98,5,32,34,54}; System.out.println(Arrays.toString(array));

    输出:[23, 45, 13, 47, 5, 98, 5, 32, 34, 54]

  4. //	直接输出数组arr1,结果是输出了arr1所在地址:[I@15db9742
    	System.out.println(arr1);
    

5.copyOf()和arraycopy()

  1. copyOf() 把数组复制成指定长度的新数组,用零截取或填充,以便复制具有指定的长度。
public static void main(String[] args) {
		int[] arr=new int[] {12,34,56,78,9};
//		使用copyOf复制arr为长度是三的新数组arr1
		int[] arr1 =Arrays.copyOf(arr, 3);
		System.out.println(Arrays.toString(arr1));	
	}
  1. arraycopy() 把一个数组复制到新数组的对应位置

心得体会

今天学的内容感觉比较多一点,需要练习,时间有点不够;很多时候都是看老师写挺顺的,自己写起来就会发现很多要注意的问题,也不是不会,就是不够熟练。