java基础语法复习
jdk安装: Oracle官网下载直接安装
环境配置: 电脑–>属性–>高级系统设置–>环境变量–>系统变量
添加 1变量名:JAVA_HOME
变量值:jdk安装路径
2变量名:CLASSPATH
变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
3修改系统变量PATH:添加%JAVA_HOME%\bin和%JAVA_HOME%\jre\bin
第一个Java程序:
/**
*
* --> javaDoc注释 :通常用来功能性注释,一般用于注释类和方法
*@author孙勇
*@date2020-03-26
*@description我的第一个Java小程序
*/
public class HelloWorld{
public static void main(String[] args) {
/*
public是修饰符(无权限,公众),class类,HelloWorld类名(首字母必须大写)
main()方法入口执行语句
System.out.print();输出语句 -->println()是换行输出
\是转义符
\n换行 \t制表符:即tab
打开cmd 输入 cd 路径 路径盘符:
javac 类名.java (执行编译)
java 类名
就可以运行第一个小程序
中间为注释内容
-->多行注释
*/
//控制台输出print不换行,println换行,一行代码以分号结尾 -->单行注释
System.out.print("Hello,Java,\nthis is my first lesson!");
System.out.println("换\t行前");
System.out.print("换行后");
}
}
IDEA安装
下载完安装按电脑属性走
IDEA激活: 1–> 将jar包复制到安装路径的bin目录下
2–> 打开idea64.exe.vmoptions
3–> 最后一行回车后插入 -javaagent:安装路径\JetbrainsCrack-release-enc.jar
4–> 将sn文件全部复制到第二个激活码区中 关闭重新打开即可运行IDEA
在工具中编写程序:新建一个类,其余同记事本一样写完可run即可运行
反编译
class文件为字节码文件正常用记事本打开有乱码
java文件是源文件
反编译工具
IDEA会自动反编译class文件
帮助文档
必备技能:遇到不会的需要自己查询
变量与数据类型
一.变量:一个数据存储空间的表示
不同数据存入不同内存地址空间相互独立(银行存钱)
如何找到存入的数据? 需要一个变量指定名字(银行卡账户)
–>例子:住宿
宾馆hotel 前台front 根据需要分配房间 -->指出类型问题 双人 单人 总统套房等 (不同类型内存消耗不同,适合类型能降低内存空间
栈空间:先进后出,入栈出栈
假若一个人叫张三来住酒店,开三人间,房间号(内存地址)为0x00301,
另一个人也叫张三来住酒店,开单人人间,房间号(内存地址)为0x00101,
李四想找张三,是不知道哪个张三的,此时必须要房间号确定找哪个张三
内存地址不好记,给取名字
房间 变量
房间名字 变量名
房间类型 变量类型
客人 变量值
变量命名规则:
字(a-z A-Z) 下(_) 美($) 人(¥) 数((0-9) 填充
骆驼:驼峰命名法开始小写之后单词第一个字母大写
有意义:取名要取相关的可为汉语拼音和英文单词
变量命名以字下美人开头,不能以大写字母开头,以字下美人数来填充后部分
不可使用关键字public class
二:常用数据类型
分类1: 数值型 :
整型Integer
1)byte:1字节8位 范围2^8 (-128~127) 缓存区
2)short:2字节16位 范围2^16 (-32768~+32767)
3)int:4字节32位 范围2^32 (-2147483648~+2147483647) 默认
4)long:8字节64位 范围264(-263~+2^63-1)
非整型
1)float:4字节32位 范围~~
2)double:8字节64位 范围~~ 默认
不同类型数值运算需要类型转换在变量名前面加(类型)
1)自动类型转换 小类型向大类型转换,隐式转换 规则:俩种类型要兼容,目标类型大于源类型
2)强制类型转换 数值-->大类型向小类型转换 可能溢出,精度损失
内容-->
非数值型
1)Character字符型 ASCII码:char0-->48 char65-->A char97-->a 符号等用到再查
2)String字符串
3)boolean:true false
-->例子:
char c= '9'; //不可为空单字符单引号包起来
boolean flag = false;
String str = "孙勇"; //可为空 双引号包起来
byte b = 127;
b = (byte)(b+1); //越界从头开始计算 强制类型转换的一种
short s = 32767;
long lnum = 10000000000L; //超过int需要加L
int i = 1000000000;
float f =1.0f; //float后面必须加f
double d =1.0;
sout IDEA输出快捷键
psvm 快捷键主方法入口
""双引号中的内容纯输出内容
Java执行顺序是从上往下一条一条执行
常量
1)常量名通常大写
2)不同字符使用下划线分割
3)只能被复制一次1通常定义时对其初始化
例子–>
final int NUM = 10;
fianl double PI = 3.14;
int r =2;
double area = PIrr
运算符
赋值运算符 = 作用:将等于号右边的东西赋给左边的变量
实现数据的交换 //三变量交换法
int num1 = 8;
int num2 = 9;
int temp = num1; //定义一个新变量存第一个变量值的副本
num1 = num2; //将第二个变量值赋给第一个变量
num2 = temp; //将新变量值赋给第二个变量
Scanner使用 作用:让用户输入变量值
步骤: 1)导包 import java.util.*; util包中的全部导入或者import java.Scanner; 格式--> import java.包名.类名;
2)提供输入入口 Scanner input = new Scanner(System.in); IDEA快捷键alter +enter 键可直接导入Scanner;
3)输出提示语句 System.out.print("提示语句");
4)控制台输入值 int num = input.nextInt();
算术运算符
+加法 -减法 *乘法 /取商 %取余
++自增 -- 自减
++a 表示加之前的值 作用都是使a加1 不常用经常出现在面试题中
a++ 表示加之后的值 作用都是使a加1
复合运算符(缩写)
+= -= *= /= %=
a+=b; 相当于a = a+b; 其他类似
条件运算符
等于 == 结果为布尔值 true false
不等于 !=
大于
小于
大于等于
小于等于
String类型(其他所有引用类型): equals()
逻辑运算符
1) 逻辑:运算符两侧的值都进行判断
2) 短路:运算符左侧值如果已经可以判断整个表达式值,就不会判断右侧值
与:逻辑与& 短路与&& 两者都为true 否则为false
或:逻辑或| 短路或|| 两者都为false 否则为true
非 :! 原结果为true,结果就是false
快速注释: 选中ctrl+/
三元表达式: 条件 ? 表达式1 : 表达式2;
注意要用表达式的相关类来接收值
运算符的优先级:
PS断点调试:
1)设置断点
2)debug 调式运行程序
3)单步运行调试
选择结构
if结构
if(条件){
代码块1
}else if(条件2){
代码块2 -->可能有多个
}else{
代码块3
}
switch结构 使用场景:等值
switch(表达式){
case 常量1:
break;
... -->表达式或所写变量或表达式值应该是:byte short int char String 枚举类型,不应该有double float
case 常量n:
break;
default:
break;
}
错题记录:
1.注意变量的定义范围:是否为全局变量或者局部变量
2.String str = "hello"+100;
str = "hello100"; --> 加号为String字符串最常用的连接符号,还有一种concat方法
字符串创建对象问题:
字符串池首先会判断是否有相同字符,然后再去创建新的字符串,new的东西都在堆里面,一定是新对象
3.== 与equals()没有区别,都是内存地址;但是String的equals()方法重写成与字符串的内容相关
char类型默认在127以内相当于byte,127以外相当于int的0-65535
循环
while循环
int i =0; //变量定义
while(<=10){ //设置循环条件
代码块
i++; //变量改变
}
do while循环
int i = 0; //变量定义
do{
代码块
i++; //变量改变
}while(i<=10); //循环条件
for循环 -->循环次数固定时候适用
for(int i =0;i<=10;i++){ //变量定义,循环条件,变量改变
代码块
}
双重循环与程序调试
fori -->IDEA for标准语句的快捷键
双重循环:
for(int i=1; i<=9;i++){ //外层循环
for(int j =1;j<=i;j++){//内层循环
} //外层循环执行一次,内层循环遍历
}
break语句 :跳出当前循环或者switch
–>代表终结必须在一定的条件基础下,同结构体中break下方一般没有代码否则报错
continue语句:跳过当前循环剩余语句继续执行下一次循环
return语句: 跳出方法,返回一个类型值;
如果用在for循环内,不论几层都会直接跳出循环所在的方法;
程序调试:
设置断点:
单步运行
观察变量
一维数组:
数组基本要素:
标识符(数组名) 数组元素(值) 元素下标(从0开始) 元素类型
元素类型必须相同 Object是所有类的父类
数组定义:
1)数组声明 int[] a;
2)分配空间 a=new int[5]; new-->Java中优先级最高,分配空间
声明和分配空间一起:int[] a = new int[5]; 和 int a[] = new int[5];一样
声明分配空间和赋值一起:int a[] = {1,2,3,4,5}; 必须赋值在一起否则编译报错
int a[] = new int[] {1,2,3,4,5}; 不用new也不用指定长度,很少用
3)数组赋值
若未赋值,会自动初始化,默认值 int -->0 String -->null,也是所有引用类型的基本值 double -->0.0 char -->-\u0000会显示为一个问号在括号中,是空字符
正常赋值 a[0]=1;...a[a.length-1]=3; 下标从0开始,到数组长度-1结束
数组越界:只要不在0~(数组长度-1)范围内赋值或者使用都会产生数组越界异常(运行期异常)-->因为空间暂时不存在,只有运行时候才会分配空间发现错误
4)数组使用:增删改查
a)增加元素过程:从后向前,应该在当前值之后的值进行后移,遇到应该在当前值之前的值,在该值之后放插入
数组名.fori -->遍历数组快捷键:
for(int i=0;i<数组名.length-1;i++){ }
Arrays.toString(数组名);-->快速打印数组
冒泡排序:
双重循环,内层循环(N-i-1)一轮,确定一个最值,外层循环(N-1)不断控制重复内层循环
求最值:定义一个变量temp,与数组元素逐一比较,不满足重新赋值为数组元素,循环一轮就可得到最值
选择排序–>保存下标
- 从头向后以当前下标的元素为基础
- 找到元素最小值进行交换
- 如果当前下标的元素已经是最小值则不交换
插入排序 - 外层从第二个值开始从前向后,把当前值当作基准值
- 内层从当前值开始从后向前,依次比较,比当前值大的后移,比当前值小的在后方插入
- 若一直没有插入在首位插入–>插旗判断内层循环有插入?有酒结束循环,一直没有首位插入
Arrays类方法–>先导包import java.util.*;
toString() 若直接打印数组是Java地址 地址:类型@哈希码 与类型和机器有关 所有引用类型若未用这个方法一般都会打印地址值
fill() 填充
equals() 判断数组相等
copyOf() 复制数组
binarySearch() 前提有序!查找数组下标,有返回下标没有随机负数
二维数组
1)int [][] a = new int[5][5]; //对称矩阵式
2)int[][] a = new int[5][]; //可能不对称第一个里面长度不能少是二维长度
a[0]=new int[5]; //重新对一维数组创建空间
3)int [][] c={{1,2,3,},{1,2,4,5,6},{5,6,7,8,9}};//完全不对称
9 和11
二分查找逻辑:
从中间值开始往两边分解查找 要查找的值为基准值
- 前提:数组升序
- 1找到中间值
- 2比较
- 2.1基准值与中间值相等,找到了,break;
- 2.2基准值比中间值大,开始下标定义为中间值begin=mid;
- 2.3基准值比中间值小,结束下标定义为中间值end=mid;
- 3如果重复上述过程无法符合2.1则不存在
- 4.若只剩一个元素也无法找到,需要额外标注;
增强型for–>遍历数组 IDEA快捷键–>数组名.for
for(int value:nums){//类型 变量名:数组名
//适合遍历查看
}
杨辉三角
1)第一种解法
所有一维数组第一个值为1;最后一个值为1;其他值等于上一个数组连续两个值的和
2)第二种解法
(a+b)^n的二项展开式的系数
每一项/前一项的倍数随着列数变化(分子-1,分母+1)
小项目–>吃货联盟订餐系统
项目分析
1.欢迎页重复出现–>使用do while循环 条件(输入的数在1-5之内循环)
2.Scanner控制输入
3.分功能进入子菜单–>选择结构–>switch结构–>1-6
输入0返回–跳过后面的–>控制程序跳过剩余的代码,直接回到首位,上面循环条件需要变化
输入数为0循环继续
1)我要订餐
输入:姓名
展示菜品:–>输入选择菜品编号与份数(正整数)–>送餐时间(10-20)–>送餐地址
–>输入完成再来展示订单信息(送餐费,总费用)
2)查看餐袋
输入内容展示,同时增加订单状态(预定,完成)
3)签收订单
改变订单状态:-->已预定变为已完成(不能重复签收!)
4)删除订单-->签收完成才能删除,预定不能删除
要和选择的编号一致
若把上面的订单删除了,下面的订单应该如何变化(前移)
5)我要点赞
要展示菜品的位置增加一栏点赞数
点赞数+1
6)退出系统