栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA基础

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA基础

JAVA基础
  • Java语言平台版本
    • `什么是跨平台性?`
  • 配置环境变量
  • JAVA语法基础
    • 变量
    • 常量
    • 方法
  • 数据类型
    • 基本数据类型
    • 引用类型
    • 进制前缀
    • 基本类型的类型转换
      • 小到大(隐式转换)
      • 大到小(显式转换)
  • 运算符
    • 运算符速查表
    • 补充
      • 1:算术运算符之自增自减运算符
      • 2:逻辑运算符
      • 3:优先级控制
  • 分支结构
  • switch结构
    • switch结构的注意事项
  • 循环结构
    • for
    • break与continue
    • while
    • do-while
    • 三种循环的区别
  • 数组
    • 创建数组
    • 创建数组过程分析
    • 数组的特性
    • 数组的长度
    • 数组的遍历
  • 数组工具类Arrays
    • Arrays.toString(数组)
    • Arrays.sort(数组)
    • Arrays.copyOf(原数组,新的长度)
    • copyOfRange(原数组,起始下边,结束下标)
  • 二维数组
    • 创建二维数组
    • 遍历二维数组

Java语言平台版本
  1. J2SE/JAVASE — Standard Edition—标准版/基础版
    开发普通桌面和商务应用程序提供的解决方案,该技术体系是其他两者的基础。
  2. J2EE/JAVAEE — Enterprise Edition— 企业版/商务版
    是为开发企业环境下的应用程序提供的一套解决方案,主要针对于企业级应用程序开发。
  3. J2ME/JAVAME — Micro Edition — 微型版/移动版
    是为开发移动设备和嵌入式设备(电器、机器人、机顶盒…)提供的解决方案。Java不是不侧重,而是分支出安卓。

##Java语言特性

简单性 安全性 面向对象 高性能 编译性 解释性 分布式处理 健壮性 开源 跨平台

什么是跨平台性?

通过Java语言编写的应用程序在不同的系统平台上都可以运行,那原理是什么?

我们所写的JAVA程序是".java"为后缀的源文件,但这些文件计算机无法直接执行,需要先进行编译环节,通过编译变为以".class"为后缀的字节码文件,这个字节码文件交由JVM(JAVA虚拟机)来运行.

那我们只要在需要运行java应用程序的OS(操作系统)上,安装一个JVM,由JVM来负责Java程序在该系统中的运行即可。不同的OS(操作系统)都有与之对应的JVM,所以只需要写一个Java程序,就可以在多个不同的操作系统上执行。这样就实现了Java程序的跨平台性。也称为Java具有良好的可移植性。

配置环境变量

JAVA_HOME : JDK的根目录–JDK装哪里了
CLASS_PATH : JDK的lib目录
Path:不需要新建,配置的是JDK的bin目录
验证:DOS窗口: Java -verison

JAVA语法基础 变量

在JAVA中,我们需要记录一些数据
但这些数据的值是不固定的,总在变,我们可以把这些数据理解为变量。
我们通过三个元素来描述变量:变量类型 变量名以及变量值。
定义变量的两种格式:
格式一:声明变量时并且赋值:int age = 18;
格式二:先声明变量:String tel ; 然后给变量赋值:tel = 119;

注意:

  1. 变量名必须是一个有效的标识符
  2. 变量名不可以使用java关键字
  3. 变量名不能重复
常量

在程序运行过程中,值一直不会改变的量成为常量。(后续会进一步学习,略…)

方法
  1. 方法定义的格式: 修饰符 返回值类型 方法名(参数列表){方法体}
  2. 一个方法会不会执行,取决于有没有调用,调用的格式:方法名+参数列表
  3. 方法定义的位置没有关系,执行顺序取决于main()怎么调用
  4. 一个方法,可以不设置参数,也可以设置多个参数,如果有参数,使用方法时,必须传对应类型的参数
  5. 如果方法的返回值类型是void,不允许有返回值
  6. 如果方法要返回一个值,必须设置返回值类型,并且return对应类型的结果
  7. 在调用有返回值的方法时,可以选择接不接这个方法返回的值
    如果接了,后续可以多次使用这个返回值
    如果不接,那就是只是调用该方法的功能,并不使用这个返回值
数据类型 基本数据类型
  	      byte -- short -- int -- long -- float -- double -- char -- boolean
  对应字节   1 	    2	    4 	   8      4         8         2       1
引用类型

除了基本类型以外的所有类型都是引用类型
目前我们只遇到了String字符串类型,需要用双引号包裹
引用类型是一个对象类型,值是什么呢?
它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。

进制前缀

0b - 标识这是2进制 ,如:0b0101
0 - 标识这是8进制, 8进制是三位,如: 023
0x - 标识这是16进制,如: 0x0001

//10进制,底数为10:10^2 10^1 10^0 =100+0+0=100
	System.out.println(100);//默认10进制,打印100
	//2进制,底数为2:2^2 2^1 2^0 =4+0+0=4
	System.out.println(0b100);//2进制,打印4
	//8进制,底数为8:8^2 8^1 8^0 =64+0+0=64
	System.out.println(0100);//8进制,打印64
	//16进制,底数为16:16^2 16^1 16^0 =256+0+0=256
	System.out.println(0x100);//16进制,打印256
基本类型的类型转换 小到大(隐式转换)

byte m = 120;
int n = m;//小转大,右面的m是小类型,给左面的n大类型赋值,可以直接使用
float f = 3.2f; double d = f; -->可以执行

大到小(显式转换)

int x = 999;
byte y =(byte)x;//大转小,右面x给左面的y小类型赋值,不可以,需要强制类型转换

  1. 转换过程中可能导致溢出或损失精度
    例如:int i =128; byte b = (byte)i; //打印的结果是-128
    因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。
  2. 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
    例如:float f = 32.7f; int a2 =(int) f; //打印的结果是32
  3. 不能对boolean类型进行类型转换。

口诀

小到大,直接转 大到小,强制转 浮变整,小数没
低 ------------------------------------> 高
byte,short,char→ int→ long→float→double

运算符 运算符速查表

补充 1:算术运算符之自增自减运算符

a是操作数,++是自增运算符,–是自减运算符,自增和自减运算符即可以放在变量的前面,也可以放在变量的后面,例如:a++、++a、a–、–a等。
自增(++):将变量的值加1
分前缀式(如++a)和后缀式(如a++)。前缀式是先加1再使用;后缀式是先使用再加1。
自减(–):将变量的值减1
分前缀式(如–a)和后缀式(如a–)。前缀式是先减1再使用;后缀式是先使用再减1。

2:逻辑运算符

逻辑运算符连接两个关系表达式或布尔变量,用于解决多个关系表达式的组合判断问题
注意逻辑运算符返回的运算结果为布尔类型
通常,我们用0表示false,用1表示true
与:表示并且的关系
&单与: 1 & 2 ,结果想要是true,要求1和2都必须是true
&&双与(短路与):1 && 2 ,当1是false时,2会被短路,提高程序的效率
或:表示或者的关系
|单或: 1 | 2,结果想要是true,要求1和2只要有一个为true就可以
||双或(短路或):1 || 2,当1是true时,2会被短路,提高程序效率

3:优先级控制

当一个表达式包含多个运算符时,就需要考虑运算符的优先级,优先级高的运算符先参与运算,优先级低的运算符后参与运算。在实际的开发中,不需要特别去记忆运算符的优先级别,也不要刻意的使用运算符的优先级别,对于不清楚优先级的地方使用小括号辅助进行优先级管理。

分支结构
单分支结构:
	if(判断条件){
		代码
	}
	
多分支结构
	if(判断条件){
		满足判断条件,执行代码1
	}else{
		不满足判断条件,执行代码2
	}
	
嵌套分支结构
	if(判断条件1){
		满足判断条件1,执行代码1
	}else if (判断条件2){
		满足判断条件2,执行代码2
	}else if (判断条件3){
		满足判断条件2,执行代码2
	}else{
		以上条件都不满足,执行代码4
	}
switch结构
switch(判断条件){
	case value1 : 满足value1 执行次代码块 break;//可选
	case value2 : 满足value2 执行次代码块 break;//可选
	case value3 : 满足value3 执行次代码块 break;//可选
	case value4 : 满足value4 执行次代码块 break;//可选
	default : 以上都不满足,执行次代码块 //可选
switch结构的注意事项
  1. switch 语句中的变量类型可以是: byte、short、int 、char、String(jdk1.7以后支持)
  2. switch 语句可以拥有多个 case 语句
  3. 每个 case 后面跟一个要比较的值和冒号,且此值的数据类型必须与变量的数据类型一致
  4. 当变量值与 case 语句值相等时,开始执行此case 语句的内容,执行完会判断此行代码是否有break,如果有,结束执行,如果没有,会继续向后执行穿透所有case,包括default
  5. switch 语句可以包含一个 default 分支,该分支一般是写在switch 语句的最后
  6. 如果在default之前的case有break,则default不会执行
循环结构 for
for(开始条件1;循环条件2;更改条件4){
	代码块3
}

执行顺序
开始条件1 > 循环条件2 > 代码块3 > 更改条件4

break与continue

break: 直接结束当前循环,跳出循环体,简单粗暴

break以后的循环体中的语句不会继续执行,循环体外的会执行
注意如果是嵌套for循环,在内层循环遇到了break,只会跳出当前这一层内循环哦

continue: 跳出本轮循环,继续下一轮循环

continue后本轮循环体中的语句不会继续执行,但是会继续执行下轮循环,循环体外的也会执行

while
while(执行条件){
	循环体;
}
do-while
do{
	循环体;	
}while(执行条件);
三种循环的区别
  1. for:知道循环次数
  2. while/do while:当循环次数不确定时
  3. while:先判断,不符合规则,不执行代码
  4. do while:代码最少被执行一次,再去判断,符合规则,再次执行代码
  5. 循环之间都可以互相替代,但是一般最好选择合适的循环结构来完成代码哦~
数组

数组Array,标志是[ ] ,用于储存多个相同类型数据的集合
想要获取数组中的元素值,可以通过脚标(下标)来获取
数组下标是从0开始的,下标的最大值是数组的长度减1

创建数组

数组的创建方式一般分为动态初始化和静态初始化

  1. 动态初始化
    int[] a = new int[5];
  2. 静态初始化
    int[] b = new int[]{1,2,3,4,5};
    int[] c = {1,2,3,4,5};
创建数组过程分析

程序创建数组 int[] a = new int[5]; 时发生了什么?

  1. 在内存中开辟连续的空间,用来存放数据,长度是5
  2. 给数组完成初始化过程,给每个元素赋予默认值,int类型默认值是0
  3. 数组完成初始化会分配一个唯一的地址值
  4. 把唯一的地址值交给引用类型的变量a去保存

数组名是个引用类型的变量,它保存着的是数组的地址,不是数组中的数据

数组的特性
  1. 数组的长度通过**数组名.length;**来获取
  2. 数组一旦创建,长度无法改变
  3. 数组的下标从0开始,最大下标为数组长度-1
  4. 如果访问到了不存在的下标,会数组下标越界异常
数组的长度

数组的长度用 length属性来表示,数组一旦创建,长度不可改变
数组的长度允许为0

数组的遍历

遍历:从头到尾,依次访问数组每一个位置,获取每一个位置的元素.形式如下:
我们通过数组的下标操作数组,所以for循环变量操作的也是数组下标

开始:开始下标0 结束:结束下标length-1 如何变化:++
for(从下标为0的位置开始 ; 下标的取值 <= 数组的长度-1 ; 下标++){undefined
循环体;
}`

数组工具类Arrays Arrays.toString(数组)

把数组里的数据,用逗号连接成一个字符串[值1,值2]

Arrays.sort(数组)

对数组进行排序,对于基本类型的数组使用的是优化后的快速排序算法,效率高
对引用类型数组,使用的是优化后的合并排序算法

package cn.tedu.array;
import java.util.Arrays;
/*本类用于测试数组的工具类Arrays/
public class TestArraysSort {
public static void main(String[] args) {
//1.创建无序数组
int[] a = {21,96,75,23,25};
//底层使用的排序算法是进行优化后的快速排序算法
Arrays.sort(a);//对无序数组进行直接排序
System.out.println(Arrays.toString(a));
}
}

Arrays.copyOf(原数组,新的长度)

把数组赋值成一个指定长度的新数组
新数组的长度 大于 原数组, 相当于复制,并增加位置
新数组的长度 小于 原数组, 相当于截取一部分数据

copyOfRange(原数组,起始下边,结束下标)

指定首尾截取原数组中的元素

参数1:要截取哪个数组【原数组】
参数2:从原数组的哪个下标开始
参数3:到原数组的哪个下标结束
注意:截取的元素包含开始下标处的元素,不包含结束下标处的元素

二维数组

存放数组的数组,也就是说数组里存的还是数组的数据形式

创建二维数组

int[][] a = {undefined{3,5},{7,9},{1,2}};
–创建外部数组,长度是3
–给每个外部数组的位置创建内部数组,每个内部数组的长度是2
–给每个内部数组进行数据初始化
–二维数组生成唯一的地址值
–把地址值交给引用类型变量a来保存

遍历二维数组

for (int i = 0; i < a.length; i++) {//遍历外部数组
for (int j = 0; j < a[i].length; j++) {//遍历内部数组
System.out.println(a[i][j]);//依次打印二维数组中每个元素的值
}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/434816.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号