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关键字将指定的数据返回,在方法名前指定数据类型
  • 修饰符:public privarte protected default(默认)``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}};
posted @   鸡护宝  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示