Java基础知识学习

导读:本篇文章讲解 Java基础知识学习,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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:输出的数带正负号且左对齐

转义字符

Java基础知识学习

 

执行结构

顺序结构

顺序结构是一种基本的控制结构,它按照语句出现的顺序执行操作

分支结构

分支结构又被称为选择结构,根据条件成立与否来执行操作

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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!