1、java的三大版本
- JavaSE:标准版,定位于个人计算机(桌面)的应用。
- JavaEE:企业版,定位于服务器端的应用。
- JavaME:微型版,定位于消费性电子产品的应用。
2、java的特征和优势
- 跨平台/可移植性 (核心优势)
- 面型对象
- 简单性
- 高性能
- 分布式
- 多线程
- 健壮性
3、java应用程序运行机制
4、JVM、JDK与JRE
- JVM:java虚拟机。
- JRE:java运行时环境,包括JRE、库函数、运行java应用程所必需的文件。
- JDK:java开发工具包,包括JRE、编译器和调试器等用于程序开发的文件。
5、注释
6、标识符、java关键字
6.1 标识符
-
用来给变量、类、方法以及包进行命名。
-
标识符一般使用驼峰命名法。
规则:
1、开头:字母 、_ 、$
2、除开头外:字母 、_ 、$和数字的任意组合。
3、大小写敏感,长度无限制。
4、不可以是java关键字。
6.2 java关键字(保留字)
- java中保留供内部使用的。
7、变量和常量
7.1 变量
7.1.1 变量基本概念
- 变量本质上是一个“可操作性的存储空间”,空间位置是确定的,但存储的值不确定。
- 变量作为程序中最基本的存储单元,包括变量名、变量类型和作用域。
- 变量在使用前必须声明和初始化。
int age; //4个字节大小
double money; //8个字节大小
7.1.2 变量的分类
- 局部变量:方法或语句块内部定义的变量。局部变量使用前必须声明和初始化。从属于方法和语句块。
- 成员变量(实例变量):方法外部、类的内部定义的变量。成员变量会自动初始化。从属于对象。
- 静态变量(类变量):使用static定义的变量。从属于类。
public class Variable {
int a; //成员变量
static double d; //静态变量
public static void main(String[] args) {
int b = 7; //局部变量
System.out.println(b);
{
double c = 0.001; //局部变量
}
}
}
7.2 常量
- 常量是一个固定的值,由final修饰。
- 常量的命名规范:大写字母和下划线。
- 常量不能再被赋值。
public class Constant {
public static void main(String[] args) {
final double PI = 3.14;
//PI = 5; //错误,常量不能再被赋值
final String NAME = "apple";
}
}
8、基本数据类型
8.1 整型
Java中整型的四种表示形式:
- 十进制
- 二进制:要求以0b开头。
- 八进制:要求以0开头。
- 十六进制:要求以0x或0X开头。
8.2 浮点型
- 浮点型不精确,不能用于高精度运算和比较。要比较的的话,应使用BigDecimal。
8.3 字符型
- 使用单引号表示,用来表示在Unicode编码表中的字符。
- java转义字符:
8.4 布尔型
- boolean类型只有两个常量值:true和false。
public class DateType {
public static void main(String[] args) {
//整型
byte a = 10;
short b = 12;
int c = 235;
long d = 125846L;
//进制测试
int e1 = 0b1101; //二进制,13
int e2 = 015; //八进制,12
int e3 = 0x15; //十六进制,21
//浮点型
float f = 2.45f;
double g = 3.456;
//字符型
char h = 'A';
char i = '保';
char j = '\u0077'; //w
//布尔型
boolean k = true;
boolean l = false;
}
}
8.5 数据类型转换
8.5.1 自动转换
- 数字表示范围小的数据类型可以自动转换成范围大的数据类型。
- 实线表示自动转换时不会造成数据丢失,虚线则可能会出现数据丢失问题。
8.5.2 强制转换
- 数字表示范围大的数据类型可以自动转换成范围小的数据类型。
- 会造成精度丢失。
public class DataConversion {
public static void main(String[] args) {
//自动类型转换
int a = 100;
long b = a;
double c = a;
//强制类型转换
double d = 100.25;
int e = (int) d;
float f = (float) d;
}
}
9、运算符
9.1 算数运算符
9.2 赋值运算符
9.3 比较运算符
9.4 逻辑运算符
- 逻辑与(或)和短路与(或)的区别:
1、&和|运算符会执行所有的操作数(执行条件);
2、&&运算符当有操作数的值为false时,就结束运算,不再执行后面的操作数;
3、||运算符当有操作数的值为true时,就结束运算,不再执行后面的操作数;
public class TestOperator {
public static void main(String[] args) {
System.out.println(1<3 || 2>(3/0)); //true
System.out.println(1>3 && 2>(3/0)); //false
//|和&会执行第二个操作数,所以会报错
System.out.println(1<3 | 2>(3/0)); //编译错误:java.lang.ArithmeticException: / by zero
System.out.println(1>3 & 2>(3/0)); //编译错误:java.lang.ArithmeticException: / by zero
}
}
9.5 三元运算符(?)
System.out.println( 3>2 ? “正确” : “错误” );
10、Scanner
- 获得键盘输入的内容。
public class ScannerTest {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = input.next();
System.out.println("请输入你的年龄");
int age = input.nextInt();
System.out.println("你的姓名:" + name);
System.out.println("你的年龄:" + age);
}
}
11、控制语句
- 顺序结构
- 选择结构
- 循环结构
11.1 选择结构
- if
public class Testif {
public static void main(String[] args) {
int a = 10;
if (a >= 0) {
System.out.println("a是一个正数");
}
}
}
- if…else
public class Testifelse {
public static void main(String[] args) {
int age = 25;
if (age < 18) {
System.out.println("你还未成年");
} else {
System.out.println("你已经成年了");
}
}
}
- if…else if…else if…else
public class Testelseif {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入你的成绩:");
double result = input.nextDouble();
if (result < 60) {
System.out.println("你的成绩不及格");
} else if (result < 80) {
System.out.println("你的成绩等级为C");
} else if (result < 90) {
System.out.println("你的成绩等级为B");
} else {
System.out.println("你的成绩等级为A");
}
}
}
- switch
public class TestSwitch {
public static void main(String[] args) {
int month = (int) (1+12*Math.random());
System.out.println("得到的月份是:" + month);
switch (month) {
case 1:
case 2:
case 3:
System.out.println("这是第一季度");
break;
case 4:
case 5:
case 6:
System.out.println("这是第二季度");
break;
case 7:
case 8:
case 9:
System.out.println("这是第三季度");
break;
case 10:
case 11:
case 12:
System.out.println("这是第四季度");
break;
default:
System.out.println("这个不是月份数");
break;
}
}
}
11.2 循环结构
循环结构分为当型和直到型。
- wlile
public class TestWhile {
public static void main(String[] args) {
//计算1+2+3+...+100的值
int i = 1;
int sum = 0;
while(i<=100) {
sum = sum + i;
i++;
}
System.out.println("1+2+3+...+100 = " + sum);
}
}
- do…while
public class TestDoWhile {
public static void main(String[] args) {
int i = 1;
int sum = 0;
do {
sum = sum + i;
i++;
} while (i <= 100);
System.out.println("1+2+3+...+100 = " + sum);
}
}
- for
public class TestFor {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum = sum + i;
}
System.out.println("1+2+3+...+100 = " + sum);
}
}
11.3 break和continue
- break
结束整个循环。
public interface TestBreak {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if (i == 7) {
break;
}
System.out.print(i + "\t");
}
}
}
- continue
结束单次循环。
public class TestContinue {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if (i == 7) {
continue;
}
System.out.print(i + "\t");
}
}
}
12、方法
12.1 方法的基本概念
- 方法是一段用来完成特定功能的代码片段。
- 方法声明格式:
[修饰符] 返回值类型 方法名() { java语句…}
public class Method {
public static void main(String[] args) {
//通过对象调用方法
Method mt = new Method();
mt.method1();
int c = mt.add(100, 25) + 1000;
System.out.println(c); //1125
}
void method1() {
System.out.println("这是第一个方法");
}
int add(int a,int b) {
System.out.println(a+b); //125
return a + b; //return的两个作用:1、结束方法的运行;2、返回值
}
}
12.2 方法的重载(overload)
- 重载的方法只是名称相同而已,实际上是完全不同的方法。
- 构成重载的条件:(1)方法名称相同;(2)形参个数、形参类型、形参顺序不同。
- 只有返回值不同不构成重载。
public class TestOverload {
public static void main(String[] args) {
TestOverload tOverload = new TestOverload();
System.out.println(tOverload.add(10, 20));
System.out.println(tOverload.add(25, 37, 45));
System.out.println(tOverload.add(15, 37.26));
System.out.println(tOverload.add(25.25, 68));
}
public static int add(int a,int b) {
return a + b;
}
//形参个数不同,构成重载
public static int add(int a,int b,int c) {
return a + b + c;
}
//形参类型不同,构成重载
public static double add(int a,double b) {
return a + b;
}
//形参顺序不同,构成重载
public static double add(double a,int b) {
return a + b;
}
}
13、递归
- 递归的基本思想就是:“自己调自己”。
- 递归结构包括两个部分:
(1)递归头:定义什么时候结束调用自身的方法。
(2)递归体:定义什么时候需要调用自身的方法。
public class TestDigui {
public static void main(String[] args) {
a();
}
static int count = 1;
static void a() {
System.out.println("a" + " + " + count);
count++;
if (count<=10) {
a();
} else {
return;
}
}
}
public class TestFac {
//求n!
public static void main(String[] args) {
long time1 = System.currentTimeMillis(); //程序执行开始时的时间
System.out.println("结果为:" + fac(40));
long time2 = System.currentTimeMillis(); //程序执行结束时的时间
System.out.println("递归耗时:" + (time2-time1) + "ms");
}
static long fac(int n) {
if (n == 1) {
return 1;
} else {
return n * fac(n-1);
}
}
}
- 递归的优缺点:
(1)优点:程序简单。
(2)缺点:占用大量内存;花费时间;速度比循环慢的多。