0.我为什么要写周记
作为一名Java初学者,我深知总结复习的重要性。我认为学习就是一个积累的过程。
所以我决定在这里记录下我每周学习的内容和一些总结,为以后的自己提供一些参考。
1.Java语言跨平台原理
平台:指的是操作系统(Windows,Linux,Mac)
跨平台:Java程序可以在任意操作系统上运行
一次编写到处运行即java的.class程序可以在不同操作系统上均可以运行。
(java的.class文件相当于Windows中的.exe文件,是可执行的程序)
原理:实现跨平台需要依赖Java的虚拟机 JVM (Java Virtual Machine)
2.JDK与JRE
JDK : JRE+开发工具
JRE : JVM+核心类库
使用JDK开发完成的Java程序,交给JRE运行。(JDK中包含JRE)
安装网址 : http://www.oracle.com
注意事项 : 安装路径不要有中文或者特殊符号如空格等。开发工具最好安装目录统一。
3.在Eclipse编写HelloWorld
1 public classHelloWorld{2 public static voidmain{3 System.out.println("HelloWorld");4 }5 }
4.常量
在程序执行的过程中,其值不可以发生改变的量。
字符串常量 用双引号括起来的内容(“HelloWorld”)
整数常量 所有整数(12,-23)
小数常量 所有小数(12.34)
字符常量 用单引号括起来的内容('a','A','0')
布尔常量 较为特有,只有true和false
空常量 null
5.变量
在程序执行的过程中,在某个范围内其值可以发生改变的量。
从本质上讲,变量是内存中储存数据的区域,你能用它来存数据和取数据,还可以改变这个数据。
格式:数据类型 变量名 = 初始化值;
八种
字节数
数据表示范围
byte
1
-128~127
short
2
-32768~32767
int
4
-2147483648~2147483647
long
8
-263~263-1
float
4
-3.403E38~3.403E38
double
8
-1.798E308~1.798E308
char
2
表示一个字符,如(‘a’,’A’,’0’,’家’)
boolean
1
只有两个值true与false
6.类型转换
默认转换 : 范围小的数据类型直接转换成范围大的数据类型转换规则
byte,short,char—int—long—float—double
注意事项 : byte,short,char相互之间不转换,他们参与运算首先转换为int类型
格式 : 范围大的数据类型 变量 = 范围小的数据类型值;
1 public classDemoTypeCast {2 public static voidmain(String[] args) {3 //直接输出了运算的结果
4 System.out.println(3 + 4);5
6 //定义两个int类型的变量
7 int a = 3;8 int b = 4;9 int c = a +b;10 System.out.println(c);11
12 //定义一个byte类型,定义一个int类型
13 byte bb = 2;14 int cc = 5;15 System.out.println(bb +cc);16
17 //用变量接收,这个变量应该有类型18 //byte dd = bb + cc;//可能损失精度19 //byte,short,char类型在参与运算的时候会把自己提升为int类型
20 int dd = bb +cc;21 System.out.println(dd);22 }23 }
7.运算符
运算符概述
对常量和变量进行操作的符号称为运算符。
表达式概述
用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。
不同运算符连接的式子体现的是不同类型的表达式。
常用的运算符
算术运算符 : + , - , * , / , %
赋值运算符 : 基础 : = 拓展: += , -= , *= , /= , %=
关系运算符 : == , != , > , < , >= , <=
逻辑运算符 : & , | , ! , ^
三元运算符 : (关系表达式) ? 表达式1 : 表达式2;
(如果条件为true,运算后的结果是表达式1;)
(如果条件为false,运算后的结果是表达式2;)
8.键盘录入Scanner类
导包(位置放到class定义的上面)
import java.util.Scanner;
创建对象
Scanner sc = new Scanner(System.in);
调用方法接收数据
int x = sc.nextInt();
1 public classDemoScanner {2 public static voidmain(String[] args) {3 //创建键盘录入数据的对象
4 Scanner sc = newScanner(System.in);5
6 //接收数据
7 System.out.println("请录入一个整数:");8 int i =sc.nextInt();9
10 //输出数据
11 System.out.println("i:"+i);12 }13 }
9.流程控制语句
在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说程序的流程对运行结果有直接的影响。
所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能。
流控语句分为三个类
9.1 顺序结构
是程序中最简单最基本的流程控制,没有特定的语法结构,
按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
9.2 选择结构
选择结构也被称为分支结构。
选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,
逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
选择就结构有两种,if语句,switch语句。
1 //if语句的三种格式
2 if(){};3 if(){}else{};4 if(){}elseif(){}...else{};5 //switch语句
6 switch(表达式){7 case目标值1:8 语句体1;9 break;10 case目标值2:11 语句体2;12 break;13 case目标值3:14 语句体3;15 break;16 .17 .18 .19 default:20 语句体n+1;21 }
9.3 循环结构
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,
当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,
从而结束循环,否则循环将一直执行下去,形成死循环。
三种循环结构 1. for 2.while 3. do while
1 for(初始表达式;布尔表达式;步进表达式){2 循环体;3 }4 //for循环中定义的变量一旦循环结束将不能使用5 //for循环通常使用在次数确定的情况下
初始化表达式;while(布尔表达式;){
循环体;
步进表达式;
}//while循环通常使用在次数不确定的情况下
初始化表达式do{
循环体
步进表达式
}while(布尔表达式);//do while 会先执行一次循环体,不论是否达成循环条件
10.跳转控制语句
我想让循环在某一步的时候结束或者跳过某些数据不要这些数据,现在就做不了这件事情。
为了弥补这个缺陷,Java就提供了break,continue来实现控制语句的中断和跳转。
break 中断
break的使用场景:
在选择结构switch语句中
在循环语句中
离开使用场景的存在是没有意义的
break的作用:
跳出单层循环
continue 继续
continue的使用场景:
在循环语句中
离开使用场景的存在是没有意义的
continue的作用:
单层循环对比break,然后总结两个的区别
break 结束当前循环
continue 结束本次循环,继续下一次循环
11.随机数Random
概述
用于产生一个随机数
使用步骤(和Scanner类似)
导包
import java.util.Random;
创建对象
Random r = new Random();
获取随机数
int number = r.nextInt(10);
产生的数据在0到10之间,包括0,不包括10。
括号里面的10是可以变化的,如果是100,就是0-100之间的数据。
也可以产生一个随机对象。
1 String s1 =r.next();2 double s2 =r.nextdouble();3 byte s3 =r.nextbyte();4 .5 .6 .
12.数组
数组是存储同一种数据类型多个元素的容器。
数组既可以存储基本数据类型,也可以存储引用数据类型。
数组的定义格式
格式1:数据类型[] 数组名;
格式2:数据类型 数组名[];
数组的初始化分为两种
1.动态初始化
格式:数据类型[] 数组名 = new 数据类型[数组长度];
例:int[] arr = new int[3];
2.静态初始化
数据类型[] 数组名 = new 数据类型[]{元素值1,元素值2,…};
例:int[] arr = new int[]{1,2,3};
数组操作的两个常见小问题
数组索引越界异常ArrayIndexOfBoundsException
访问到了数组中的不存在的索引时发生。
空指针异常NullPointerException
数组引用没有指向对象,却在操作对象中的元素时。
13.二维数组
二维数组定义格式
数据类型[][] 数组名;(推荐)
数据类型 数组名[][];
数据类型[] 数组名[];
初始化方式
数据类型[][] 变量名 = new 数据类型[m][n];
m:二维数组的长度(二维数组中一维数组的个数)
n:二维数组中一维数组的长度
数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};
简化版格式:数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};
1 //二维数组的遍历
2 public classDemoArrayArrayTest {3 public static voidmain(String[] args) {4 //定义二维数组
5 int[][] arr = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9} };6 for(int y=0; y
11 }12 }13 }
14.方法
方法就是完成特定功能的代码块
在很多语言里面都有函数的定义
函数在Java中被称为方法
格式
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) {
方法体;
return 返回值;
}
格式解释
修饰符目前记住 public static
返回值类型用于限定返回值的数据类型
方法名一个名字,为了方便我们调用方法
参数类型用于接收调用方法时传入的数据的类型
参数名用于接收调用方法时传入的数据的变量
方法体完成功能的代码
return 结束方法,把返回值带给调用者
写一个方法首先有两点需要明确
返回值类型明确功能结果的数据类型
参数列表明确有几个参数,以及参数的类型
注意事项:方法定义完成之后,没有调用没有意义,不调用不执行。
1 publicclass DemoMethod {2 /*
3 * 写一个方法,用于求和。4 * 两个明确:返回值类型int参数列表int a,int b5 */
6 public static intsum(inta,intb){7 /*int c = a + b;8 return c;*/
9 returna +b;10 }11 }
方法重载
方法重载概述
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
方法重载特点
与返回值类型无关,只看方法名和参数列表
在调用时,虚拟机通过参数列表的不同来区分同名方法
public classDemo02Method {publicstaticvoid main(String[] args) {int a = 10;int b = 20;//求和
int result =sum(a, b);
System.out.println("result:" +result);int c = 30;//求和
result =sum(a,b,c);
System.out.println("result:"+result);
}//两个float类型的数据求和
public static float sum(float a,floatb) {return a +b;
}//三个整数的求和
public static intsum(inta,intb,intc) {return a + b +c;
}//两个整数的求和
public static int sum(int a, intb) {return a +b;
}
}
方法参数传递问题
参数传递概述
可以理解当我们要调用一个方法时,我们会把指定的数值,传递给方法中的参数,
这样方法中的参数就拥有了这个指定的值,可以使用该值,在方法中运算了。
这种传递方式,我们称为参数传递。
在这里,定义方法时,参数列表中的变量,我们称为形式参数
调用方法时,传入给方法的数值,我们称为实际参数
参数是基本类型及图解
形式参数的改变不影响实际参数。
15.练习
一年有四季;3,4,5春季;6,7,8夏季;9,10,11秋季;12,1,2冬季
用if语句实现
1 public classDemo01Test {2 public static voidmain(String[] args) {3 //键盘录入一个月份,用Scanner实现
4 Scanner sc = newScanner(System.in);5 //接收数据
6 System.out.println("请输入一个月份(1-12):");7 int month =sc.nextInt();8 if(month==1 || month==2 || month==12) {9 System.out.println("冬季");10 }else if(month==3 || month==4 || month==5) {11 System.out.println("春季");12 }else if(month==6 || month==7|| month==8) {13 System.out.println("夏季");14 }else if(month==9 || month==10 || month==11) {15 System.out.println("秋季");16 }else{17 System.out.println("你输入的月份有误");18 }19 }20 }
用switch语句实现(case穿透)
1 public classDemo02Test {2 public static voidmain(String[] args) {3 //键盘录入一个月份,用Scanner实现
4 Scanner sc = newScanner(System.in);5 //接收数据
6 System.out.println("请输入月份(1-12):");7 int month =sc.nextInt();8 //通过case穿透现象改进代码
9 switch(month) {10 case 1:11 case 2:12 case 12:13 System.out.println("冬季");14 break;15 case 3:16 case 4:17 case 5:18 System.out.println("春季");19 break;20 case 6:21 case 7:22 case 8:23 System.out.println("夏季");24 break;25 case 9:26 case 10:27 case 11:28 System.out.println("秋季");29 break;30 default:31 System.out.println("你输入的月份有误");32 break;33 }34 }35 }
2.数组元素反转
1 public classDemoTest {2 public static voidmain(String[] args) {3 //定义一个长度为5的数组
4 int[] arr = new int[5];5
6 //通过键盘录入数据给数组中的元素赋值
7 Scanner sc = newScanner(System.in);8 for (int x = 0; x < arr.length; x++) {9 System.out.println("请给出第" + (x + 1) + "个元素");10 arr[x] =sc.nextInt();11 }12
13 System.out.println("反转前的数组元素:");14 printArray(arr);15
16 //定义方法将arr数组中的内容反转
17 reverse(arr);18
19 System.out.println("反转后的数组元素:");20 //定义方法遍历数组
21 printArray(arr);22 }23
24 //遍历数组
25 public static void printArray(int[] arr) {26 System.out.print("[");27 for(int x=0;x
36 /*
37 * 两个明确: 返回值类型:void 参数列表:int[] arr38 */
39 public static void reverse(int[] arr) {40 /*
41 利用for循环遍历数组42 初始化表达式定义两个指针,记录第一个元素和最后一个元素:int min = 0,max = arr.length-1;43 布尔表达式:min
46 for(int min=0,max=arr.length-1;min<=max;min++,max--) {47 //利用第三方变量完成数组中的元素交换*
48 int temp =arr[min];49 arr[min] =arr[max];50 arr[max] =temp;51 }52 }53 }
3.数组作为返回值例:将五个参数中 平均值与和 存储到数组中并返回例如有五个int类型数据 4,23,221,2,111
1 public classTest2 {2 public static voidmain(String[] args) {3
4 int[] arr = getArr(4,23,221,2,111);5 }6 /*
7 * 返回值类型是一个数组类型 说明返回值就是一个数组8 * 将五个参数中 平均值与和 存储到数组中并返回9 * 第一个元素是平均值 第二个元素是和10 */
11 public static int[] getArr(int a,int b,int c,int d,inte){12 //求和
13 int sum = a+b+c+d+e;14 //求平均值
15 int avg = sum/5;16 //将和与平均值存储到数组中17 //创建一个数组 存储平均值与和 长度为2
18 int[] arr = new int[2];19 arr[0] =avg;20 arr[1] =sum;21
22 return arr;//返回的数组
23 }24 }