1.CMD
windows不区分大小写
符号必须是英文
打开CMD | WIN+R:CMD回车 |
---|---|
切换到E盘 | E:回车 |
查看当前路径下内容 | dir |
进入目录 | cd 目录 |
上一级目录 | .. |
清屏 | cls |
回到盘符根目录 | cd \ |
qq.exe | 设置环境变量path添加qq路径 |
jdk(java development kit)java开发工具包
bin路径下存放工具命令 javac和java
conf存放配置文件、include平台特定头文件、jmods模块、legal授权文档、lib工具补充JAR包
配置path环境变量
- 第一个HelloWorld程序
notepad++写代码
首选项设置中编码为ANSI,默认语言JAVA
javac -encoding gbk project.java
java project
public class HelloWord {
public static void main(String[] args) {
System.out.println("HelloWorld");
}
}
在cmd编译运行:
javac HelloWorld.java
java HelloWorld
2. 基础语法
2.1 注释
/**
*文档注释
*/
public class HelloWord {
//main方法,表示程序主入口
public static void main(String[] args) {
/*输出语句
会输出小括号内容*/
System.out.println("HelloWorld");
}
}
2.1 关键字
字母全部小写,class创建一个类,类是java最基本的组成单元
2.2 字面量
字面量 | 说明 | 举例 |
---|---|---|
整数 | 666,-88 | |
小数 | 13.14,-5.21 | |
字符串 | 双引号括起来,内容不限 | "helloworld" |
字符 | 单引号括起来,内容只有一个 | 'A','0' |
布尔 | 表示真假 | 只有true和false |
空 | 特殊值 | null,只能以字符串形式打印 |
\t | 制表符 | 打印时把前面字符串补齐到8的整数倍,最少一个最多八个 |
2.3 变量
数据类型 变量名=数据值;
变量在使用前必须赋值,一条语句可定义多个变量
//整数
int a=10;
a=20; //修改a值
a=a+1;
浮点数double
计算机的存储规则: | 说明 |
---|---|
text文本 | 二进制以0b开头,八进制以0开头,十六进制以0x开头 |
image图片 | 黑白图、灰度图、彩色图,三原色红绿蓝 |
sound声音 |
基本数据类型 | 关键字,取值范围 | 占用内存,数据值存储在自己的空间中 |
---|---|---|
整数 | byte(-128~127),short(-32768~32767),int(-2^10 ~2^10-1),long(19位数) | 1,2,4,8字节,long类型需要加L作为后缀 |
浮点数 | float(-3.4e-38~3.4e+38),double(-4.9e-324~1.79e+308) | 4,8,float类型F作为后缀 |
字符 | char(0-65535) | 2 |
布尔 | boolean true,false | 1 |
2.4 标识符
就是给类,方法,变量起的名字,
由数字字母下划线和美元符组成 | 不能以数字开头,不能是关键字,区分大小写 |
---|---|
小驼峰命名:方法、变量 | 一个单词时小写name,多个单词firstName |
大驼峰命名:类名 | 一个单词首字母大写Student,多个GoodStudent |
2.5 键盘录入 Scanner类
导包--创建对象--接收数据
import java.util.Scanner; //导包,必须在类上面
Scanner sc = new Scanner(System.in); //创建对象,只有sc可变
int i = sc.nextInt(); //只有i是变量名
2.6 IDEA使用
2023安装包
psvm快速生成头部,sout输出,右键运行
project项目-module模块-package包-class类
3.1 运算符
运算符 | 符号 | 说明 | 应用 |
---|---|---|---|
算数运算符 | +加 -减 *乘 /除 %取余 | 整数只能得到整数,小数参与计算可能不精确 | 取余可以用来判断A能否被B整除、是否为偶数 |
隐式转换 | 把范围小的转成大的 | byte,short,char都会先提升为int再进行计算 | |
强制转换 | 把范围大的赋值给小的 | double a=12.3; int b=int(a); | |
当+字符串时为字符串连接符,多个+按顺序执行 | 当数字+字符时会先通过ASC-II表查找对应数字并转换成int | ||
自增运算符 | ++变量值加1,--减1 前后都可 | a++先用后加,++a先加后用 | |
赋值运算符 | =、a+=b(a=a+b)、-=、*=、/=、%= | 强制类型转换 | |
关系运算符 | ==、!=、>、>=、<、<= | 成立为true,不成立为false | |
逻辑运算符 | &与 |或 ^异或 !非 | x>5 & x<15 | |
短路逻辑运算符 | &&短路与、|| 短路或 | 左边表达式能确定结果则右边不执行 | |
三元运算符 | 关系表达式?表达式1:表达式2; | 结果必须要被使用 | |
其他运算符 | &逻辑与、|逻辑或、<<左移低位补0、>>右移高位补0或1、>>>无符号右移高位补0 | ||
运算符优先级 | ()最高、 |
3.2 计算机中补码
码类 | 说明 |
---|---|
原码 | 十进制数的二进制表现形式,最左边为符号位 |
反码 | 正数不变,负数符号位不变其他取反 |
补码 | 正数不变,负数为反码+1 |
3.3 流程控制语句
语句结构 | 说明 | 备注 |
---|---|---|
顺序结构 | 按代码顺序从上到下 | |
分支结构 | if语句,其中关系表达式值为true就执行语句体, if(关系表达式) | 只有一句可以省略大括号,判断布尔类型不要用==直接写变量 |
循环结构 | for(初始化;条件判断;条件控制) | 初始化只执行一次 |
只知道循环条件 | while(条件判断\) | while循环结束后变量能继续使用 |
if……else if……else
switch(表达式){case 值1,值2:语句体1;break;default:语句体n+1;break;}
switch(表达式){case 值1,值2 -> 语句体1;default -> 语句体n+1;}
初始化;do{循环体;条件控制;}while(条件判断),先执行一次后判断。
while可在循环前自定义名称,可break名称;跳出while循环。
3.4
跳转控制语句,for嵌套if,continue结束本次循环继续下次循环,break结束循环,简写100.fori
import java.util.Random; //获取随机数Random
Random r = new Random (9) + 7; //范围7-15
int number = r.nextInt(随机数的范围);
4. 数组
数组 | 存储同种类型数据的多个值 | 说明 |
---|---|---|
数组定义 | int[ ] array或者int array[ ] | |
初始化 | int[ ] array={1,2,3}; | |
直接打印会输出地址值 | 如[D:776ec8df | 其中[表示数组,D表示数据类型,后面是十六进制地址值。 |
访问元素 | int number = arr[0] | |
存储到数组 | arr[0] = 100 | |
遍历数组 | arr.fori | |
动态初始化 | int[ ] arr = new int[3],3为数组长度,默认初始化0 | 只知道元素个数不知道具体值 |
静态初始化 | int[ ] arr = {11,22,33}; | print不换行 |
内存分配 | 说明 | 备注 |
---|---|---|
栈 | 方法运行时使用的内存,如main方法 | 开始执行进栈,结束出栈 |
堆 | 存储对象或数组,new创建的 | 地址值 |
方法区 | 存储class文件 | |
本地方法栈 | JVM使用操作系统时使用 | |
寄存器 | 给CPU使用 |
方法 method | 是程序中最小的执行单元把一些代码打包在一起,需要就调用 | 调用方法 |
---|---|---|
普通 | public static void main(){} | main(); |
带参数 | public static void main(int num,int num2){} | main (num1,num2); |
带返回值 | 把void改成返回值类型,在方法体中加return 返回值; | 直接调用,赋值调用,输出调用,返回调用处 |
重载关系 | 同一个类中定义多个同名的方法 | 形参不同 |
执行到return表示整个方法全部结束
方法被调用就会进栈执行
引用数据类型,自己空间存储地址值,数据在其他空间,传递的地址值
二维数组 静态初始化 int[][] arr = new int[][]{{}{}};
动态初始化 int[][] arr = new int[m][n];
5. 面向对象
面向对象 | 说明 | 备注 |
---|---|---|
类和对象 | 必须先设计类(共同特征的描述,设计图),才能获得对象(真实存在的具体实例) | |
封装 | 正确设计对象的属性和方法 | 对象代表什么就封装对应的数据并提供相应行为 |
private权限修饰符 | 只能在本类中访问 | set,get,public int getage() |
成员变量和局部变量 | 方法中是局部变量,类中方法外是成员变量,就近原则 | this.name局部变量 |
构造方法 | 方法名与类名相同,没有返回值类型,没有void,没有return | 如果没有定义构造方法系统会给一个默认的无参构造方法 |
标准javabean类 | 成员变量使用private修饰,至少提供无参构造和全部参数构造 | 成员方法提供对应的serxxx和getxxx,若有其他行为也要写上,alt+insert,安装ptg插件 |
内存分配,方法区,一个对象的内存图 | 加载class文件,申明局部变量,在堆开辟空间,默认初始化,显示初始化,构造方法初始化,将堆内存中的地址值赋值给左边的局部变量 | |
this | 本质代表方法调用者的地址值 | |
printf | 第一部分要输出的内容%s,第二部分填充的数据,没有换行效果 |
6. API&字符串
Application Programming Interface 应用程序编程接口(别人写好的,直接使用)
Scanner键盘录入,Random随机数
- | - | - |
---|---|---|
String字符串 | 内容不会改变,它的对象在创建后不能被更改。 | 创建string对象 |
遍历字符串 | str.charAt(i) | |
截取字符串 | str.substring(0,2) | 包头不包尾,一个参数表示大于的索引 |
替换 | replace(旧值,新值) | |
StingBulider() | 容器,内容可变 append添加,reverse反转,length长度,tostring转为string | |
StringJoiner() | 容器,内容可变,指定间隔,开始结束符号 | 一个参数为间隔符号,add添加元素 |
底层原理 | 没有变量参与编译后就是拼接结果会复用串池中字符串,有变量参与每次都会在内存中创建新的字符串浪费内存 | stringBuilder所有拼接内容都放在里面不会创建新的节约内存 |
StringBuilder底层原理 | 创建默认数组容量16,不够则扩容16*2+2,超过34以实际为准 | |
str.toCharArray(); | 先转成字符数组,再通过new String变回字符串 |
new是创建新的地址值
== 基本数据比较的是数据值,引用数据是地址值
boolean equals完全一样才是true,equalsIgnoreCase忽略大小写
链式编程:调用方法时不需要用变量接收他的结果,可以继续调用其他方法。
7. ArrayList
集合 | 说明 | 备注 |
---|---|---|
ArrayList<String> | 自动扩容 | boolean add增 remove删 set改 get查 |
基本数据类型对应的包装类 | char,int | Character,Integer,其他的首字母大写 |
封装思想:可以把多个数据封装成一个对象
8. 面向对象进阶
面向对象 | 1 | 2 |
---|---|---|
static | 静态变量,被该类所有对象共享,类名调用或者对象调用 | 静态方法多用在测试类和工具类中 |
2 | 静态方法只能访问静态变量和静态方法且没有this关键字,非静态都可以访问 | 静态变量,方法不能调用非静态方法 |
javabean类 | 用来描述一类事物的类,如student | |
测试类 | 检查其他类是否书写正确,带有main方法,是程序的入口 | |
工具类 | 帮我们做一些事情但不描述任何事物的类。 | 类名见名知意,私有化构造方法 |
继承 | 子类extends父类,支持单继承,多层继承 | 每个类都继承于Object,不能继承构造方法,能继承成员变量,只能继承非私有成员方法 |
就近访问成员变量 | super调用父类变量 | |
就近访问成员方法 | @Override重写父类方法,重写的名称形参必须一致 | 子类访问权限必须大于等于父类,返回值类型小于等于父类,public>protected |
子类默认先访问父类的无参构造,再执行自己 | ||
多态,同类型的对象表现出的不同形态 | 有继承关系,有父类引用指向子类对象,有方法重写 | 成员变量编译运行看左边,成员方法编译看左边运行看右边 |
多态不能调用子类的特别功能,instanceof判断类型 | ||
包,管理不同功能的java类,方便后期维护 | 公司域名反写+包的作用为包名,全部小写见名知意 | 同一个包中类或者java.lang中不需要导包,其他都需要,若同时使用两个包中的同名类需要用全类名 |
final最终的,不能被修改 | 方法不能被重写,类不能被继承,变量为常量 | final记录的地址值不能改变,内部属性可变 |
常量 | 单词全部大写,单词之间下划线隔开 | |
权限修饰符,控制成员被访问范围 | private<不写<protected<public | |
代码块 | 局部只在大括号内有效、构造代码块写在成员位置,抽取构造方法中重复代码,优于方法执行 | 静态代码块数据初始化static{},随着类加载,只执行一次 |
抽象类abstract | 抽象类不能创建对象,可以有构造方法,子类要么重写所有抽象方法要么抽象类 | |
接口interface | 通过implements关键字实现,可以多实现 | 可以继承一个类同时实现多个接口 |
接口中成员变量只能是常量,默认public static final修饰 | 没有构造方法 | |
接口和接口关系 | JDK8以后可以定义有方法体的方法 | |
default默认方法 | 不是抽象方法不需要重写,若重写去掉default,可省略public | |
接口中的静态方法static | JDK9可以定义私有方法包括普通的和静态的 | |
中间类XXXAdapter,设置为抽象类 | 适配器设计模式 | |
内部类,类的五大成员之一(属性,方法,构造方法,代码块,内部类) | 内部类可以直接访问外部类成员包括私有,外部类要访问内部类必须创建对象 | 分为成员内部类,静态内部类,局部内部类,匿名内部类 |
成员内部类 | 写在成员位置 | 当成员内部被private修饰时,在外部类编写方法返回内部类对象,非私有直接创建对象,outer.this.变量 |
静态内部类,static修饰 | 只能访问外部类的静态变量和方法(直接.),非静态需要创建对象 | |
匿名内部类 | 隐藏名字的内部类,new Inter(){重写方法}; |
快捷键
System.exit(0);停止虚拟机
快捷键 | 说明 |
---|---|
shift+F6 | 快速修改方法内同名词 |
ctrl+alt+L | 格式化代码 |
ctrl+p | 显示参数 |
ctrl+d | 复制粘贴到下一行 |
ctrl+alt+t | 语句包裹 |
alt+enter | 通过名字 快速创建方法 |
内存分析工具 | jps、jhsdb hsdb |