java语言
语言:人与人交流沟通的方式
计算机语言:人与计算机进行交流的一种特殊语言
java语言是美国sun公司1995年推出的计算机语言
2004年9月java1.5发布改为5.0
2009年SUN公司被Oracle收购
java之父:詹姆斯·高斯林
java语言发展史
java5.0跨度特别大,java8.0是公司常用的版本
JRE和JDK
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,类似于翻译官的存在,可实现跨平台。
JRE(Java Runtime Environment)是java程序开发运行时环境,包含JVM和运行时所需的核心类库,我们想要运行一个已有的Java程序只需安装jre即可。
JDK(Java Development Kit)是java开发工具包,包含JRE和开发人员使用的开发工具(编译工具javac.exe和运行工具java.exe。
JDK的安装
官网地址:http://www.oracle.com注意针对不同的操作系统下载对应的jdk版本
目录不能有空格和中文
目录
bin:存放各种工具命名
conf:相关配置文件
include: 存放了一些平台特定的头文件
jmods:模块
legal:授权文档
lib:补充JAR包
常用DOS命令
win+r 输入cmd
dir:查看当前路径下的内容
cd… :回退到上一级目录
cd 目录\目录\目录… 进入多级目录
cls:清屏
exit:退出命令提示符窗口
Path环境变量的设置
- 新建JAVA_HOME环境变量,输入我们的安装路径(bin的上一级)
- 配置Path :%JAVA_HOME%\bin(建议放在最上边)
- 验证:cmd输入javac回车、java回车
HolloWorld案例:
打开命令提示符cmd,进入到HelloWorld.java所在的目录输入编译指令和执行指令:
编译:javac 文件名.java
执行:java 类名
HelloWorld案列常见问题
BUG:多看多思考多查阅资料,多尝试多总结
中英文符号问题:eg:非法字符
单词拼写问题:eg :程序包…不存在
Notepad软件的安装和使用:
傻瓜式安装,注意选择安装路径。设置:设置->首选项->新建->默认语言为Java 编码为ANSI
在里面编写程序会出现行号,便于调试
注释
概述:注释是指在程序指定位置添加的说明性信息,注释不参与程序运行,仅起到说明作用
注释分类
单行注释://注释信息
多行注释:/* 注释信息 */
文档注释:/** 注释信息 */
关键字
被java语言赋予了特定含义的单词
关键字特点
字母全部小写
常用的代码编辑器,针对关键字有特殊的颜色标记,非常直观
常量:
在程序运行过程当中,其值不可以发生改变的量
常量分类:
字符串常量:用""括起来的内容
整数常量:不带小数的数字
小数常量:带小数的数组
字符常量:用’'括起来的内容
布尔常量:表示真假,只有两个值;true,false
空常量:null 不能直接输出
数据类型
Java语言是强类型语言,对于每一种数据都给出了明确的数据类型,不同的数据类型也分配了不同的内存空间,所以他们表示的数据大小也是不一样的
boolean类型数据只能取值true或false,不可以0或非0的整数替代false和true这点和c语言不同
整数默认是int类型, 浮点数默认是double类型(long L float F)
变量
在程序运行过程中其值可以发生改变的量。从本质上讲,变量是内存中的一小块区域。
格式:数据类型 变量名=变量值;eg:int a=10;
使用:取值 a ; 修改 a=20;
注意事项:名字不能重复;未赋值不能使用;long类型为防止证书过大,后面要加L;float类型定义的时候,为了防止内容不兼容,后面要加F
标识符
就是给类,方法,变量等起名字的符号。
由**数字、字母、下划线_和美元字符$**组成
不能以数字开头
不能是关键字
区分大小写
约定:
小驼峰命名法:方法、变量
标识符是一个单词的时候,首字母小写 eg:name
标识符由多个单词组成的时候,第一个单词字母小写,其他单词首字母大写eg:firstName
大驼峰命名法:类、接口
标识符是一个单词的时候,首字母大写eg:Student
标识符多个单词每个单词首字母大写eg:GoodStudent
类型转换
自动类型转换
把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量
byte和char类型不兼容
强制类型转换
把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量
格式:目标数据类型 变量名=(目标数据类型)值或者变量 eg: int k=(int)88.88;(k=88)
算术运算符:
运算符:对常量或者变量进行操作的符号
表达式:用运算符把常量或者变量连接起来符合Java语法的式子就可以称为表达式。不同运算符连接的表达式体现的是不同类型的表达式。
+、-、*、/、%
除法得到商,取余得到的是余数
字符的+操作
拿字符在计算机底层对应的数值来进行计算的
‘A’–>65
‘a’–>97
‘0’–>48
算术表达式中包含多个基本数据类型时,整个算术运算符的类型会自动进行提升
byte short char 类型会自动提升到int类型
整个表达式的类型会提升到表达式中最高等级操作数同样的类型
byte,short,char–>int -->long–>float–>double
字符串的+操作
在+操作中,如果出现了字符串,就是连接运算符,否则就是算术运算,当连续进行“+”操作时,从左到右逐个执行eg:1+99+"年黑马"为100年黑马
赋值运算符
=、+=、-=、*=、/=、%=(eg:a+=b;将a+b的值给a)
int a=10;//把10赋值给a
注意:扩展的赋值运算符底层隐含了强制类型转换
short s=10;
s+=20; s=(shrot)(s+20);
自增、自减运算符
单独使用:++、–无论是放在变量的前面还是后面结果是一样
参与操作:
如果放在变量的后面,先拿变量值参与操作,后拿变量++或–;
如果放在变量的前面,先拿变量做++或者–,后拿变量参与操作
关系运算符
==、!= 、>、 >=、 <、 <= 成立返回true,不成立返回false
逻辑运算符
& | ^ !
短路逻辑运符
&& ||
作用和&,| 相同,但是具有短路效果(右边可能不执行)
三元运算符
格式:关系表达式?表达式1:表达式2; eg:a>b?a:b;
先计算关系表达式的值,如果为true,表达式1的值就是运算结果;如果为false,表达式2的值就是运算结果
数据输入
Scanner使用的基本步骤:
1导包 :import java.util.Scanner;
2创建对象:Scanner sc= new Scanner(System.in);
3接收数据:eg:int i=sc.nextInt();
流程控制
顺序结构:按代码编写的先后顺序依次执行
分支结构(if switch):
if(){}
if(){}else{} eg:奇偶数
if(){}else if(){}…else{}
switch(表达式){//表达式取值为byte short int char jdk5以后可以是枚举,jdk7以后可以是String
case 值1:
语句体1;break;
case 值1:
语句体1;break;
…
default:
语句体n+1; break;
}
注意:如果case控制语句体后面不写break,将会出现穿透现象,在不判断下一个case值得情况下,向下运行,知道遇到break;或者整体switch语句结束
循环结构(for, while, do…while)
三种循环区别:for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)do…while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行,后判断)
for和while的区别
条件控制语句所控制的自增变量;因为归属在for循环语法结构中,在for循环结束后,就不能再次被访问到了,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
跳转控制语句
continue 用在循环中,基于条件控制,跳过某次循环体内容的执行,继续下一次的执行
break 用在循环中,基于条件控制,终止循环体内容的执行,结束当前的整个循环
增强for循环
for(int t:a){
//a是要遍历的对象;每循环一次从数组中取出一个元素赋值给t
}
IDEA中的内容辅助键和快捷键
快速生成main()方法:psvm回车 或 main 回车
快速生成输出语句:sout
内容提示代码补全:Ctrl+Alt+space
格式化:Ctrl+Alt+L
soutm 回车 输出方法名称
soutv 回车 输出变量,参数,就近输出
fori 生成for循环
iter 生成增强for循环
prsf 生成private static final
Psfi private static final int
Ctrl+d 整行复制
Ctrl+x 整行删除
Alt+回车 只能辅助
Alt+/ 激活代码提示
Ctrl+p 提示所有参数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b2IBC309-1648113508982)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\1647510600200.png)]
数组
动态初始化:
int[] arr;
int[] arr=new arr[3];
//new 为数组分配内存空间
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QRrueplC-1648113508987)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\1646409932731.png)]
静态初始化:
int[] arr=new int[]{1,2,3};
//简化
int arr={1,2,3};//推荐
常见小问题:
索引越界:访问了数组中不存在的索引对应的元素,造成了索引越界问题。
空指针异常:访问的数组已经不再指向内存的数据,造成空指针异常。
null:空值,引用数据类型的默认值,表示不指向任何有效对象。
冒泡排序
public class BubbleSort implements IArraySort {
@Override
public int[] sort(int[] sourceArray) throws Exception {
// 对 arr 进行拷贝,不改变参数内容
int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);
for (int i = 1; i < arr.length; i++) {
// 设定一个标记,若为true,则表示此次循环没有进行交换,也就是待排序列已经有序,排序已经完成。
boolean flag = true;
for (int j = 0; j < arr.length - i; j++) {
if (arr[j] > arr[j + 1]) {
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = false;
}
}
if (flag) {
break;
}
}
return arr;
}
}
选择排序
public class SelectionSort implements IArraySort {
@Override
public int[] sort(int[] sourceArray) throws Exception {
int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);
// 总共要经过 N-1 轮比较
for (int i = 0; i < arr.length - 1; i++) {
int min = i;
// 每轮需要比较的次数 N-i
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[min]) {
// 记录目前能找到的最小值元素的下标
min = j;
}
}
// 将找到的最小值和i位置所在的值进行交换
if (i != min) {
int tmp = arr[i];
arr[i] = arr[min];
arr[min] = tmp;
}
}
return arr;
}
}
方法概述
方法是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集。
方法必须先创建才可以使用,该过程称为方法定义
方法创建够并不是直接运行的,需要手动使用后才执行,该过程称为方法调用。
public static void main(){
isEvenNumber();//方法调用
}
public static void isEvenNumber(){
//方法定义
}
形参和实参
形参:方法定义中的参数,等同于变量定义格式eg:int number;
实参:方法调用中的参数,等同于使用变量和常量 eg:10 number
方法注意事项
·方法不能嵌套定义
·void表示无返回值,可以省略return,也可以单独的写return;,后面不能加数据
方法重载
方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载
·多个方法在同一个类中
·多个方法有相同的方法名
·多个方法的参数不相同,类型不同或者数量不同
特点:仅对应方法的定义,与方法调用无关
重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否构成重载
方法参数传递
对于基本数据类型的参数,形式参数的改变,不影响实际参数的值
对于引用数据类型的参数,形式参数的改变,影响实际参数的值
类
类是对现实生活中具有共同属性和行为的事物的抽象
类的特点:
·类是对象的数据类型
·类是具有相同属性和行为的一组对象集合
对象的属性:对象具有各种特征,每个对象的每个属性都拥有特定的值
对象的行为:对象能够执行的操作
类和对象的关系:类是抽象的,对象是具体的
类的定义
是java程序的基本组成单位,是现实生活中一类具有共同属性和行为的事物的抽象,确定对象将会拥有的属性和行为
类的组成:
属性:在类中通过成员变量来体现(类中方法外的变量)
行为:在类中通过成员方法来体现(和方法相比去掉static即可)
对象的使用
创建对象:类名 对象名=new 类名;
使用对象:对象名.变量名
成员变量和局部变量
成员变量:类中方法外的变量;堆内存;随着对象的存在而存在,随着对象的消失而消失;有默认的初始化值
局部变量:方法中或者方法声明上;栈内存;随着方法的调用而存在,随着方法的调用完毕而消失;没有默认的初始化值,必须先定义,赋值,才能使用
封装
private 关键字
是一个权限修饰符,可以修饰成员(成员变量和成员方法)
作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能访问。
针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作
·提供get变量名()方法,用于获取成员变量的值,方法用public修饰
·提供set变量名(参数)方法,用于设置成员变量的值,方法用public修饰
this关键字
this修饰的变量用于指代成员变量
·方法的形参如果与成员变量同名,不带this修饰符的变量值的是形参,而不是成员变量
·方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量
什么时候使用:解决局部变量隐藏成员变量
封装概述
封装是面向对象的三大特征之一
是面向对象编程语言对客观世界的模拟,客观世界成员变量都是隐藏在对象内部的,外界是无法直接操作的
封装原则
将类的某些对象信息隐藏在类的内部,不允许外部程序直接访问,而是通过类提供的方法来实现对隐藏信息的操作和访问,成员变量private,提供对应的get和set方法
封装的好处:
通过方法来控制成员变量的操作,提高了代码的安全性
把代码用方法进行封装,提高了代码的复用性
构造方法
构造方法是一种特殊的方法,作用是创建对象
功能:完成对象数据的初始化
格式:修饰符 类名(参数){}
注意事项:
创建:
如果没有定义构造方法,系统给出一个默认的无参构造方法
如果定义了构造方法,系统将不再提供默认的构造方法