Java语言入门
发展历程
三大技术体系
JavaSE 标准版JavaEE 企业版JavaME 嵌入式版Java语言特点
简单性健壮性面向对象分布式多线程动态性可移植性(跨平台)Java语言怎么实现跨平台
通过jvm
虚拟机跨平台,不同平台安装不同版本的;
跨平台的不是Java程序
Java两大核心机制
Java虚拟机机制垃圾回收机制Java语言运行流程
jdk下载与安装,配置环境变量
/java/technologies/javase-downloads.html
安装时,为了便于管理,新建一个Java文件夹存放jdk
和jre
配置环境变量
系统变量
JAVA_HOME
:选择安装的jdk的路径,不用选择到bin
path
:添加 %JAVA_HOME%/bin;
jdk、jre、jvm之间的关系
jdk安装后的文件结构
java、javac、javadoc
javac
编译器,将源程序转换成字节码
java
运行编译后的Java程序(.class)
javadoc
文档生成器,从源码注释中提取文档
常用doc命令
dir
列出目录
cls
清屏
cd
进入目录
开发工具eclipse,优化
修改字体
修改字符编码 -> utf-8
Java语法基础
转义符
public static void main(String[] args) {System.out.println("\b退格");System.out.println("\t水平制表符Tab");System.out.println("\n换行");System.out.println("\f表格符");System.out.println("\r回车");System.out.println("\'单引号\'");System.out.println("\"双引号\"");System.out.println("\\反斜线");}
关键字
(1). 程序中已经被定义好的单词,具有特殊含义,都为小写。
(2).goto
和const
,作为保留关键字未被使用
标识符
程序中,自定义的内容(类名、方法名、变量名),都为标识符
命名规则
只能有数字、字母、下划线、$,且不能用数字开头不能使用关键字大小写敏感见名知意
建议
类名
每个单词首字母大写 大驼峰
方法名
第一个首字母小写 小驼峰
变量
所有字母小写
注释
单行注释以//开头 换行结束
多行注释以/*开头 以*/结束
文档注释以/**开头 以*/结束
常量
System.out.println(999);System.out.println(0.23);System.out.println('a');System.out.println("hello");System.out.println(true);// System.out.println(null);
变量
程序运行过程中会发生改变的量
语法格式:数据类型 变量名 = 数据值;
int age = 10;age = age + 1;System.out.println(age);
8种数据类型及其默认值
整型:
byte(字节): 1字节 8位 -128~127(-27~27-1)short(短整型):2字节 16位 -32768~32767(-215~215-1)int(整型): 4字节 32位long(长整型):8字节 64位
浮点型:
float(单精度): 4字节 32位double(双精度): 8字节 64位
布尔类型:
boolean: 1字节 8位 只有两个值:true、false
字符型:
char: 2字节 16位 ‘a’
java中引用数据类型:
数组、枚举、类、接口、集合...
数据类型转换
自动转换(隐式转换):将取值范围小的类型自动提升为取值范围大的类型
强制转换(显式转换):将取值范围大的类型强制转换成取值范围小的类型
byte,short,char->int->long->float->double
数据类型转换必须满足以下规则:
(1) 不能对boolean类型进行类型转换;
(2) 不能把对象类型转换成不相关类的对象;
(3) 在把容量大的类型转换为容量小的类型时必须使用强制类型转换;
(4) 转换过程中可以导致溢出或损失精失;
byte a = 45;int s = a + 1;System.out.println("隐式转换byte->int");System.out.println(s);System.out.println(getType(s));System.out.println("强制转换int->byte");byte b1 = (byte) s;System.out.println(b1);System.out.println(getType(b1));System.out.println("隐式转换int->double");int sum = 10;double d = sum + 3.14;System.out.println(d);System.out.println(getType(d));System.out.println("强制转换double->int");int s1 = (int) d;System.out.println(s1);System.out.println(getType(s1));System.out.println("隐式转换char->int");char a1 = 'a';int int1 = a1;System.out.println(int1);System.out.println(getType(int1));System.out.println("强制转换int->char");char c1 = (char) int1;System.out.println(c1);System.out.println(getType(c1));
算术运算符
+、-、*、/、%、++、--
int a = 20;System.out.println(a + 1);System.out.println(a - 1);System.out.println(a * 2);System.out.println(a / 2);System.out.println(a % 3);System.out.println(a++);System.out.println(a--);
赋值运算符
=、+=、-=、*=、/=、%=
int a = 20;a += 10;System.out.println(a);a -= 5;System.out.println(a);a *= 2;System.out.println(a);a /= 5;System.out.println(a);a %= 2;System.out.println(a);
比较运算符
==、>、<、>=、<=、!=
int a = 20;if (a == 20)System.out.println("ok");if (a > 10) {System.out.println("a大于10");}if (a < 5) {System.out.println("a小于5");}if (a >= 10) {System.out.println("a大于等于10");}if (a <= 20) {System.out.println("a小于或等于20");}if (a != 28) {System.out.println("a不等于28");}
逻辑运算符
&&、||、&、|、!
int a = 10;if (a >= 5 && a <= 20) {System.out.println("a处于5至20之间");}if (a != 5 || a < 10) {System.out.println("a不等于5 或者 a小于10");}if (!false) {if (a > 5 & a < 10) {System.out.println("a大于5小于10");}if (a < 5 | a > 10) {System.out.println("a小于5或者a大于10");}}
三元运算符
数据类型 变量名 = 布尔类型表达式?结果1:结果2
int a = 10;char c = a > 5 ? 'a' : 'A';System.out.println(c);
二级制与十进制转换
十进制15 -> 二进制1111二进制1110 -> 十进制148 4 2 1 四位依次相加
流程控制
if…else…语句
int a = 20;if (a > 10) {System.out.println("a>10");} else {System.out.println("a不大于10");}
switch语句
switch(表达式) {case 常量表达式1:语句1;break;case常量表达式2:语句2;break;......case常量表达式n :语句n;break;default: 语句n+1;break;}
int a = 20;switch (a) {case 20:System.out.println("a的值为20");break;default:System.out.println("a的值不等于20,为其他值");break;}
for循环语句
for(初始化语句;判断条件语句;控制语句){循环体语句块;}
int a = 20;for (int i = 0; i < 10; i++) {a += i;}System.out.println("a的值:" + a);
while循环语句
while(判断条件语句){循环体语句块;控制语句;}
int a = 20;while (a < 23) {a++;System.out.println(a);}
do-while语句
do{循环体语句块;控制语句;} while(判断条件语句) ;do-while会先循环一次
int a = 20;do {a++;System.out.println(a);} while (a < 23);
continue
结束当前循环,继续判断for (int i = 1; i <= 10; i++) {if (i == 6) {continue;}System.out.print(i + "\t");}
break
结束当前循环,不再判断for (int i = 1; i <= 10; i++) {if (i == 5) {break;}System.out.print(i + "\t");}
方法
方法就是程序的特殊功能,通常也可以叫函数、功能,方法只能被调用的时候才会执行
语法:
修饰符 返回值类型 方法名(形参类型1 形参1,形参类型2 形参2,....){语句;return 返回值;}
修饰符可以有:public
(公共的)、private
(私有的)、protected
(保护的)、default
(默认不写的)
返回值类型:可以是基本数据类型和引用数据类型,也可以是无返回值类型void
return:返回值,当返回值是void的时候,return可以不写的
public static int sum(int a, int b) {return a + b;}
重载
重载:在同一个类中,方法名相同,形参类型、参数个数不相同
public static int sum(int a, int b, int c) {return a + b + c;}public static int sum(int a, int b) {return a + b;}
数组
数组:长度是固定的,存储相同类型元素的容器
数组分类
按维度分类
一维数组、二维数组、三维数组
按数据类型分类
基本数据类型数组:
byte、short、int、long、double、float、boolean、char
引用数据类型数组:
类、接口、枚举…
数组的声明(定义)
语法:
数据类型[] 数组名称=new 数据类型[长度];
String[] city1 = new String[3];String[] city2 = new String[] {"北京", "上海", "武汉" };String[] city3 = {"北京", "上海", "武汉" };
数组长度
length属性int[] a = {1, 2, 3, 4, 5 };System.out.println(a.length);
遍历数组
int[] a = {1, 2, 3, 4, 5 };System.out.println(a.length);for (int i = 0; i < a.length; i++) {System.out.print(a[i] + "\t");}
选择排序
//选择排序public static void chooseOrder() {//写一个数组int[] arr = {76, 23, 14, 76, 90, 61 };//写一个最小值元素位置int smallIndex;//遍历for (int i = 0; i < arr.length; i++) {//最小值是smallIndex = i;for (int j = 0; j < arr.length; j++) {if (arr[smallIndex] < arr[j]) {smallIndex = j;if (smallIndex != i) {//写一下临时变量int temp = arr[smallIndex];arr[smallIndex] = arr[i];arr[i] = temp;}}}}//遍历数据for (int x : arr) {System.out.print(x + "\t");}}
冒泡排序
//冒泡排序public static void maoPaoOrder(int[] arr) {for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr.length - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}//遍历数据for (int x : arr) {System.out.print(x + "\t");}}
二维数组的语法
数据类型[ ][ ] 变量名称=new 数据类型[一维长度] [二维长度];
二维数组的创建和遍历
int[][] arr1 = new int[1][1];arr1[0][0] = 23;arr1[0][1] = 12;int[][] arr2 = {{23, 12, 89 }, {54, 76, 90 } };int[][] arr3 = new int[][] {{23, 12, 89 }, {54, 76, 90 } };for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.println(arr[i][j]);}}
数组工具Arrays
Arrays.sort 数组排序Arrays.equals 比较两个数组是否相等Arrays.binarySearch 在排序好的数组中查找数值Arrays.asList 把数组转换为List
int a[] = {23, 43, 456 };int b[] = {43, 456, 23 };Arrays.sort(a);for (int i : a) {System.out.println(i);}System.out.println(Arrays.equals(a, b));System.out.println(Arrays.binarySearch(a, 456));System.out.println(Arrays.asList(a));