*Java基本情况*
不要下载最新版本的工具,包
Java的由来
Java的作用
Java的发展
*Java运行环境的安装*
按照需要区分jdk和jre
配置环境变量:
\1. 创建系统变量JAVA_HOME,变量值是按照jdk的路径D:\java\jdk
\2. 创建系统变量CLASSPATH,变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
\3. 配置path系统变量。变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
\4. 打开命令窗口,输入java -version指令,出现以下界面,环境变量配置成功
*手动去写第一个java程序*
具体实现流程
\1. 创建一个.java为后缀的文件
\2. 编写代码
public class HelloJava{
public static void main(String[] args){
System.out.println(“你好世界!”);
}
}
\3. 把编写好的文件放到对应的目录下面,打开dos命令窗口
\4. 通过javac指令,把.java文件编译成为.class文件
指令: Javac 文件名.java
\5. 通过java指令把编译后的.class文件运行
指令:java 类名(不带后缀的文件名)
*Java程序的规范要求*
\1. java代码是有层级关系,缩进区分层级关系
\2. 符号是成对出现,先敲成对出现的符号,在敲里面的内容
\3. 符号都是英文模式下面的,除了””内部可以有中文
\4. Java程序一句话写完,必须加;
*Java学习基础*
输出语句:
System.out.print();//不换行
System.out.println();//换行
注释:除了代码以外最重要的构造部分
对代码的解释
// :单行注释
多行注释:
文档注释:/** … */
/…/
报错:
\1. 语法错误,开发工具会直接提示,根据提示改错
\2. 写错方法,语法不报错,运行的时候在控制台报错,并给出提示
易错点:
\1. public修饰的类的名称必须与Java文件同名
\2. Java对大小写敏感,该大写就大写,该小写就小写
\3. 语法结构不能修改
一句话完毕,;号结尾
*变量*
使用变量:
变量名命名规范:
不能用Java关键字做为变量名
变量使用的常见错误:
\1. 变量要声明并赋值才能使用
\2. 要遵守变量的命名规范
\3. 不能有同名的变量
*数据类型*
常用的数据类型:
常用的数据类型:
*运算符*
*赋值运算符:把=右边的变量********值********赋值给左边的变量*
*算术运算符*
+ - * /
% :取余(求余数):求现在两个数除了之后的余数
5%2=1
5%10=5
++:自加1 5++ 6
Int a=1;
a++;//++在后,下次用到该变量自加1
System.out.println(a);//2
++a;//++在前,不管用不用得到,先自加1
–:自减1 5-- 4
类型转换:
自动类型转换:把小范围的变量赋值给大范围的变量
强制类型转换:把大范围的变量赋值给小范围的变量
Int a=(int)(3/2.0) 小类型 变量名=(小类型)大类型表达式
*关系运算符:做比较运算*
> < == != >= <=
结果只能是true(真)或者false(假),比较运算符的结果是boolean类型的
boolean(布尔)类型:
真:true
假:false
*If选择结构*
运行流程
语法结构:
代码:
逻辑运算符:做复杂的条件判断
*If-else选择结构*
语法结构:
运行流程:
代码:
*If-else --if选择结构*
语法结构:
If(条件1){
代码块1
}else if(条件2){
代码块2
}else if(…N){
代码块N
}else{
如果上面的条件都为false执行最后的else中的代码
}
运行流程:
代码:
*Switch选择结构*
语法结构:
常见错误:
\1. 在case语句运行完毕可以不加break;
挨个运行case块,在遇到break后停止,如都没写break,会挨个把所有的都运行一遍
\2. 相同常量值
直接编译不通过
\3. default块可以放到任何地方
要加break,和只要运行顺序
多重if:
变量值在某个区间判断使用
Switch:
等值判断使用
if选择结构
基本if选择结构: 处理单一或组合条件的情况
if-else选择结构:处理简单的条件分支情况
多重if选择结构:处理复杂的条件分支情况
嵌套if选择结构:用于较为复杂的流程控制
switch选择结构
多重分支并且条件判断是等值判断的情况
判断输入的是否是需要数据类型:
Scanner工具
HashNext…();
*While循环*
循环的特点:
循环条件:循环能不能继续的条件
循环操作:循环要做的事情
运行流程:
语法结构:
特点:先判断在执行
*程序调试*
F5:单步跳入
F6:单步跳过(一步一步运行)
F8:单轮运行(一轮一轮运行)
*Do-while循环*
语法结构
do{
循环操作
}while(循环条件);
运行流程
特点,先运行在判断
循环的使用:
*For循环*
三个表达式:循环三要素
\1. 循环变量的初始化
\2. 循环条件
\3. 循环变量的更新
输入10个整数,判断这些数字中有多少个偶数,有多少个奇数
123454321
随机输入一个数,判断该数字是否是回文。
*Break关键字*
在循环中使用,作用:终止循环
在循环中使用要配合选择结构一起使用,否则break直接使用就没有任何意义。
For(){
If(){
Break;
}
}
*Continue关键字:只能在循环中使用*
跳过当轮循环,直接运行下一轮循环:
If(不是偶数){
Continue;
}
输出
*数组*
数组就是一个变量,在内存中开辟一串连续空间。
数组的基本要素:
标识符:数组名
数组元素:数组中的值
元素下标:元素编号
元素类型:数组能存放的数据类型
数组的使用:
\1. 声明
Int[] a; 数据[] 数组名; 数据类型 数组名[ ];
\2. 分配空间
a=new int[5]; 数组名=new 数据类型[数组长度];
边声明边分配空间:
数据类型[] 数组名=new 数据类型[长度];
\3. 赋值
a[0]=10; 数组名[下标]=值;
边声明边赋值:
数据类型[] 数组名={值1,值2…};
数据类型[] 数组名=new 数据类型[]{值1,值2…}
\4. 使用
a[1] 数组名[下标]
Length属性:获取该数组的长度
通过循环取每个元素的值:
For(int i=0;i<数组名.length;i++){
数组名[i];
}
*数组的中的最大值*
数组排序:对数组做升序排序
Arrays.sort(数组名);
*插入算法*
\1. 比数字:找到要插入的位置
\2. 挪数字:腾位置
\3. 插入数字
*类*
根据对象的共有属性和方法抽离出来
类是个概念,是抽象的
对象:是看得见摸得着的实体
类是对象的类型
对象是类的实体
*对象*
描述对象的方式:
静态特征:基本属性
属性:对象具有的各种特征
动态特征:行为习惯
方法:对象具有的各种特征
对象:用来描述客观事物的一个实体,由一组属性和方法构成
*创建类*
public class 类名{
属性
方法
}
*创建对象*
类名 对象名=new 类名();
Int a=值;
使用:.操作符
对象名.属性=值;//给属性赋值
对象名.属性;//获取属性的值
对象名.方法();
*无参方法*
方法的构成:返回值类型 方法名 参数列表 方法体
方法的语法:
public 返回值类型 方法名(){
方法的主体
}
方法的返回值:
有返回值:必须给return 类型;
Public int sum(){
return 1;//return的类型要和方法定义的数据类型一致
}
Return作用:退出方法,放回结果
无返回值:返回值类型是void
Public void name(){
}
方法的调用:
有返回值:
数据类型 变量名=对象名.方法();
无返回值:
对象名.方法();
使用技巧:
\1. 方法之间可以相互调用:
本类调用本类中的方法:
Public void 方法名(){
方法名();
}
本类中调用其它类的方法:
Public void 方法名(){
类名 对象名=new 类名();
对象名.方法名();
}
\2. Return后面不能加代码
常见错误:
\1. 当返回值为void,方法体内部不需要加return
\2. Return只能返回单个数据
\3. 不要在类的内部创建方法
\4. 不要在方法的外面写逻辑代码
*局部变量和成员变量*
放在类中的变量,就是成员变量
放在方法中的变量,就是局部变量
作用域:作用范围(使用范围)
成员变量的作用域:在整个类中
局部变量的作用域:在当前声明的{ }内部
成员变量初始值:
数值:int 初始值:0
Double 初始值: 0.0
String 初始值:null
把业务逻辑封装到方法中,需要用到相关业务逻辑的时候调用该方法
*带参方法*
方法组成
访问控制修饰符
返回值类型
方法名
参数列表
方法体
方法的定义(形参)
方法的调用(实参)
在本类其他方法中调用:
方法名(实参列表);
其它类中调用:
创建对象:类名 对象名=new 类名();
对象名.方法名(实参列表);
实参列表调用规则:
实参的类型、数量、顺序都要与形参一一对应
常见错误:
\1. 调用方法时不能指定实参类型
\2. 实参的类型、数量、顺序都要与形参一一对应
\3. 方法定义了返回值类型,调用完方法之后必须接收返回结果
数组作为参数
Public void 方法名(数组){
在方法体中把参数数组当作一个数组使用(添加,获取数据)
}
对象做为参数
Public void 方法名(对象){
在方法体中把参数对象类型,做对象使用(调用属性,方法)
}
包的创建:
Package 包名;
引用包:
Import 包名.类名;可以在对应的包中引用该包下面的某个类
Import 包名.*; 可以在对应的包中引用该包中的所以类
*String类*
\1. String字符串定义之后不能修改
String s=”hello word”;在内存中开辟空间存“hello word”
s=”aaa”;//在内存中又开辟了一个空间存“aaa”
\2. String类是final修饰的
\3. 当创建一个字符串值为aaa,再次创建一个字符串也为aaa的时候,在String的内存空间中只会创建一份aaa
创建字符串的时候,String会拿这个值到内存中去判断有没有,有就直接指向这个地址,没有创建这个内存空间。
在Java.lang包中
计算字符串的长度
Int count=字符串.length();
\1. 字符串中空格也算一个字符
\2. Length()方法返回一个int类型结果,字符串长度
比较字符串
连接字符串
第一种:+拼接
第二中:concat()方法
字符串A.concat(字符串B);
把A拼接到B后面
提取字符串
split()方法:用什么作为条件,拆分字符串
字符串.split(条件(“ ”));
*== 和 equals*
==比较的是指向的地址值是否一样
==用来做基本数据类的比较
Equals比较是内存中的值是否一样
Equals一般用来做引用数据类型
equalsIgnoreCase()方法 :不管大小写,只要字符是一样的就为true(判断字符是否相同)
toLowerCase()方法:把字符转小写
toUpperCase( )方法:把字符串转大写
*StringBuffer对象:操作字符串*
创建对象:
StringBuffer sb = new StringBuffer();
StringBuffer sb = new StringBuffer(“aaa”);
使用:
sb.toString(); //转化为String类型
sb.append("**"); //追加字符串
sb.insert (1, “**”); //插入字符串
会拿这个值到内存中去判断有没有,有就直接指向这个地址,没有创建这个内存空间。
在Java.lang包中
计算字符串的长度
Int count=字符串.length();
\1. 字符串中空格也算一个字符
\2. Length()方法返回一个int类型结果,字符串长度
比较字符串
连接字符串
第一种:+拼接
第二中:concat()方法
字符串A.concat(字符串B);
把A拼接到B后面
提取字符串
[外链图片转存中…(img-MK8nju3R-1612437613247)]
[外链图片转存中…(img-mFMBW35l-1612437613248)]
split()方法:用什么作为条件,拆分字符串
字符串.split(条件(“ ”));
*== 和 equals*
==比较的是指向的地址值是否一样
==用来做基本数据类的比较
Equals比较是内存中的值是否一样
Equals一般用来做引用数据类型
equalsIgnoreCase()方法 :不管大小写,只要字符是一样的就为true(判断字符是否相同)
toLowerCase()方法:把字符转小写
toUpperCase( )方法:把字符串转大写
*StringBuffer对象:操作字符串*
创建对象:
StringBuffer sb = new StringBuffer();
StringBuffer sb = new StringBuffer(“aaa”);
使用:
sb.toString(); //转化为String类型
sb.append("**"); //追加字符串
sb.insert (1, “**”); //插入字符串
Sb长度:length();