一、背景
(一)简介
1.产生
开发 Java 之初的目标是创建能嵌入消费类电子产品的软件,构建一种既可移植又可跨平台的语言。
1995年,Sun公司开发了一门新的编程语言——JAVA
2.优点
Java在jvm上运行,可跨平台
(二)运行条件
1.环境变量
JDK(Java delvelopment Kit),提供了编译 运行Java程序所需的各种工具和资源。
JDK 安装目录说明如下:
- bin目录:存放编译、运行Java 程序可执行的程序。
- lib目录:存放Java 的类库文件。
- jre目录:存放Java运行环境文件。
2.运行命令
- 编译:javac xxx.java
- 运行:j java xxx
3.运行过程:
源文件.java——>javac编译——>字节码文件.class——>java运行——>java运行——>程序中的main方法
二、Java基本语法
(一)标识符和关键字
1.标识符
- 在java语言中,用来标志类名、对象名、变量名、方法名、类型名、数组名、包名的有效字符序列,称为“标识符”;
- 标识符由字母、数字、下划线、美元符号组成,且第一个字符不能是数字;
- java语言区分大小写;
- 标志符命名规则:类名首字母大写,变量名和方法名采用驼峰标志法,常量全大写,多个单词之间用“_”隔开,包名全小写;
2.关键字
- 在java语言中,有一些专门的词汇已经被赋予了特殊的含义,不能再使用这些词汇来命名标识符,这些专有词汇,称为“关键字”;
- java有50个关键字和3个保留字,均不能用来命名标识符;
abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while - true、false、null不是关键字,是保留字,但是仍不能用来命名标识符,保留字是java预留的关键字,在以后的升级版本中可能会作为关键字;
(二)数据类型
1.基本数据类型
Java中定义了四类/八种基本数据类型
- 整数型---- byte, short, int, long
- 浮点数型---- float, double
- 字符型---- char
- 逻辑型---- boolean
2.数据类型
3.转义字符
- 数据类型除了boolean类型,其他基本类型数据之间可以相互赋值
- 由于类型不同 表示数值范围 和精确度不同,所以需要强制类型转换
- 字符转换为数字类型是对应的ASCII码表
- 数据类型从大范围到小范围(精确度高到精确度低)需要强制类型转换
- 强制类型转换会导致数据不准确
(三)运算符及表达式
1.算数运算符
2.赋值运算符
3.关系运算符
4.逻辑运算符
5.位运算符
6.三元运算符
public class Test {
public static void main(String[] args) {
int a = 1;
int b = 2;
int c = 4;
int res = c==a+b?++a:c>a+b?++b:++c; //三元运算符 (表达式)?(值1):(值2),若表达式为true则取值1,反之取值2
System.out.println(res); //++b,结果为3
}
}
7.自增自减运算符
public class Test003 {
public static void main(String[] args) {
int i = 5;
System.out.println(i++); //5
System.out.println(++i); //7
System.out.println(i); //7
System.out.println(--i); //6
System.out.println(i--); //6
System.out.println(i); //5
}
}
8.运算符的优先级
(四)数组
1.定义
- 数组是一个变量,存储相同数据类型的一组数据
- 数组是一个数据类型,不是基本数据类型,是引用数据类型
- 除了基本数据类型以外都是引用数据类型
- 区分数组中的小变量(即元素)使用下标,下标从0开始,最末尾是总长度-1
- 数组有长度,即数组有多少个元素,长度可哦那个arr.length来获取
2.格式
- 数据类型[ ] 变量名={1,2,3,……};
- 数据类型 变量名[ ] ={1,2,3,……};
- 数据类型[ ] 变量名=new 数据类型[length];
- 数据类型[ ] 变量名=new 数据类型[ ] {1,2,3,……};
3.特点
- 数组一旦定义完,长度固定,不可改变
- 当数组定义长度没有赋值时,则会使用0填充占位
- 当给数组重新赋值,只能通过下标
4.分类
- 一维数组
public class Test {
public static void main(String[] args) {
int[] i; //声明一个整型的一维数组变量
int ii[]; //声明一个整型的一维数组变量
i = new int[5]; //创建一个长度为5的一维数组对象,并将变量i指向该对象
float[] f = new float[5]; //直接创建一个长度为5的单精度浮点型一维数组对象,并将变量f指向该对象
double[] d = {1, 2, 3.4, 4.5}; //直接初始化一个一维数组元素
System.out.println(d[3]); //通过数组下标来获取数组内的元素,数组下标从0开始,结果为4.5
System.out.println(f[0]); //当创建出一个数组对象时,该对象内的数组元素为该数据类型的默认值,所以此处结果为0.0
//System.out.println(i[5]); //当通过数组下标来获取数组内元素时,[]内的值>=数组长度则报异常java.lang.ArrayIndexOutOfBoundsException(数组下标越界)
//System.out.println(ii[0]); //若一个数组变量只声明而未指向某一个具体的数组对象时,编译出错
System.out.println(d.length); //得到该数组的长度,结果为4
}
}
- 多维数组
public class Test {
public static void main(String[] args) {
int[][] i; //声明一个整型的二维数组变量
int ii[][]; //声明一个整型的二维数组变量
int[] iii[]; //声明一个整型的二维数组变量
i = new int[5][2]; //创建一个长度为5的二维数组对象,并将变量i指向该对象
float[][] f = new float[5][2]; //直接创建一个长度为5的单精度浮点型二维数组对象,并将变量f指向该对象
double[][] d = {{1}, {2,3}, {4,5,6}, {7,8,9,10}}; //直接初始化一个二维数组元素
System.out.println(d[3][1]); //通过数组下标来获取数组内的元素,数组下标从0开始,结果为8
System.out.println(f[0][0]); //当创建出二个数组对象时,该对象内的数组元素为该数据类型的默认值,所以此处结果为0.0
//System.out.println(i[5][0]); //当通过数组下标来获取数组内元素时,[]内的值>=数组长度则报异常java.lang.ArrayIndexOutOfBoundsException(数组下标越界)
//System.out.println(ii[0][0]); //若一个数组变量只声明而未指向某一个具体的数组对象时,编译出错
System.out.println(d.length); //得到该数组的长度,结果为4
System.out.println(d[2].length); //得到二位数组内的下标为2的那个一维数组的长度
}
}
(五)流程控制语句
1.条件分支语句
- if条件语句
/*格式1:
* if(boolean类型表达式){
* 满足条件执行
* }
*格式2:
* if(boolean类型表达式){
* 满足条件执行
* }else{
* if条件不满足执行
* }
* 格式3:
* if(boolean类型表达式){
* }else if(boolean类型表达式){
* }else if(boolean类型表达式){
* }else if(boolean类型表达式){
* }
* 格式4:
* if(boolean类型表达式)
* System.out.println("hello");
* */
- switch语句
/**
* switch(变量表达式){//兼容的数据类型 byte short int char
* case 常量1:执行语句;break;
* case 常量2:执行语句;break;
* case 常量3:执行语句;break;
* case 常量4:执行语句;break;
* case 常量5:执行语句;break;
* case 常量6:执行语句;break;
* default:当常量都不满足是执行的语句;
* }
* */
public class Test {
public static void main(String[] args) {
int[] score = new int[5];
score[0] = -7;
score[1] = 65;
score[2] = 80;
score[3] = 90;
score[4] = 59;
for(int i=0; i<score.length; i++) {
if(score[i]>=0 && score[i]<60) {
System.out.println("不及格");
}else if(score[i]>=60 && score[i]<80) {
System.out.println("及格");
}else if(score[i]>=80 && score[i]<90) {
System.out.println("良");
}else if(score[i]>=90 && score[i]<100) {
System.out.println("优");
}else {
System.out.println("成绩异常");
}
}
char ch = 'a';
switch(ch) { //switch括号内只支持 byte,short,int,char,enum五种数据类型,但是JDK1.7版本增加了String类型,所以相对于JDK1.7而言就是六种了
case 'A': //case为switch语句的入口,break为出口,从入口开始执行,直到遇到出口或代码执行完毕才结束
case 'a':
System.out.println("优");
break;
case 'B':
case 'b':
System.out.println("良");
break;
case 'C':
case 'c':
System.out.println("及格");
break;
default: //若上述条件均不匹配,则进default开始执行语句
System.out.println("不及格");
}
}
}
2.循环语句
- while语句
格式:
while(boolean类型表达式){
当条件满足时执行
}---break
break可以写在switch和循环语句中
break可以在switch中 是跳出switch语句
break是在循环语句中是终止当前循环---continue
continue只能写在循环 是停止本次循环 进行下一次循环注意:与breakcontinue作用域中 代码不能写在它们下面
- do……while语句
格式:
do{
循环体
}while(boolean表达式);
特点:与while不同 先执行循环体 再判断 即无论条件是否满足都会执行一次循环体
- for循环
---for
格式:for(初始值表达式;条件表达式;变量自增表达式){
循环体
}
循环顺序;
初始值表达式-->条件表达式-->循环体-->变量自增表达式-->条件表达式-->循环体-->
变量自增-->条件表达式.......
---- foreach
for(数据类型 变量 : 被循环的变量){}
public class Test {
public static void main(String[] args) {
int res = 0;
out: //out是一个标号,告诉java从哪里开始执行程序
for(int i=1; i<=10; i++) {
if(i==3) continue out; //continue终止本次循环,执行下次循环
if(i==5) break out; //break跳出循环
res = res + i;
}
System.out.println(res); //结果为1+2+4=7
int res2 = 0;
int i = 1;
in:
do{
if(i==3) continue in; //continue终止本次循环,执行下次循环
if(i==5) break in; //break跳出循环
res2 = res2 + i;
i++;
}while(i<=10);
System.out.println(res2);
}
}