JAVA基础
JAVA基础
一 了解JAVA
Pascal之父Nicklaus Wirth:“Algorithms+Data Structures=Programs”
译:应用程序=算法+数据结构
1.常见的Dos命令
- dir:列出当前目录下的文件夹
- md:创建目录
- rd:删除目录
- cd:进入指定目录
- cd..:退回上一级目录
- cd\:退回到根目录
- del:删除文件
2.Java语言的特点
面向对象性:
 两个要素:类 ,对象
 三个特征:封装 ,继承 , 多态
健壮性:
 去除了C语言中的指针
 自动的垃圾回收机制
跨平台性:
 功劳归功于JVM(JAVA虚拟机)
 Wtire once,Run anywhere.
 一次编译,到处运行
3.JDK/JRE/JVM的关系
JDK(Java Development Kit:JAVA的软件开发工具包)=JRE(JAVA运行环境)+开发工具集
JRE=JVM(JAVA虚拟机)+javaSE标准类库
4.path环境变量配置
为什么要配置环境变量:
希望Java开发工具(javac.exe,java.exe)在任意文件夹下运行。
如何配置:
属性-高级系统设置-环境变量新建'JAVA_HOME'变量,变量值为安装的JAVA的JDK所在地址.
在path变量中添加'%JAVA_HOME%\bin'即可.
二 基本语法
1.java关键字的使用
定义:被java语言赋予了特殊含义,用作专门用途的字符串(单词)
特点:关键词所有的字母都小写
2.保留字:现有java版本尚未使用
具体有哪些保留字:goto / const
注意:自己命名标识符时尽量避免使用这些保留字
3.标识符的使用
定义:java对各种变量,方法,类等要素命名时使用的字符序列成为标识符.(凡是可以自己起名的都是标识符)
涉及到的结构:包名/类名/接口名/变量名/方法名/常量名(加粗为必须要遵守,否则编译不通过)
规则:
- 由24个英文字母大小写,0-9, _或$组成
- 数字不可以开头
- 不可以使用关键字和保留字,但是可以包含关键字和保留字
- java严格区分大小写,长度无限制
- 标识符不能包含空格
规范:
- 包名:多单词组成时所有字母都小写.例:- xxyyzz
- 类名,- 接口名:多单词组成是,所有单词首字母大写.例:- XxYyZz
- 变量名,- 方法名:多单词组成时,第一个单词首字母小写,后续首字母大写.例:- xxYyZz
- 常量名:所有首字母都大写,多单词组成时用下划线连接.例:- XX_YY_ZZ
- 起名时为了提高阅读性,要做到见名知意
4.变量*
4.1 变量的概念
 计算机内存中的一块存储空间,是存储数据的基本单元.
4.2变量的定义流程
声明: 数据类型 变量名; 例:int money;
赋值: 变量名= 值; 例:money = 100;
应用: System.out.println(变量名);
4.3变量的定义方式
声明变量的3种方式:
- 先声明,再赋值:【常用】
- 数据类型 变量名;
- 变量名 = 值;
- 声明并赋值:【常用】
- 数据类型 变量名 = 值;
- 多个同类型变量的声明与赋值:【了解】
- 数据类型 变量1 , 变量2 , 变量3 = 值3 , 变量4 , 变量5 = 值5;
5.数据类型*
5.1基本数据类型(primitive type)
1.整型:byte(1字节 = 8bit)、short(2字节)、int(4字节)、long(8字节)
		byte范围:-128~127
		声明:long型变量,必须要以"l"或者"L"结尾
		通常,定义整型变量时,使用int型。
		整型的常量,默认类型时:int
2.浮点型:float(4字节)/long(8字节)
		浮点型,表示带小数点的数值
		float表示数值的范围比long还大
		定义float类型时,变量末尾要以"f"或"F"结尾
		定义浮点型变量时,使用double型。
		浮点型常量,默认类型为:double
3.字符型:char(1个字符=2字节)
		定义char型变量通常使用一对单引号''
		内部只能写一个字符
		表示方式:1.声明一个字符;2.转义字符;3.直接使用 Unicode 值表示字符型常量
4.布尔型:boolean
		只能取两个值之一: true 、 false
		常常在条件判断、循环结构中使用
5.2引用数据类型(字符串)
String类型 取值范围:任何" "之间的字面
 值字符编码:Unicode字符序列
6.类型转换
①自动类型转换(只涉及7种基本数据类型)
结论:当容量小的数据类型与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型。
说明:此时的容量大小指的是,表示数的范围的大和小,比如:float容量要大于long的容量。
byte、char、short -->int -->long -->float -->double
特别:当byte、char、short三种类型的变量做运算时,结果为int类型。
②强制类型转换(只涉及7种基本数据类型)
强制类型转换:自动类型提升运算的逆运算。
1.需要使用强转符:()
2.注意点:强制类型转换,可能导致精度损失。
③String与8种基本数据类型间的运算
String属于引用数据类型,翻译为:字符串。
声明String类型变量时,使用一对双引号""
String可以和8种基本类型变量做运算,且运算只能是连接运算:+
String运算结果仍然是String类型。
7.运算符*
7.1算数运算符
| 操作符 | 描述 | 
|---|---|
| + | 加 , 求和 | 
| - | 减 , 求差 | 
| * | 乘 , 求积 | 
| / | 除 , 求商 | 
| % | 模 , 取余 | 
| ++ | 递增 , 变量值+1 | 
| -- | 递减 , 变量值-1 | 
关于++/--在前++--在后的问题
++在前先做自增再赋值,++在后先做赋值再自增;
--同理
7.2赋值运算符
| 操作符 | 描述 | 
|---|---|
| = | 右边直接赋值给左边 | 
| += | 左边加右边然后赋值 | 
| -= | 左边减右边然后赋值 | 
| *= | 左边乘右边后赋值 | 
| /= | 左边除右边后赋值 | 
| %= | 求余后赋值 | 
7.3关系运算符
| 操作符 | 描述 | 
|---|---|
| > | 大于 | 
| < | 小于 | 
| >= | 大于等于 | 
| <= | 小于等于 | 
| == | 等于(注意与=赋值区分) | 
| != | 不等于 | 
7.4逻辑运算符
| 操作符 | 语义 | 描述 | 
|---|---|---|
| && | 与(并且) | 同为真则为真,有假则假 | 
| || | 或(或者) | 有真就为真,全假则假 | 
| ! | 非(取反) | 真即是假,假则为真 | 
&&与&的区别:
共同点:有false则false,必须同时满足条件
不同点:逻辑单与&在判断左边为false时右边依然执行;而逻辑双与在判断左边为false时,会造成短路效果,右边不参与运算,在开发中常用,执行效率高.
7.5三元运算符
| 操作符 | 语义 | 描述 | 
|---|---|---|
| ? : | 布尔表达式?值1:值2 | 表达式为真时,输出值1; 表达式为假时,输出值2 | 
三 流程控制
1.分支结构
①if-else条件判断结构
三种结构:
//结构一:
if(条件表达式){
	执行表达式
}
//结构二:二选一
if(条件表达式){
	执行表达式1
}else{
	执行表达式2
}
//结构三:多选一 
if(条件表达式){
	执行表达式3
}else if(条件表达式1){
	执行表达式4
}else if(条件表达式2){
	执行表达式5
}
...
else{
	执行表达式n
}
//else 结构是可选的
②switch-case选择结构
switch(表达式){
case 常量1:
	执行语句1;
	//break;
case 常量2:
	执行语句2:
...
default:
	执行语句n;
	//break;
	}
//说明:根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入各个相应的case结构中,调用其执行语句。当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case末尾结束。
//break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构
//switch结构中的表达式,只能是如下的六种数据类型之一:byte、short、char、int、枚举类型(jdk5.0新增)、String类型(jdk7.0新增)
2.补充:Scanner用法
/*
如何从键盘获取不同类型的变量:需要使用Scanner类
具体实现步骤:
1.导包:import java.util.Scanner
2.Scanner的实例化:Scanner scan = new Scanner(System.in);
3.调用Scanner类的相关方法(  next()/nextxxx()  ),来获取指定类型的变量
注意:
需要根据相应的方法来输入指定类型的值,如果输入的数据类型与要求的类型不匹配时,会报异常:InputMisMatchException
导致程序中止。
*/
//1.导包:import java.util.Scanner
import java.util.Scanner;
class ScannerTest{
	public static void main(String[] args){
		//2.Scanner的实例化
		Scanner scan = new Scanner(System.in);
		//3.调用Scanner类的相关方法
		System.out.println("请输入你的姓名:");
		String name = scan.next();
		System.out.println(name);
		
		System.out.println("请输入你的年龄:");
		int num = scan.nextInt();
		System.out.println(num);
		System.out.println("请输入你的体重:");
		double weight = scan.nextDouble();
		System.out.println(weight);
		System.out.println("你是否相中了我?(true/false)");
		boolean man = scan.nextBoolean();
		System.out.println(man);
		//对于char型的获取,Scanner没有提供相关的方法,只能获取一个字符串
		System.out.println("请输入你的性别:(男/女)");
		String gender = scan.next();//"男"
		char genderChar = gender.charAt(0);//获取索引为0位置上的字符
		System.out.println(genderChar);
	}
}
3.循环结构*
1)循环结构四要素
①初始化条件
②循环条件 ————>是boolean类型
③循环体
④迭代条件
说明:通常情况下,循环结束都是从条件二中循环条件范围false了。
2)三种循环结构
①for循环
for( ①初始化语句 ; ②循环条件 ; ④循环操作 ){
		③循环体
}
执行过程:① ————> ② ————> ③ ————> ④ ————> ② ————> ③ .... ②不满足————>循环结束
执行过程
- 首次执行初始部分(仅一次)。
- 对布尔表达式进行判断,结果为true,则执行逻辑代码。
- 本次执行完毕后,执行迭代部分,再次判断,结果仍旧为true,则再次执行逻辑代码。
- 直至布尔表达式的结果为false时,才会退出循环结构,执行后续代码。
②while循环
初始化语句
while(循环条件){
	循环体;
    循环操作;
}
执行流程:
- 先对布尔表达式进行判断,结果为true,则执行逻辑代码。
- 本次执行完毕后,再次进行判断,结果仍旧为true,则再次执行逻辑代码。
- 直至布尔表达式的结果为false时,才会退出循环结构,执行后续代码。
③do-while循环
初始化语句;
do{
	循环体(循环操作)
}while(循环条件);
执行流程:
- 先执行一次循环操作之后,再进行布尔表达式的判断。
- 如果结果为true,则再次执行循环操作。
- 如果结果为false,才会退出循环结构,执行后续代码。
3)三种循环的区别
①三种循环的区别
for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
do-while循环则是先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
②for和while的区别
条件控制语句控制的自增变量,因为归属for循环的语句结构中,在for循环结束后,就不能再被访问到了
条件控制语句所控制的自增变量,对于while循环来说不属于其语法结构中,再while循环结束后,该变量还可以继续使用
③死循环格式
for(;;){}
while(true){}		//常用
do{}while{true};
4.流程控制关键字
①流程控制break:终止、跳出switch、循环结构.
②流程控制continue:结束本次、进入下一次循环。
四 Java方法/函数(method)
Java方法介绍:(method)是将具有独立功能的代码块组织成一个整体,使具有特殊功能的代码及,达到代码复用的效果,减少main方法中代码冗余
定义语法
public static 返回值类型 方法名称(数据类型 形参){
		方法体;
}
-----------------------------------------------
调用语法
变量类型 变量名 = 方法名称(实参);
1.名词解释
- 返回值:能够完成特定功能呢和向调出反馈的结果
- 方法名:方法(函数)的名称,类似于变量名,小驼峰命名方式
- 形参:在方法定义中小括号的内容,带有数据类型(为局部变量)
- 实参:在方法调用中小括号的内容,不带返回值类型,但必须与形参类型顺序一致
- 返回:通过return关键字将指定的数据返回,在方法名前指定数据类型
- 修饰符:publicprivarteprotecteddefault(默认)``static``abstract``final
- 调用:格式为方法名(实参)
- 传参:传参的过程相当于用实参给方法的形参赋值
2.注意事项
- 方法定义时返回值类型必须与定义时相同
- 方法可以多级调用(方法内调用其他方法),但不可以嵌套定义(不可以方法包含方法)
- 定义时void无返回值方法内仍可以使用return关键字,但return后面的代码不会执行.
- 方法的位置在类内部,于main方法平级
3.方法递归
直接递归:方法自己调用自己(需要控制好终止条件,否则可能导致死循环从而内存溢出)
间接递归:方法调用其他方法,其他方法又回调方法自己.
4.方法的重载
- 方法相同
- 参数类型不同(个数不同或者形参的数据类型不同)
五 数组
数组:长度固定的相同数据类型的集合
1.数组的使用
1.1 -数组的定义
数据类型[] 数组名 = new 数组类型[数组长度];
1.2 -数组的初始化以及访问
数组的初始化:
数据类型[] 数组名 = {数据1,数据2,数据3....,数据N};
数组的访问:
数据名[下标];		
下标范围:从0开始~数组长度-1
数组长度: 数组名.length
1.3 -数组的默认值
- 整型:0
- 浮点型:0.0
- 字符:\u0000
- 布尔型:false
- 其他:null
2.数组的扩容
创建数组时,指定长度后无法更改长度
扩容思路:创建大于原数组长度的新数组,将原数组元素复制到新数组中
System.arraycopy(原数组,原数组起始,新数组,新数组起始,长度);
/////
数据类型[] 新数组名 = Arrays.copyOf(原数组,新长度);
3.冒泡排序(数组)
Random ran = new Random();
相邻两个数组比较大小,互换位置
for (int i=0; i<arr.length-1; i++) {
            for(int j=0; j<arr.length-1-i;j++) {
                if(arr[j] > arr[j+1]) {
                    int temp =0;
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
4.二维数组创建
声明并分配空间
数组类型[][] 数组名 = new 数组类型[高维数组][低维数组];
声明并赋值
数组类型[][] 数组名 = {{v1,v2,v3},{a1,a2,a3}};
 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号