基础笔记
l Java简介
l Java开发环境配置
l 第一个HelloWorld程序
l 常量,变量,数据类型
l 运算符和表达式
一、 java简介、java相关知识及术语
- 简介
- JavaSE:Java Platform,Standard Edition(Java平台标准版)
JavaEE: Java Platform,Enterprise Edition(Java平台企业版)
JavaME: Java Platform,Micro Edition(Java平台微型版)
- JDK: Java Development Kit(Java开发工具包)
JRE: Java Runtime Environment(Java运行时环境)
JVM: Java Virtual Machine(Java虚拟机)。
|
JVM(java虚拟机) |
|||||
|
JRE |
|||||
java核心类库 |
||||||
JDK |
java开发工具(包括javac、java、javadoc等等) |
|||||
java基础类库 |
二、 Java开发环境搭建:
下载、安装JDK——>配置环境变量
- java开发环境配置步骤:
PATH: D:\Java\jdk1.8.0_65\bin;//在path变量值前面加上
(jdk1.5以后可以不用配置classpath)
- 在命令窗口键入java -version,查看jdk版本
javac 编译
java 运行
- Java开发工具
文本编辑器:记事本、editplus、notepad++、sublime_text …
集成开发环境:eclipse、intellji…
三、 第一个程序
1) Java源程序的结构:最小运行单位是类。
2) class——关键字
3) 类名,类的命名规范(首字母大写,多个单词时,后续单词首字母也大写,不允许用保留字)。
4) main——程序的入口,程序必须有main方法。
5) 语句使用“;”作为结束(英文字符)。
四、 Java程序开发步骤:
1) 通过文本编辑器中编写java代码,将文件名的后缀改为.java文件
2) 调用javac.exe对.java文件进行编译,生成字节码文件(.class文件)
3) 调用运行工具java.exe对.class文件进行解释执行
不同平台的JVM是不同的,它们面向字节码文件的接口是相同的。JVM的不跨平台性实现了java语言的跨平台性。
五、 Java注释:
单行注释://,注释内容从//开始到本行结束
多行注释:/*注释内容*/,在需要长篇注释时,可用多行也可用多个单行注释,多行注释不能嵌套。
文档注释:/** */,可以生成doc文档
六、 数据类型、常量、变量
- 数据类型
1) 基本数据类型,又称为源生数据类型
2) 引用数据类型
基本数据类型:
整数型:
byte 字节 1字节 -27~27-1
short 短整型 2字节 -215~215-1
int 整形 4字节 -231~231-1 21亿多
long 长整型 8字节 -263~263-1
浮点类型:
float 单精度 4字节
double 双精度 8字节
字符型:
char 字符 2字节
布尔类型:
boolean 布尔 1字节 true/false
- 数据类型取值范围
0111 1110
0*20+1*21
13.26
char:’a’ ‘1’ ‘,’ ‘我’ ASII ‘0’~‘9’:48~57 ‘a’~’z’:97~122
‘A’~’Z’:65~90
Unicode
- java常用转义字符:
①\n表示换行;
②\t表示制表符,相当于Tab键;
- 数据类型转换
l 隐式转换(自动转换):数据类型兼容、小转大
l 强制转换(显示转换):数据类型兼容、大转小时会造成精度丢失
大、小是指:数据范围的大小
数据范围大小为(从小到大):byte→short(char)→int→long→float→double
字符可以和整数进行转换
- 变量
l 本质上说变量就是内存空间的一块存储区域,通过变量名就可以访问它。
l 变量声明方式
有2种:
1) 先声明后赋值
数据类型 变量名;
变量名 = 值;
2) 声明的同时初始化。
数据类型 变量名 = 值;
- 标识符命名规则:
首字符+其余部分;
l 首字母,字母,下划线,$符;
l 其余部分,数字、字母,下划线,$符。长度没有限制,变量名区分大小写
l 命名时应避开关键字(保留字)
l 符合驼峰命名法;首字符小写,从第二个单词开始单词首字母大写 userName
l 见名知意:一般和变量的用途对应,这样便于程序的阅读,不要用拼音。
- 从键盘获取输入
七、 运算符和表达式
- 运算符 (优先级别由高到低):
1) 算术运算符:* / + - % ++ --
2) 关系运算符:> < >= <= = = !=
3) 逻辑运算符:&& || !
4) 赋值运算符:= += -= *= /= %=
注意: 1)int+double—结果为double类型
2) / 当操作数两边都是整形,则商取整(余数丢掉取商),当操作数的两边有一个是浮点,则结果为精确小数
3) 当++单独使用的时候无论在前面还是后面都一样,与”=”一起用的时候,++在前,先自身加再使用,++在后先使用再自增。
4)String和任意数据类型相加结果都为String类型
?:
运算符优先级
八.随机数的获取
import java.util.Random;
Random r = new Random();
r.nextInt(10)+1—1~10之间的整数
练习:
获取23~38之间的随机数
数组
一、 一维数组(创建数组、内存)
二、 一维数组+循环(存取,遍历,求最大值/最小值)
三、 数据结构和算法
- 排序:冒泡、选择、插入
- 查找:遍历查找、二分查找
四、 Arrays类的使用
五、 二维数组
一、 一维数组
- 数组(Array)作用:引用数据类型,存放于堆中
1) 存放相同类型数据的一组数据。
2) 对同类型数据进行集中管理(遍历或存储。。。)
- 声明创建数组:
type[] 变量名 = new type[元素个数]/ type变量名[]= new type[元素个数];
比如:int[] a = new int[10]; 数组名,也即引用a,指向堆中数组元素的首地址。
- 数组的初始化(赋值)
- int[] a = {1,2,3,4};//声明数组、分配空间、赋值
- int[] a = new int[]{1,2,3,4};//声明数组、分配空间、赋值
- int a[]=new int[3];a[0] = 1;a[1] = 2;a[2]=3;
- 数组的特点
1) 数组是引用类型,里面可以存放基本数据类型,也可以存放引用数据类型,基本数据类型数组保存的是值,引用数据类型数组保存的是堆里存放值的空间的首地址
2) 创建后长度不能改变
3) 每个数组都有一个名为length的只读属性,表示数组的长度。
4) 访问数组元素通过[]和下标
5) 新生成的数组,如果是引用类型数据,里面元素默认值为null,如果是基本数据类型,都是各自的默认值(数值型、char为0,boolean类型为false)
- 内存图
栈里存放基本数据以及对象的引用,堆里存放引用类型数据。
二、 一维数组遍历
//for循环遍历
for(int i=0;i<array.length();i++){
System.out.println(array[i]);
}
for(int i=array.length-1;i>=0;i--){
System.out.println(array[i]);
}
//增强for循环
for(int num:array){
System.out.println(num);
}
三、 数组查找
- 遍历查找(线性查找)
- 二分查找(适用于有序数组)
原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后;将要查找的值和数组的中值进行比较,若小于中值则在中值前面找,若大于中值则在中值后面找,等于中值时直接返回。然后继续。。。
n 四、一维数组排序:
- 冒泡排序
重要思想:两两比较,将较小的升上去,较大的往下沉
外层循环比较n-1轮
内层循环:在一轮中将数字,与每一个数两两比较
原数组:10 6 4 3 2 1
第一轮:6 4 3 2 1 10
第二轮:4 3 2 1 6 10
第三轮:3 2 1 4 6 10
第四轮:2 1 3 4 6 10
第五轮:1 2 3 4 6 10
1
- 选择排序
简单选择排序
基本思想:在固定的位置上找合适的元素。 在一轮比较中找出未排序的最小值,放在它应该在的位置(找到之后再交换,交换次数比冒泡少)
- 插入排序
基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要 把第n个 数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序
四、Arrays类的使用
常用方法:排序(sort),复制(copyOf rangeOfCopy),填充(fill),查找(indexof)
五、二维数组
- 定义,数组里面的每个元素都是一个一维数组
- 二维数组的创建
1)定义声明二维数组
type arrayName[ ][ ] ;
type [ ][ ]arrayName;
2)初始化
a) 静态初始化:数组在声明创建的同时对元素进行赋值
int intArray[ ][ ]={{1,2},{2,3},{3,4,5}};//二维数组长度为3,
b) 动态初始化
int intArray[ ][ ];//声明
intArray=new int[3][];//创建、分配内存,前面一个[]指高维,指的是二维数组的长度
intArray[0] = new int[3];//高维元素赋值
intArray[1] = new int[4];
intArray[2] = new int[2];
intArray[0][0] = 1;//低维元素赋值
intArray[0][1] = 2;
intArray[0][2] =3;
intArray[1][0] =4;
。。。
- 二维数组特点:
1) 二维数组的每个元素都是一个一维数组,这些数组不一定都是等长的。
内存区域堆、栈区别:
a. 栈空间小,堆占空间大(目录)
b. 栈空间申请释放速度快,方法结束后,立刻释放
c.堆的数据申请、释放速度慢,垃圾回收机制统一回收
- 遍历
双重for循环遍历
l 循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程序被称为循环体。
l 循环包括:while循环、do…while循环、for循环
- while循环
当条件满足时,执行循环体。只要布尔表达式为true,循环一直进行
while( 条件表达式 ) {
//循环内容
}
while循环的三个表达式:
练习:输出10~19之间的数字
练习:求1到100之间的奇数之和与偶数之和。
- do-while循环
先执行,后判断,最少会执行一次
练习:输出10~19之间的数字
练习:求1到100之间的奇数之和与偶数之和。
l do-while与while循环的区别:
- 执行次序不同。While循环先判断,再执行;do-while循环先执行,再判断。
- 一开始循环条件就不满足的情况下,while循环一次都不会执行,do-while循环则不管在什么情况下都至少执行一遍。
l for循环:
for循环执行的次数是在执行前就确定的。语法格式如下:
for(初始化表达式① ; 条件表达式② ; 递增(递减)表达式③){
执行语句; //一段代码
}
1) 表达式①,初始化变量
2) 表达式②,如果为true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
3) 表达式③,更新循环控制变量。
4) 再次执行表达式②。。。
练习:输出10~19之间的数字
练习:求1到100之间的奇数之和与偶数之和。
l break,continue
- break主要用在循环语句或者switch语句中。switch中,用来跳出整个语句块。循环中,break跳出当前循环
- continue跳过当次循环,直接跳转到下一次循环。
练习:求1到100之间的奇数之和与偶数之和。用continue
l for循环与while循环:
1) for循环多用于循环次数已知,while多用于循环次数未知
2) for循环中定义的循环变量在循环完毕后,被系统回收。while循环中用到的变量在循环完毕后还存在于内存中,原因:变量的作用域
3) 两个循环可互换
l 二重循环
循环体中包含循环语句的结构称为多重循环,循环嵌套越多,效率越低。
在二重循环中,外循环执行一次,内循环执行完毕后才执行下一次外循环。