主要看的毕老师的视频,day1到day5主要是基本语法的学习
1. JDK和编译器安装
视频里面的内容比较久了,参考意义不大,我是自己百度装的。
2. 运算符
算术运算符:+ , - , * , / , % , ++ , --
(1)% 是取余,%的结果的符号和前面的那个数一致。
(2)++,--:
A:单独使用
放在数据的前面和后面效果一样。
B:参与操作使用
放在数据的前面,先数据变化,再参与运算。
放在数据的后面,先参与运算,再数据变化。
赋值运算符:=,+=,-=,*=,/=,%=,...
(1)注意:
int a = 10;
a += 20;
值等价于:a = a + 20;
把左边和右边的结果赋值给左边,并强制转换为左边的类型。
关系运算符:==,!=,>,>=,<,<=
(1)注意:
A:无论表达式简单还是复杂,结果肯定是boolean类型
B:千万不要把"=="写成"="
逻辑运算符:&,|,^,!,&&,||
(1)^:相同false,不同true
!:偶数个,值不变;奇数个,值相反。
(2)&&具有短路效果,左边为false,右边不执行。
||具有短路效果,左边为true,右边不执行。
位运算符:&,|,^,~,>>,>>>,<< 做位运算
(1)^的特点:针对同一个数据异或两次,值不变。
~的意义:一个数在二进制表示下,所有位全取反,但是计算机以补码形式存储,故(~x) = -(x + 1)
(2)交换两个数数值不通过第三方变量的方式
` a=a^b;
b=a^b;
a=a^b; `
或:
` a=a+b;
b=a-b;
a=a-b; `
(3)请用最有效率的方式计算2乘以8的值:2<<3
三元运算符:
(1)格式:
关系表达式?表达式1:表达式2;
(2)执行流程:
A:计算关系表达式的值
B:如果是true,表达式1就是结果
如果是false,表达式2就是结果
3. 键盘输入语句
(1)导包
import java.util.Scanner;
(2)创建键盘录入对象:
Scanner sc = new Scanner(System.in);
(3)获取数据
int i = sc.nextInt();
4. 流程控制
if:三种定义格式
(1)if(关系表达式){
语句体;
}
(2)if(关系表达式) {
语句体1;
}else {
语句体2;
}
(3)if(关系表达式1) {
语句体1;
}else if(关系表达式2) {
语句体2;
}else if(关系表达式3) {
语句体3;
}
...
else {
语句体n+1;
}
switch:适用于固定的几个值判断,case后面只能跟常量
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
...
default:
语句体n+1;
break;
}
while:while循环中的循环体可以一次不执行,do...while循环中循环体至少执行一次。while循环更常用于循环次数不一定
(1)while语句基本格式
while(判断条件表达式) {
语句体;
}
(2)do...while语句基本格式
do {
语句体
}while(判断条件表达式)
for:
(1)for(初始条件表达式;判断条件表达式;控制条件表达式) {
循环体;
}
(2)嵌套就不用多说了
break:跳出循环,常用于switch和循环语句
continue:结束本次循环,开始下次循环
一个小练习:输入一个数,获取其十六进制的表现形式
`import java.util.*;
class iftest1_10to16{
public static void main(String[] args)
{ //输入数字
System.out.println("请输入数字:");
Scanner number = new Scanner(System.in);
int a = number.nextInt();
//数制转换
for(int x = 0;x < 8;x++)
{
int n = a & 15;
if(n>9){
System.out.println((char)(n-10+'A'));
}else{
System.out.println(n);
}
a = a >>> 4;
}
number.close();
}
} `
5. 方法(函数)
(1)修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) { 函数体; return 返回值; }
(2)void表示不需要返回值
(3)方法需要两个明确,明确返回的值的类型,明确需要的参数
(4)方法的重载:一个类中出现同名函数(方法),参数的个数或者类型不一样
一个重载的小例子:void show (int a,float b, char c)i下列哪些函数和给定函数重载了
a .int show(int x,float y, char z)//没有重载,这个函数不允许和给定函数存在于同一个类中。因为会产生调用的不确定性。
b.void show (float b,int a, char c)//重载了,参数类型不同。
c.void show(int c,float a,char b)//没有重载,和给定函数一样。不允许存在。
d.void show(int a,int b,int c)//重载了,因为类型不同。
e .double show ( )//重载了,因为个数不同。
(5)方法运行时的内存调用:
方法被调用运行时就进栈(压栈),运行完就出栈(弹栈)
6. 数组
(1)数组的定义(初始化):int可以替换成其他的类型
A:动态初始化 只给长度,不给元素
int[] arr = new int[3];
B:静态初始化 不给长度,给元素
int[] arr = new int[]{1,2,3}
(2)java对内存空间的划分:栈,堆,方法区,本地方法区,寄存器
栈内存:存储都是局部变量。只要是在方法中定义的变量都是局部变量。一旦变量的生命周期结束该变量就被释放。
堆内存:存储都是实体(对象)。每一个实体都有一个首地址值。
堆内存的变量都有默认初始化值。不同类型不一样。int-0 double-0.0 boolean-false char-'\uOo000
当实体不在使用时,就会被垃圾回收机制处理。|
数组的内存图解:
(3)两个常见小问题:数组越界,空指针异常(注意一下就行了)
(4)数组的应用练习记录:进制转换通用版,用查表法
` public static String trans(int num,int base,int offset)
{
char[] arr = new char[]{'0','1','2','3','4','5',
'6','7','8','9','A',
'B','C','D','E','F'};//查表法
char[] array = new char[8];
int index = array.length-1;
for(int x = 0;x < 8;x++)//进制转换,base是需要转换到几进制就是几
{
int n = num & (base - 1);
array[index] = arr[n];
num = num >>> offset;//移位,转二进制是1,转八进制是3,转十六进制是4
index--;
}
return toStr(array);//自己定义的一个转换数组为字符串的方法,调用了一下
} `
(5)一些算法:
选择排序:遍历数组找到最小(大)的放在首位,然后遍历剩下的,再找到最小(大)的, 放在第二位,直到最后排序完成
`public static String select_So(int arr[]){
//int temp = 0;
for(int x=0;x< arr.length-1;x++){
for(int y = x+1;y < arr.length;y++){
if (arr[x]>arr[y]){
/*temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
*/
swap(arr,x,y);//将交换元素的代码抽取成一个方法
}
}
}
return toStr(arr);
}`
冒泡排序:重复地走访过要排序的元素列,依次比较两个相邻的元素, 如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。 走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
` public static String bubble_So(int arr[]){
for(int x=0;x< arr.length-1;x++){
for(int y = 0;y < arr.length-1-x;y++){
if (arr[y]>arr[y+1]){
swap(arr,x,y);
}
}
}
return toStr(arr); `
二分查找:
` public static int binarysearch (int [ ] arr,int key){
//1,定义三个变量,记录头角标,尾角标,中间角标。
int max, min, mid ;
min =0;
max=arr.length-1;
while (min<=max){
mid =(min+max) >>1;if(key>arr [mid] )min = mid + 1;else if (key<arr [mid])
max = mid - 1;else
return mid;
}
return -1;
}`
往一个有序数组中插入一个元素并继续保证有序,并且获取它的位置(要用二分查找)(有点难)
` import java.util.Arrays
int [ ] arr ={9,13,17,22,31,46,58,77);
int index = binarysearch (arr, 7) ;
int index2 = Arrays . binarysearch (arr,7);
system . out . println ( "index="+index) ;
system . out . println ( "index2="+index2) ;`
7. 学习总结
(1)写代码之前思路要清楚,可以写下来。
(2)注意代码的复用性。
(3)学会写注释