入门必须知道的快速补全快捷键:
END:快速跳到行末
SHIFT+回车:换行
CTRL+ALT+T:快捷使用基本语法例如:for,while...
输入 变量.sout:输出变量
输入 main:快速写出主函数
1.注解
/*
输入前两个回车就可以了
*/
//CTRL+shift+/ 多行注释
/**+回车
*
*/
2.\n换行 \t tab 字符串必须使用双引号
3.变量:数据类型+变量名称 = 初始值
必须声明后使用
变量声明后不能存储其他类型数据
变量的有效范围从定义开始到}截至,在同一个范围内不能定义两个同名的变量
变量定义时可以没有初始值,但是使用的时候必须有初始值
4.计算机最小的组成单位(字节byte简称B) 每个二进制称之为1位 1byte = 8b 1K = 1024 B
常用的ascii A-65 a-97 0-48
5.16进制 0-9 ABCDEF 0B-二进制 0-八进制 0X-16进制
6.数据类型(随便输入的数字是一个int类型的,如果需要成为long类型的话需要在末端加上l/L)
整数:byte -128-127 1个字节
short -32768-32767
int(默认) -2147483648-2147483647(10位数)
long(19位数)
浮点数:float (随便写的小数默认的是double类型的,需要成为float的话需要在末端加上F/f)
字符:char
布尔:Boolean
引用数据类型:String
7.变量名称:首字母小写 驼峰模式
类名称:首字母大写 驼峰模式
8.类型转换:
自动类型转换:类型范围小的变量可以直接赋值给范围大的 例如:将byte类型的变量赋值给int类型的变量
表达式的自动类型转换:表达式的最后结果类型由表达式的最高类型决定的 a=1+1.0 最高的类型是double
在表达式中byte,short,char 是直接转换为int类型参与运算的
强制类型转换:类型大的转化为类型小的 (数据类型) 变量2 = (数据类型) 变量1 byte b = byte a
强制类型转换可能造成数据丢失(溢出)
浮点型强制转换成整形,直接丢掉小数部分,保留整数部分返回
8.运算符:
算术运算符:+ , - ,* ,/ ,%(求余) +在字符串运算的时候用作连接符 +两边能算就算从左到右,不能算就相互拼接
例子:数值拆分:先除到对应的位数 后求余 百位 x/100%10
自增自减运算符:
++和-- 既可以放在变量的后边也可以放在变量的前边
++和-- 只能操作变量,不能操作字面量的
如果是单独使用的话++和--的使用的效果是一样的但是在表达式中就不一样
m=10 n=m++(n=10,m=11) / n=++m(n=11,m=11)
++和--在前面先把需要+1和减一的值先执行再使用(赋值)
++和--在后面先使用再+1/-1
赋值运算符:=,+=,-=,*=,/=,%= a+=b == a=(a的类型)(a+b)
关系运算符:== ,!= ,> , >= , < , <= 返回true或者frase
逻辑运算符:
& 逻辑与 必须都是true 结果才是true 有一个false结果就是false
| 逻辑或 只有一个为true 结果就为true
!逻辑非 相反的意思,真的变成假的 ,假的变成真的
^ 逻辑异或 如果两个条件都是false或者都是true结果就是false , 两个条件不同的时候结果是true
短路逻辑运算符:
&&:短路与 判断和&一样 左边为false的时候右边不会执行
||:短路或 判断结果和|一样,左边为true的时候右边不执行
三元表达式: 条件表达式?值1:值2;首先计算关系表达式,如果为true返回值1,如果为false返回值2 (判断两个结果,并且输出两个结果对应的不同提示或者其他)
优先级:
键盘录入:
//获取一个输入对象
Scanner sc =new Scanner(System.in);
9.程序流程控制:
if分支:(在值匹配的时候建议使用)
分支结构:if(条件表达式1){
语句;
}else{
语句;
}else if(条件表达式2){
语句;
}
switch分支:表达式类型只能是byte,short,int,char String 不能是double,float,long
case给出的值不允许重复,不能为变量
不能忘记写break,否则会出现穿透现象(一直往下走,走到break语句再跳出)
穿透例子:月份天数,重复的就由其穿透,在最后写上一个break
switch(表达式){
case 值1:
执行代码;
break;
case 值2:{
执行代码;
break;
}
default:
执行代码;
}
知道循环几次的时候使用for,不知道循环几次建议使用while循环
for循环:从初始化的数值开始算循环的的次数
for(初始化语句;循环条件;迭代语句){
循环体语句;(重复执行的语句)
}
while循环:
while(循环条件){
循环体语句;(重复语句)
迭代语句;
}
do while循环:一定会先执行一次循环体
初始化语句;
do{
循环体语句;
迭代语句;
}while(循环条件);
for和while的区别:
for循环和while的执行流程是一摸一样的
如果是知道了循环的次数的时候建议使用for,如果是不清楚循环的次数的时候建议使用while
for循环中,循环的变量只在循环中使用。while循环中,控制循环的变量在循环后还可以继续使用
死循环:
for(;;){
循环语句;
}
while(ture){
循环语句;
}
do{
循环语句;
}while(ture);
嵌套循环:外部循环一次,内部全部执行完一次
break:跳出本次的循环 当一个条件满足时候就跳出循环
continue:用于跳出本次循环的执行,进入到下一次的循环中 当其中有一次循环意义不大的时候跳过这次的循环
随机数:Random类
10.数组:引用类型,数组变量名中存储的是地址
用来存储一批同种类型数据的内存区域(可以理解为容器) 怎么定义数组 --> 怎么操作数组元素 --> 怎么解决实际问题 -->数组内存原理 -->数组使用的注意点
静态数组: (1) 数据类型[] 数组名 = new 数据类型[] {}
(2) 数据类型 [] 数组名 = {} 数据类型 数组名[] = {} String[] names = {}
数组访问:数组名称[索引] 数组长度属性:数组名.length 数组的最大索引:length-1
注意:
什么类型的数组存放什么数据不然的话报错
数组一旦定义出来,程序执行的过程中,长度,类型就固定了
动态数组:
数组类型[] 数组名 = new 数据类型[长度];
基本的类型初始化值:
int 一类的 0
double一类 0.0
Boolean flase
引用类型:类,接口,数组,String,null
数组的遍历:
循环条件为数组的长度,从0开始,通过索引值的变化来进行便利整个数组 快捷方式:数组名.fori+回车
求最大值:定义静态的数组,定于一个参照max,比较进行不断更新max
猜数字游戏:(5个1-20的随机数,没有猜中继续,猜中了输出第一次出现的位置,并输出所有的5个数)
注意:注意括号里面的内容,不要将内容写错在其他的循环体内
随机排名:
随机的两个位置的值交换的时候需要加入一个临时变量,例如三杯水的交换原理
冒泡排序:(找出每轮的最大值,放到最后的位置)
首先找出总共需要排多少轮 0~data.length 但是这里要写上 1~data.length-1 因为下面有边界值问题
每轮比较几次 data.length-i 次
然后进行水杯换水 冒泡操作 交换两个位置的值,一直排序上去
java内存分配:
方法区:编译文件的位置
栈内存:main方法运行时所进入的内存,变量也是在这里
堆内存:new出来的对象在这块内存开辟空间并产生地址
两个变量指向同一个数组对象
传的是地址
常见的数组报错:
数组的长度不符,长度超出数组长度
数组为null,取值
Debug的使用
11.方法是一种语法结构(函数)
定义:修饰符 返回值类型 方法名 (形参列表){
方法体代码;
return 返回值;}
调用:方法名(...);
无返回值类型:void 不使用return
注意点:
方法的修饰符暂时都使用public static
方法申明了具体的返回值类型,内部必须使用return返回对应类型的数据
形参可以有多个,甚至可以没有;如果有多个形参的话必须使用,隔开
常见问题:
方法的编写循序无所谓
方法间是平级的关系,不能嵌套使用
方法的返回值类型是void,方法内部不能使用return,定义的返回值类型和return需要一致
return下面是无效代码
方法不调用就不执行,调用时需要严格匹配方法的参数情况
有返回值的方法调用时可以定义变量接受结果或者直接输出,甚至直接调用,无返回值方法的调用只能直接调用一下
方法没有被调用的时候放在方法区,调用的时候在栈内存里面开辟空间
方法的参数传递机制:
基本类型的参数传递:
实参:如在方法的内部定义的
形参:如在定义方法的时候()所生命的参数
实参和形参传递的时候并不是传递实参本身而是传递实参中存储的值,这个就是值传递
引用类型的参数传递:
传递的是类型的地址传递去堆内存里面取值和修改值
方法的重载:(用一个类型功能)
同一个类中,出现多个方法的名称相同,但是形参的列表是不同的,那么这些方法就是重载方法(形参的顺序,个数,类型不同)
return:立即跳出并结束当前方法的执行,return可以放到任何方法里面使用
案例练习:
遇到值匹配的时候使用switch分支实现
遇到判断区间的时候使用if分支结构实现
当一个循环里的判断条件不成立的次数很多无法判断时,使用信号量,在条件成成立的将这个信号量改变其值,最后判断得出最后的结果
信号位思想:先假定一个结果,最后进行判断这个信号位,如果在整个过程都没有其他的情况时,信号位不变
实现数组元素的反转,定义了两个变量,分别一个在头部,一个在尾部,同时进行收缩,然后进行换值操作
冒泡排序:遍历数组,判断相邻的两个值的大小,使大的值交换到右边(不断比较相邻的两个)
选择排序:遍历数组,每一轮选择出最大值的索引值,最后再放到一轮的最后位置(更新索引值)
插入排序:遍历数组,默认第一个为排序好的位置,将后面的值不断的交换到前面相应的位置(优化:通过暂存待插入值,当插入值<数组值时,将前面的值赋值给后面的值,挪位操作)
二分查找:通过判断条件(end<begin)来进行比较mid值和查找值的大小,从而更换判断的区间,当在<mid时end = mid ,当>mid时begin = mid+1