目录
4.2 byte,short,char三种比int小的整数可以用范围内的值直接赋值
5.3 口诀: 小到大,直接转 大到小,强制转 浮变整,小数没
1.常识!
1.1Java语言平台版本
1) J2SE/JAVASE --- Standard Edition---标准版/基础版
开发普通桌面和商务应用程序提供的解决方案,该技术体系是其他两者的基础,可以完成一些桌面应用程序的开发。
2) J2ME/JAVAME --- Micro Edition --- 微型版/移动版
是为开发移动设备和嵌入式设备(电器、机器人、机顶盒…)提供的解决方案。
3) J2EE/JAVAEE --- Enterprise Edition--- 企业版/商务版
是为开发企业环境下的应用程序提供的一套解决方案,主要针对于企业级应用程序开发。
1.2 Java语言特性
简单性 高性能 编译性 解释性 分布式处理 健壮性 安全性 面向对象 开源 跨平台
什么是跨平台性?
通过Java语言编写的应用程序在不同的系统平台上都可以运行。
原理是什么?
不同的操作系统都有与之对应的JVM,只要在需要运行java应用程序的操作系统上,安装一个JVM,由JVM来负责Java程序在该系统中的运行。所以只需要写一个Java程序,就可以在多个不同的操作系统上执行。这样就实现了Java程序的跨平台性。也称为Java具有良好的可移植性。
注意JVM是Java语言能够跨平台的前提,但是JVM本身不跨平台
1.3JDK概述
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。
JDK是整个java开发的核心,它包含了:
1. JAVA开发工具(jdk\bin)
2. 基础开发库(jdk\jre\lib\rt.jar)
3. 基础开发库的源码(jdk\src.zip)
1.4 JDK JRE JVM解释:
JDK(Java Development Kit) --- Java开发工具包 --- JRE+开发工具
开发java程序最小的环境为JDK,所以JDK是JAVA语言的核心
JRE(Java Runtime Environment) --- Java运行时环境 --- JVM+运行java程序所必需的环境
运行java程序最小的环境为JRE
JVM(Java Virtual Machine)---负责加载.class并运行.class文件
JVM(JAVA虚拟机)将JAVA代码转换为对应的操作系统可以理解的指令,不同的操作系统有不同虚拟机与之对应,同一段代码交给虚拟机之后,虚拟机再转化给操作系统
什么是将java代码翻译成当前操作系统所理解的指令?
这指的就是编译的过程,将.java文件编译成.class字节码文件.编译完成会产生一个.class文件,这个文件称为字节码文件,操作系统看的指令文件就是字节码文件。
2.java语法基础
2.1 标识符
标识符可以简单的理解成一个名字。在Java中,我们需要标识代码的很多元素,包括类名、方法、字段、变量、包名等等。我们选择的那个名称就称为标识符,一个正确的标识符需要遵循以下规则:
1) 标识符可以由字母、数字、下划线(_)、美元符($)组成,但不能包含 @、%、空格等其它特殊字符
2) 不能以数字开头。如:123name 就是不合法
3) 标识符严格区分大小写。如: tmooc 和 tMooc 是两个不同的标识符
4) 标识符的命名最好能反映出其作用,做到见名知意。
5) 标识符不能是Java的关键字
2.2 关键字
在Java中,有一些单词被赋予了特定的意义,一共有50个关键字。这50个单词都是全小写.
其中有两个保留字:const和goto。注意,关键字不能被用作标识符!!
2.3 变量
在JAVA中,我们需要记录一些数据,但这些数据的值是不固定的,总在变,我们可以把这些数据理解为变量。
我们通过三个元素来描述变量:变量类型 变量名以及变量值。
int age = 18; //声明int类型的变量并赋值
String tel ; //声明String类型的变量
注意:
1、 变量名必须是一个有效的标识符
2、 变量名不可以使用java关键字
3、 变量名不能重复
3.数据类型
3.1 基本类型介绍(八种)
变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。
java是一个强类型的语言,会把日常见到的数据,分成好多类型.
内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。
位 bit,来自英文bit,音译为“比特”,表示二进制位。
1 Byte = 8 Bits (1字节 = 8位)
1 KB = 1024 Bytes 1 MB = 1024 KB 1 GB = 1024 MB
4. 基本类型的字面值
4.1整数字面值是int类型
int x = 99999;//对,右面数据的字面值是int类型
int x = 99999999999;//错,右面数据的字面值是int类型,但是已经超出int的取值范围。
4.2 byte,short,char三种比int小的整数可以用范围内的值直接赋值
byte b1=127;//对,
byte b2=128;//错,超出byte范围
4.3浮点数的字面值是double类型
double r =3.14;//对
float r =3.14;//错,右面的数据字面值是double,float是4字节存不下double类型的数据
4.4字面值后缀L D F
long x =99999999999L;//字面值是int类型,需转成long类型的数据,加字面值后缀L即可
float b = 3.0F;//3.0字面值是double类型,加后缀F会变成float类型
double d = 3D;//3字面值是int类型,加后缀D,会变成double类型
4.5进制前缀
0b - 标识这是2进制 ,如:0b0101
0 - 标识这是8进制, 8进制是三位,如: 023
0x - 标识这是16进制,如: 0x0001
\u -标识这是char类型,属于16进制
5.基本类型转换
箭头开始的地方是小类型,箭头指向的地方是大类型
5.1 小到大(隐式转换)
byte m = 120;
int n = m;//小转大,右面的m是小类型,给左面的n大类型赋值,可以直接使用
float f = 3.2f; double d = f; -->可以执行
5.2 大到小(显示转换)
需要强制类型转换
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类型进行类型转换。
5.3 口诀: 小到大,直接转 大到小,强制转 浮变整,小数没
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
6.变量
6.1 概念
可以改变的数,称为变量。在Java语言中,所有的变量在使用前必须声明。
一般通过“变量类型 变量名 = 变量值 ;”这三部分来描述一个变量。如:int a = 3 ;
变量的使用原则:就近原则,即尽量控制变量的使用范围到最小
6.2 局部变量
位置:定义在方法里或者局部代码块中
注意:必须手动初始化来分配内存
作用域:也就是在方法里或者局部代码块中,方法运行完内存就释放。
6.3 成员变量
位置:类里方法外
注意:不用初始化,也会自动被初始化成默认值
作用域:整个类中,类消失变量释放
7.数组
7.1概念
数组Array,标志是[],用于存储多个相同类型数据的集合,想要获取数组中的元素值,可以通过脚标(下标)来获取数组下标是从0开始的,下标的最大值是数组长度减1.
7.2 创建数组
数组的创建方式一般分为动态初始化和静态初始化
//1. 动态初始化
int[] a = new int[5];
//2. 静态初始化
int[] b = new int[]{1,2,3,4,5};
int[] c = {1,2,3,4,5};
7.3 创建数组过程分析
程序创建数组int[]a = new int[5];时发生了什么?
1.在内存中开辟连续的空间,用来存放数据,长度是5
2.给数组完成初始化过程。给每个元素赋予默认值,int类型默认值是0
3.数组完成初始化会分配一个唯一的地址值
4.把唯一的地址值交给引用类型的变量a去保存
TIPS:数组名是个应用类型的变量,它保存着的事数组的地址,不是数组中的数据
7.4 数组的长度
数组的长度用length属性来表示,数组一旦创建,长度不可改变,数组的长度允许为0
静态数组创建--已经知道了数组中的具体数据
动态数组创建--知道数组的长度,后期加内容
/**char类型底层做了特殊处理,可以直接打印数组中的元素
但是其他所有类型的数组想要打印数组中的具体元素,需要借助数组的工具类Arrays.toString()
**/
获取创建络的数组的长度
syso(c3.length);
syso(s.length);
7.5数组的遍历
for(int i = 0 ; i <a.length ; i++) {
//a[i]--根据下标i来获取数组a中对应位置上元素的值
System.out.println((i+1)+"月有:"+a[i]+"天");
输出每个月的天数打印到控制台
数组的遍历:通过循环的方式,操作的是数组的下标
循环开始a[]--数组中的第一个元素
循环结束:a[a.length-1]--数组中的最后一个元素
如何变化:++
7.6 创建随机数组
public static void method3(){
//1.创建数组--动态
int[]a = new int[10];
//2.遍历数组,给数组中的每个元素赋值
for(int i = 0;i<a.lenth;i++){
//100是自定义的数据,表示生成的随机整数的范围是[0,100)
a[i]=new Random().nextInt(100);
//a[i] = new Random().nextInt(100)+1;//取值范围前后都+1-->[1,101]
}
//3.使用数组的工具类查看数组中的元素
System.out.printIn(Arrays.toString(a));
}
7.7 数组工具类Arrays
1 Arrays.toString 把数组里的数据,用逗号连接成了一个字符串[值1,值2]
2 Arrays.sort 对数组进行排序,对于基本类型的数组使用的是优化后的快速排序算法,效率高;对引用类型数组,使用的是优化后的合并排序算法
3 Arrays.copyOf 把数组赋值成一个指定长度的新数组
新数组的长度 大于 原数组, 相当于复制,并增加位置
新数组的长度 小于 原数组, 相当于截取一部分数据
eg: int[] to = Arrays.copyOf(from, 5);//需要复制哪个数组,复制的长度
【冒泡排序(待补充)】