目录
快捷键
主函数:jsvm
public static void main(String[] args){}
输入语句:sout
System.out.println();
遍历数组:itar
for (int i = 0 ; i < arr.length ; i++){
}
抽取方法(idea):ctrl+alt+m
快速打印值(idea):.sout
用变量接收值(idea):.var
注释
单行注释://
多行注释:/* */
文档注释:/** */,用于修饰类和方法(实际开发用)
关键字
关键字:被Java语言赋予了特殊含义的单词,如public、class、static、void、protected、private
保留字:有关键字的作用,在以后版本可能会成为关键字
标识符
用于类、接口、变量、常量的起名
命名规则
1.必须由英文字母开头,数字,_ ,$组成
2.不能以Java关键字命名
命名规范
类、接口
大驼峰命名法:每个单词的首字母都大写,其他全部小写,例如:StudentId
变量、方法
小驼峰命名法:从第二个单词开始,每个单词的首字母都大写,其他小写,例如zhangAge
常量
所有字母全部大写,单词间用' _ '隔开,例如:MAX_VALUE
包名
所有的字母全部小写,一般是公司的域名反写(不要www),多级包之间用' . '隔开
例如com.it.demo
常量
字面值常量
①字符:'',字符有且只能又一个
System.out.println('你');
②字符串:"",
System.out.println(''Hello,World!'');
③整数
④小数
⑤布尔
System.out.println(true);
⑥空
空常量不能直接打印
String s = null;
System.out.println(s);
自定义常量
通过final修饰

变量
程序执行过程中,其值能在一定范围内(数据类型)发生改变的量,使用变量前必须先赋初值
{
int age = 18;
System.out.println("age : " + age); //字符串拼接
} //大括号执行完毕,括号中的内容就释放,提高效率,节约资源
数据类型(Type)
限定变量值的变化
基本类型
整型:byte(1字节),short(2字节),int(4字节),long(8字节)
//默认整型是int
byte a1 = 10; //语法糖:语法的简化
long l = 10L; //L后缀是为了区分
浮点型:float(4字节)、double(8字节)
默认浮点型是double
float f = 10.1F;
double d = 10.2;
字符型:char(2字节)
char ch1 = '男';
布尔型:boolean(1字节)
boolean flag1= false;
boolean flag1= true;
引用类型
除了上述之外所有,例如:类,接口,数组
数据类型转换
隐式类型转换/自动类型转换:把小范围的值给大范围的数据类型
//byte -> short,char -> int ->long -> float -> double
int a = 10;
double d = a;
显示类型转换/强制类型转化:把大范围的值给小范围的数据类型,可能会丢失精度
//数据类型 变量名 = (目标数据类型)变量值
int c =(int) 10.2;
ASCII表
描述字符(char)和int之间的关系
计算机存储数据:'男' -> 数字(十进制)-> 数字(二进制)-> 存储
计算机读取数据:读取二进制数据 -> 十进制 ->对应的内容
'a':97
'A':65
'0':48
打印字母ASCII码:System.out.println('a' + 0);
其他码表:GBK(国内),UTF-8(万国码,统一码)
运算符
用于操作变量和常量
算数运算符:+ , - , * , / , % , ++ , --
赋值运算符:= , += , -= , *= , /=
关系运算符: > , <
逻辑运算符:&& , || , !
三元运算符:条件表达式 ? 表达式1 : 表达式2
表达式
用运算符连接起来的式子
算数表达式:a + b
条件表达式:a > b
Scanner
类似于Python中的input{},用来键盘录入
使用步骤:
1.导包 import java.util.Scanner;
2.创建对象 Scanner sc = new Scanner(System.in);
3.调用方法 int num = sc.nextInt();
流程控制语句
顺序结构
System.out.println("start");
System.out.println(5 + 5 + "hello" + 5 + 5);
System.out.println("end");
//第二条语句输出:10hello10
分支结构
if单分支:用于范围校验
if(关系表达式1){
语句体1;
}else{
语句体2
}
if多分支:用于范围校验
if(关系表达式1){
语句体1;
}elseif(关系表达式2){
语句体2;
}elseif(关系表达式3){
语句体3;
}... ...
else{
语句体n
}
switch:用于固定值校验
switch(值){
case 值1;
语句体1;
break;
case 值1;
语句体1;
break;
... ...
default:
语句体n;
break;
}
循环结构
for:用于循环次数已知
for(初始化条件;判断条件;控制条件){
循环体;
}
while:用于循环次数不固定
初始化条件;
while( 判断条件 ){
循环体;
控制条件;
}
死循环
while(true){}
控制跳转
break:终止循环,循环不再进行
continue:跳出本次循环,进行下一次循环
Math#random()
用来取一个随机数,范围是:0.0 ~ 1.0,左闭又开,是静态方法,被类名点的方式直接调用
double num = Math.random();
System.out.println(num);
数组
概述:用来同时存储多个同类型元素的容器
初始化
动态初始化:指定长度,由系统给出默认值
格式1:数据类型[] 数组名 = new 数据类型[长度]
格式2:数据类型 数组名 = new 数据类型 [长度]
int [] arr =new int[3];
int arr[] = new int[3];
//new表示向堆内存申请开辟空间
静态初始化:给出初始化值,由系统给出长度
格式1:数据类型[] 数组名 =new 数据类型[] {值1,值2,值3...}
格式2:数据类型[] 数组名 ={值1,值2,值3...}
int [] arr =new int[] {12,13,14};
int [] arr ={12,13,14}; //语法糖
特点
1.数组中每个元素都有编号(索引,下标,脚标),默认从0开始
2.数组中每个元素都有默认值,int->0,double->0.0,boolean->false,String->null
常用格式
数组名[索引],根据索引获取值
数组名[索引] = 值,根据索引修改该位置的值
数组名.length,获取数组长度
数组名.length - 1,获取数组的最大索引
内存图(简图)

两个小问题
1.空指针异常,NullPointerException
产生原因:数组为null,还去访问数组中的元素(null表示没地址指向了)
解决方案:给数组赋值
2.索引越界异常,ArrayIndexOutOfBoundsException
产生原因:访问量数组中不存在的索引
解决方案:访问数组中存在的即可
常见案例
数组遍历
//快捷键 itar
for (int i = 0 ; i < arr.length ; i++){
}
获取数组最大值
int max = arr[0];
for(int i =1 ; i < arr.length ; i++ ){
if (arr[i] > max){
max = arr[i];
}
}
方法
将具有独立功能的代码块组织成一个整体,使其成为具有特殊功能的代码集,Java中函数也叫方法,Python中函数比方法级别高
格式:
修饰符 返回值的数据类型 方法名(数据类型 参数名1,数据类型 参数名2){
方法体;
return 具体的返回值;
}
//写方法时最好去做非法值判断
public class Demo{
public static void main(String args[]){ //main方法,程序的主入口
getsum(10,20); //调用方法,传参
}
/**
*1.定义方法,用来计算两个整数的和
*2.a和b,要求和的整数
*3.sum,a和b之和
*/
public static int getsum(int a , int b){
int sum = a + b;
return sum;
}
}
方法重载
同一个类中,出现的方法名相同,但是参数列表不同(个数不同或对应的数据类型不同)的两个或者以上的方法时,称为方法重载,方法重载与返回值的数据类型无关
应用场景:用来解决功能相似或相同,但是方法名不能相同的问题

参数传递中的问题
1.形参如果是基本类型,则形参的改变对实参没有影响,传递的是数值,叫值传递
2.形参如果是引用类型,则形参的改变对实参有直接影响,传递的是地址值,叫引用传递
3.String虽然是引用类型,但是作为形参时,用法与基本类型一致

