Java介绍
詹姆斯.高斯林(James Gosling)带领开发的一款能够跨平台的开发语言
版本:
J2ME:微型版,应用于移动、无线及有限资源的环境
J2SE(基础):标准版,应用于桌面环境
J2EE:企业版,应用于基于Java的应用服务器
Java的特性:
一种纯面向对象的编程语言,与平台无关(跨平台)的语言,吸收了C/C++语言的优点,有较高的安全性(自动回收垃圾,强制类型检查,取消指针)。
Java开发之路(学习之路)
JavaSE -> MySQL -> 前端(HTML、css、JavaScript) -> Java web -> SSM框架 -> SpringBoot -> VUE -> SpringCloud -> (MP Git)
JDK、JRE、JVM
JDK是java开发工具集
JRE是java运行环境,主要有:加载代码、校验代码、执行代码
JVM可以理解成一个可运行java字节码的虚拟计算机系统
它有一个解释器组件,可以实现java字节码和计算机操作系统之间的通信。
对于不同的平台有不同的JVM
JVM屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”
垃圾回收器(GC):JVM提供的一个系统线程,用于跟踪存储空间的分配情况,并释放哪些可以被释放的存储空间。
Java API(应用程序编译接口)
环境变量
内部命令:文件夹下的命令
外部命令:为命令的执行提供目录配置
注释
单行注释
//单行注释
多行注释
/*
多行注释
*/
文档注释
/**
* 文档注释
*/
代码的分类
结构定义语句
对代码进行结构划分
功能执行语句
以英文”;”结尾
二进制
计算机中的数据都以二进制数字保存。
逢二进一,只有0、1两个值
位(Bit):表示一个二进制数码 0 或 1,是计算机存储处理信息的最基本的单位。
字节(Byte):一个字节由 8 个位组成。它表示作为一个完整处理单位的 8 个二进制数码。
变量
变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。由于该存储单元中的数据可以发生改变,因此得名为”变量“。
分类:
按所属的数据类型划分:
基本数据类型:整数类、浮点类、字符类
引用数据类型:类、接口、数组
按被声明的位置划分:
局部变量:方法或语句块内部定义的变量
成员变量:方法外部、类的内部定义的变量
类的外面不能有变量的声明
变量的作用域
局部变量
只能在结构内使用,只能在被释放之前使用,内层范围可以使用外层范围的变量
八大基本数据类型
数值类:
整数类:
-
int(整型) 4字节 -2^31~2^31-1
-
byte(字节型) 1字节 -128~127
-
short(短整型) 2字节 -32768~32767
-
long(长整型) 8字节 -2^63~2^63-1
浮点类:
-
double(双精度型) 8字节 3.4e-45~1.4e38
-
float(浮点型) 4字节 4.9e-324~1.8e308
字符类:
-
char(字符) 2字节 ‘\u0000~u\ffff’
布尔类:
-
boolean(布尔型) 1字节 只有true/false
标识符
Java 对包、类、方法、参数和变量等要素命名时使用的字符序列称为标识符。
规则如下:
-
由字母、数字、下划线(_)和美元符号($)组成。
-
不能以数字开头。
-
区分大小。
-
长度无限制。
-
不能是 Java 中的保留关键字。
命名习惯:见名知意
float类型变量定义
float类型变量在定义时需注意,我们写出的浮点数字默认类型是double,需强转
float f = 10.1f; //在浮点数字后加f表示float类型
long类型变量定义
long类型变量在定义时需注意,我们写出的整形数字默认类型是int,当值过大时会提示出错
long l = 2200000000l; //在整形数字后加l表示long类型
char类型变量定义
char可以变成数字,可以进行运算
char c = 'A'; //只能放一个字符
数据类型转换
自动类型转换:容量小的类型自动转换成容量大的数据类型
byte、short、int>float>long>double
byte、short、int三者不会相互转换,在计算时会转化成int
强制类型转换:
int x = (int)5.12;//将浮点类强制转换成整形
强制类型转换有可能导致精度丢失
String转int:
int x = Integer.parseInt(字符串);
或int x = Integer.parseInt(字符串,进制);
int x = Integer.valueOf(字符串).intValue();
int转String:
String s = String.valurOf(整数表达式);
String s = Integer.toString(整数表达式);
String s = “hello” + 5;
String转char
String s = “123”;
char c[] = new char[String.length()];
c = s.toCharArray();//将字符串放入字符数组内
方法
方法用于封装一段特定的逻辑功能。方法的主要要素有:权限修饰符、方法名、参数列表和返回值。
格式:
权限修饰符 返回值类型声明 方法名称(参数列表){
方法中封装的逻辑功能;
return 返回值; //结束方法的调用并返回值。
}
返回值
方法调用结束后可以返回一个数据,称之为返回值。
方法在声明时必须指定返回值的类型。
通过 return 语句返回,return 语句的作用在于结束方法且将数据返回。
如果方法没有返回值(即方法不需要返回数据),需将返回值类型声明为 void。
参数列表
方法的参数列表:在调用时传递给方法,需要被方法处理的数据。
在方法定义时,需要声明该方法所需要的参数变量。
在方法调用时,会将实际参数值传递给方法的参数变量。必须保证传递参数的类型和个数符合方法的声明。
命名规范
小写驼峰命名法:第一个单词的首字母小写,后面单词的首字母大写
方法的调用
对象名.方法名(实参表);
或 方法名(实参表);
运算符
算术运算符
单目:+(取正),-(取负),++(自增),–(自减)
双目:+(加),-(减),*(乘),/(除),%(取余)
赋值运算符
=(赋值) a = b; //将b的值赋值给a
以下运算符运算时会自动进行强制类型转换
+=(加等于) a += b 等于 a = a + b
-=(减等于) a -= b 等于 a = a – b
*=(乘等于) a *= b 等于 a = a * b
/=(除等于) a /= b 等于 a = a / b
%=(模等于) a %= b 等于 a = a % b
关系运算符
<(小于)、>(大于)、<=(小于等于)、>=(大于等于)、==(等于)、!=(不等于)
逻辑运算符
逻辑运算符用于对boolean型结果的表达式进行运算,运算结果总是boolean型
&(与)、|(或)、^(异)、!(非)、&&(短路与)、||(短路或)
字符串连接符(+)
String s1 = “123”;
String s2 = “456”;
int a = 100;
String s3 = s1 + s2 + a;
位运算符
~(非),&(与),|(或),^(异)
三目运算符
boolean结果表达式 ? 表达式1 : 表达式2
若boolean的值为true,则结果为表达式1的值;若boolean的值为false,则结果为表达式2的值。
注意:表达式1的值和表达式2的值类型要一致
输入输出
输入:
Scanner input = new Scanner(System.in);
input.nextInt();// 接收一段数字
input.next();//接收不到空格
input.nextLine();
输出:
System.out.println();
%c:单个字符
%d:十进制整型
%f:十进制浮点数
%s:字符串
%o:八进制数
%x:十六进制数
%u:无符号十进制数
%%:输出%
%md:输出的int型数据占m列
%m.nf:输出的浮点型数据占m列,小数点保留n位
%+d:输出的数带正负号
%-d:输出的数左对齐
%+-d:输出的数带正负号且左对齐
转义字符
执行结构
顺序结构
顺序结构是一种基本的控制结构,它按照语句出现的顺序执行操作
分支结构
分支结构又被称为选择结构,根据条件成立与否来执行操作
if
if(条件表达式){
语句;
}
else if(条件表达式){
语句;
}
else{
语句;
}
switch
switch(条件表达式){
case 常量值1:{
语句1;
break;
}
case 常量值2:{
语句2;
break;
}
…
case 常量值n:{
语句n;
break;
}
default:{
语句n+1;
break;
}
}
switch 语句有关规则
表达式的返回值必须是下述几种类型之一:int, byte, char, short,String;
case 子句中的取值必须是常量,且所有 case 子句中的取值应是不同的;
default 子句是可选的;
break 语句用来在执行完一个 case 分支后使程序跳出 switch 语句块;如果 case 后面没有写 break 则直接往下面执行!
Case 后面的执行体可写{ }也可以不写{ }
循环结构
循环结构是一种重复结构,如果条件成立,它会重复执行某一循环体,直到出现不满足的条件为止
while
while(条件表达式){
循环体语句;
}
符合条件,循环继续执行;否则,循环退出
使用 while 循环的步骤
1、分析循环条件和循环操作
2、套用 while 语法写出代码
3、检查循环是否能够退出
do-while
do{
循环体;
}while(条件表达式)
先执行一遍循环操作,符合条件,循环继续执行;否则,循环退出
for循环
for(初始化参数;判断条件 ;更新循环变量){
循环体;
}
给for一个别名标记for
hehe: for(;;){
• break hehe;// 退出hehe循环
}
break
中断当前程序块的执行,继续执行程序块下面的语句。
continue
结束循环体中continue其后语句的执行,并返回循环语句的开头执行下一次循环。
随机数类
Random random = new Random();
int x = random.nextInt(20); //随机生成20以内的数赋值给x
数组
数组是存放多个相同数据类型数据的容器。
这些元素按线性顺序排列。所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素;除最后一个元素外,每一个元素都有唯一的后继元素。
创建格式
常用格式 1:
数据类型[] 数组名称 = {数组内容 1,数组内容 2,数组内容 3…数组内容 n};
常用格式 2:
数据类型[] 数组名称 = new 数据类型[数组长度];
不常用的创建方式:
1.创建数组,不初始化
数据类型[] 数组名;
格式 3 属于只创建了数组引用名, 并未在内存创建数组空间。
初始化:
数组名 = new 数据类型[长度];
2.创建数组,并指定数组中的内容
数据类型[] 数组名称 = new 数据类型[]{内容 1,内容 2,内容 3…内容 n};
下标
下标为数组中内容的数字序号,从 0 开始,对于长度为 n 的数组,下标的范围是 0~n-1。
可以通过下标的方式访问数组中的每一个元素。
数组名称[下标]
赋值
数组名称[下标] = 值;
数组的长度
数组名称.length
注意:数组的长度在创建时就固定了
数组常见问题
使用数组不当, 会出现如下问题:
数组未赋值: 空指针异常
超出长度的下标操作: 数组越界异常
多维数组
格式:
数据类型[] [] 数组名称 = new 数据类型[数组长度] [];
冒泡排序
原理
-
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
-
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的 数。
-
针对所有的元素重复以上的步骤,除了最后一个。
-
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
//外层循环控制比较轮数:nums.length-1
for (int i = 0; i < nums.length-1; i++) {
//内层循环控制每轮比较的次数:length-i-1
for (int j = 0; j < nums.length-i-1; j++) {
//符合条件,交换顺序
if (nums[j] > nums[j+1]) {
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
口诀
升序排列的口诀:
N个数字来排队
两两相比小靠前,
外层 循环length-1
内层循环length-i-1
降序排序的口诀:
N个数字来排队
两两相比大靠前,
外层 循环length-1
内层循环length-i-1
二分查找(折半查找)
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,二分查找要求数组数据必须采用顺序存储结构有序排列。
原理
-
首先,假设数组中元素是按升序排列,将数组中间位置的数据与查找数据比较,如果两者相等,则查找成功;否则利用中间位置记录将数组分成前、后两个子数组,如果中间位置数据大于查找数据,则进一步查找前子数组,否则进一步查找后子数组。
-
重复以上过程,直到找到满足条件的数据,则表示查找成功,
-
直到子数组不存在为止,表示查找不成功。
int[] nums = new int[10];
int minIndex = 0;//最小下标
int maxIndex = nums.length-1;//最大下标
int midIndex = (minIndex + maxIndex)/2;//中间下标
int num = 0;//要查找的数据
//循环查找
while (true) {
//中间数据比要查找的数据小
if (nums[midIndex] < num) {
minIndex = midIndex + 1;
}
//中间数据比要查找的数据大
else if (nums[midIndex] > num) {
maxIndex = midIndex - 1;
}
//找到数据,退出循环
else {
break;
}
//未查找到数据
if (minIndex > maxIndex) {
midIndex = -1;
break;
}
midIndex = (minIndex + maxIndex)/2;//重新获取中间下标
}
if (midIndex == -1) {
System.out.println("未找到数据");
} else {
System.out.println(num + "是数组中的第" + midIndex + "位");
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/13447.html