目录

java之父:詹姆斯•高斯林(James Gosling)

JAVASE — Standard Edition—标准版/基础版
定位于个人计算机上的应用,这个版本是java平台的核心,他提供非常丰富的api来开发一般个人计算机上的应用程序,包括用户界面接口awt及swing,网络功能与国际化,图像处理能力以及输出支持等,在上个世纪90年代末互联网上大放异彩的applet也属于这个版本。applet后来被flash取代,flash即将被html5取代
JAVAEE — Enterprise Edition— 企业版/商务版
定位在服务端的应用,javaee是javase的扩展,增加用于服务器开发的类库。如:JDBC是让程序员直接在java内使用的sql语法来访问数据库的数据,servlet能够延申服务器的功能,通过请求-响应的模式来处理客户端的请求;jsp是一种可以将java程序代码内嵌在网页上的技术
JAVAME — Micro Edition — 微型版/移动版
定位在消费性能电子产品的应用上,javame是javase的内申,包含javase的一部分核心类,也有自己的扩展类,增加了适合微小装置的类库:javax.microedition.io.*等。该版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型的产品能够增加支持的能力

Java语言特性:简单性、安全性、面向对象、高性能、编译性、解释性、分布式处理、健壮性、开源、跨平台

三者关系:JDK>JRE>JVM(三者是包含关系)

由上面观之Java跨平台前提:安装对应的JVM
java是一门解释性的语言:jvm将字节码文件一行一行的解释为当前操作系统可执行文件格式。

注意:编译后产生的可执行文件可以在对应的平台上运行(一般vs2019包含编译器与链接器)
注意:C语言相对java来说效率高,因为他产生的可执行文件可以直接在平台上运行,不用解释和翻译
.java文件(javac.exe)=>.class文件(java.exe)=>jvm运行.class得到结果
| 注释名称 | 注释内容 |
| 单行注释 | // |
| 多行注释 | /*……*/ |
| 文档注释 | /**……*/ |
注意:
标识符:标识符可以简单的理解成一个名字。
在Java中,我们需要给代码中的很多元素起名,包括类名、方法名、字段名、变量名等等。我们给对应元素起的名称就被称为标识符

注意:除了上述的50个关键字以外,true,false,null也不可以被用作标识符
变量:数据的值是不固定的,总在变的量
语法:变量类型 变量名 = 变量值 ;
- //声明变量时赋值
- int num=18;
- //先声明变量,再赋值
- String str; str="hello world";
注意:
变量的使用原则:就近原则(离自己最近的变量会生效)
变量本质上是在内存中申请一块内存空间(申请内存空间的大小取决于变量的类型),这块内存空间用变量名来表示,而这块内存里存储的是变量的值
- final double a=34;
- double b=78;
- System.out.println(a+"\t"+b);
- b=67;//成功
- a=45;//报错
注意:一个变量被final修饰,那么这个变量就变成了常量,这里的值便不可修改
位置:定义在方法里或者方法的声明上
注意:必须手动初始化来分配内存.如:int i = 5;或者int i; i = 5;作用域:整个方法的内部
生命周期:随着方法的调用而存在,方法运行完毕就释放了
位置:定义在类里方法外
注意:不用初始化,也会自动被初始化成默认值作用域:整个类的内部
生命周期:整个类中,类消失了,成员变量才会释放

常量:在程序运行过程中,值一直不会改变的量成为常量。



| 类型 | 默认值 |
| 整数型 | 0 |
| 浮点型 | 0.0 |
| 字符型 | '\u0000'(空格) |
| 布尔型 | false |
| 引用类型 | null |
- int a=123456789012;//报错,因为超过int范围。不能放入a内存
- long a1=123456789012;//报错,因为123456789012为int类型,而此值超过int类型范围
- long a2=123456789012L;//正确,告诉了此值为long类型并且符和long类型范围,并且可以放入long内存
- long a3=12;//正确,说明此值为int类型可以放入long类型内存
- float nu3=3.14;//报错,因为3,14为double类型
- float nu4=3.14F;//正确
- //默认10进制
- int a1=12;
- //16进制
- int a2=0x10;
- //二进制
- int a3=0b11;
- //十进制形式
- double num1=3.14;
- //科学计数法象时
- double num2=314E-2;
- System.out.println(num1+"\t"+num2);
字符常量: java中使用单引号来表示字符常量
注意:

- char c='h';
- char c1='\n';
- char c2='i';
- //以字符的形式打印
- System.out.println(c);
- //不用拼接,因为多个char类型运算时会整型提升
- System.out.format("%c%c", c,c2);
定义:除了基本类型以外的所有类型都是引用类型
注意:引用类型是一个对象类型,它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。如:类,接口,数组

注意:箭头开始的地方是小类型(容量小的类型),箭头指向的地方是大类型(这里的"大"和"小",指的是对应类型的取值范围,不是字节数)
隐式转换:小类型到大类型直接转
- byte m = 120;
- int n = m;//小转大,右面的m是小类型,给左面的n大类型赋值,可以直接使用
- float f = 3.2f; double d = f; //-->可以执行
显示转换:大转小强制转,浮变整,小数没
- double a=3.2;
- int b=(int)a;
- System.out.println(b);//b=3
注意:不能对boolean类型进行类型转换,并且boolean也不可以参与运算。
1.计算结果的数据类型,与最大数据类型一致
2.byte,short,char三种比int小的整数,运算时会先自动转换成int
- byte a=3;
- byte b=5;
- byte c=(byte)(a+b);//a+b会自动提升为int
- System.out.println(c);//c=8
3.整数运算溢出

4.浮点数运算不精确——后面有解决办法
5.浮点数的特殊值
Infinity 无穷大 3.14/0
- import java.util.Scanner;
- public class Hello {
- //main主方法——程序的入口
- public static void main(String[] args) {
- //获取当前时间——返回值为时间戳
- long l = System.currentTimeMillis();
- //获取扫描器
- Scanner sc=new Scanner(System.in);
- //让扫描器扫描键盘输入int类型的数据
- int i = sc.nextInt();
- //让扫描器扫描键盘输入String类型的数据
- String s = new Scanner(System.in).nextLine();
- //输出后换行
- System.out.println("时间为"+l);
- //输出后以\n换行
- System.out.print("\n");
- //以特定格式输出
- System.out.format("%d--%s", i,s);
- }
- }
运算符:用于连接 表达式的操作数,并对操作数执行运算的符号。
运算符类型:
算术运算符、位运算符、比较运算符、逻辑运算符、三目运算符、赋值运算符。
根据操作数来分类

自增自减运算符
i++ i先参与运算 i=i+1
++i i=i+1 i参与运算
+号的作用
注意:左右两侧的任意一侧有字符串,那么就是字符串拼接;结果就为字符串
- System.out.println(+5);//5
- System.out.println(5+6);//11
- System.out.println(5+'6');//59——整形提升
- System.out.println(5+6+"7");//117
- System.out.println("hello"+888);//hello888
逻辑运算符
逻辑异或(^):相同为假,相异为真
短路与:&&
只要第一个操作数为false那么整个结果就为false,第二个操作数根本不用算(前提第一个为false)
短路或:||
只要第一个操作数为true那么结果就为true,第二个操作数根本不用算(前提第一个为true)
注意:短路与或短路或相对于逻辑与或逻辑或效率更高
- //&运算
- System.out.println(true&true);//true
- System.out.println(true&false);//false
- System.out.println(false&false);//false
- //|运算
- System.out.println(true|true);//true
- System.out.println(true|false);//true
- System.out.println(false|false);//false
- //!运算
- System.out.println(!true);//false
- System.out.println(!false);//true
- //异或^运算——同为假,异为真
- System.out.println(true^true);//false
- System.out.println(true^false);//true
- System.out.println(false^false);//false
语法:exp1?exp2:exp3
注意:如果表达式1结果为true那么整个式子的结果就是表达式2的结果,否则是表达式3的结果
- int num=(5<7)?1:0;
- System.out.println(num);//1

a+=b和a=a+b的区别
- byte a=10;
- int b=20;
- a+=b;//不报错
- a=(byte)(a+b);
当一个表达式包含多个运算符时,就需要考虑运算符的优先级,优先级高的运算符先参与运算,优先级低的运算符后参与运算。在实际的开发中,不需要特别去记忆运算符的优先级别,也不要刻意的使用运算符的优先级别,对于不清楚优先级的地方使用小括号辅助进行优先级管理。
