Java是Sun Microsystems于1995年首次发布的一种编程语言和计算平台。开发者:詹姆斯*戈士林
2010 年Oracle公司收购Sun Microsystems,之后由 Oracle 公司负责 Java 的维护和版本升级。
Java 平台已经嵌入了几乎所有的操作系统。这样 Java 程序只编译一次,就可以在各种系统中运行。
从笔记本电脑到数据中心,从游戏机到科学超级计算机,从手机到互联网,Java无处不在!
Java是一门面向对象的编程语言
Java 语言的风格很像 C 语言和 C++语言,是一种纯粹的面向对象语言,它继承了 C++ 语言面向对象的技术核心,但是拋弃了 C++ 的一些缺点,比如说容易引起错误的指针以及多继承等,同时也增加了垃圾回收机制,释放掉不被使用的内存空间,解决了管理内存空间的烦恼。
什么是计算平台?
计算平台是在电脑中运行应用程序(软件)的环境,包括
硬件环境和软件环境。一般系统平台包括一台电脑的硬件体系结构,操作系统,运行时库。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
Java SE(Java Platform Standard Edition,Java 平台标准版)
它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。
Java SE 包含了支持 Java Web 服务开发的类,并为 Java EE 提供基础,如 Java 语言基础、JDBC 操作、I/O 操作、网络通信以及多线程等技术。
Java SE的体系结构图,如下

Java EE(Java Platform Enterprise Edition,Java 平台企业版)
Java EE是在Java SE基础上构建的,它提供Web服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(Service Oriented Architecture,SOA)和 Web 2.0 应用程序。Java ME(Java Platform Micro Edition,Java 平台微型版)
Java ME为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。
JVM
Java 虚拟机(JVM)是运⾏ Java 字节码的虚拟机,JVM 有针对不同系统的特定实现 (Windows,Linux,macOS),⽬的是使⽤相同的字节码,它们都会给出相同的结果。
JRE
Java 运⾏时环境,它是运⾏已编译 Java 程序所需的所有内容的集合,包括 Java 虚拟机 (JVM),Java 类库,java 命令和其他的⼀些基础构件。
JDK
JAVA编译器,它拥有 JRE 所拥有的⼀切,还有编 译器(javac)和⼯具(如 javadoc 和 jdb),可以创建和编译程序,JDK是整个Java的核心。
跨平台:java程序编译为字节码文件.class文件之后,拷到哪个平台的机器上面都能够无差别的运行,这依赖于 java虚拟机。
java程序不是直接运行在CPU上,而是运行在java虚机(简称JVM)上的。

程序运行时,首先会启动 JDK 编译成 字节码文件(.class), 在由 java虚拟机(JVM) 进行解释,执行 字节码文件。
java虚拟机(JVM) 是用各个平台的语言编写的,它能把java字节码文件翻译为相应平台的语言。
利用 java虚拟机(JVM) 可以把Java字节码程序和具体的硬件平台,操作系统环境分割开来。(一次编译,到处运行)
只要安装针对特定平台的 java虚拟机(JVM) ,Java程序就可以运行,而不用考虑当前具体的硬件平台及操作系统环境。

在 Java 中,数据类型只有 四类八种

\u0000(也就是0),最大值是 \uffff(即为65535),该;类型可以存储任何字符。
Hello 与 hello 是不同的,这其实就是 Java 的字符串表示方式MyFirstClassmy.first.packagemyFirstMethod()
运算符是什么?是一些特殊的符号,主要用于数学函数,一些类型的赋值语句和逻辑比较方面。
使用操作符 = 来表示,它的意思是把 = 号右边的值复制给左边,右边的值可以是任何数,变量或者表达式,但左边的值必须是明确的,已经定义的变量。例如 int a = 5。
但是对于对象来说,复制的不是对象的值,而是对象的引用,所以如果说将一个对象复制给另一个对象,实际上是将 一个对象的引用赋值给另一个对象 。
和数学中的数值计算差不多,主要有

算数运算符需要注意的就是优先级问题,当一个表达式中存在多个操作符时,操作符的优先级顺序就决定了计算顺序,最简单的规则就是 先乘除后加减 ,()的优先级最高,没必要记住所有的优先级顺序,不确定的直接使用()即可。
在对一个变量做加 1 或减 1 处理时,可以使用自增运算符 ++ 或自减运算 --。
- int a = 5;
- b = ++a;
- c = a++
注意:
自增/自减只能作用于变量。
++/--在前和后的区别:在前先加后用,在后先用后加。
无论是前缀形式还是后缀形式,自增自减运算符的优先级要高于赋值运算符。
当一条语句中仅有++或--操作时,前缀形式与后缀形式的运算符没有任何区别。
- int a=1;
- int b =1;
- a++;
- ++b;
- System.out.println("a="+a+",b="+b); //输出a=2,b=2
比较运算符用于程序中的变量之间,变量和自变量之间以及其他类型的信息之间的比较。
结果是boolean型。比较运算符共有6个,通常作为判断的依据用于条件语句中。

逻辑运算符主要有三种:与,或,非

&(与):参与运算的两个数据,按二进制位进行 “与” 运算。两位同时为1,结果才为1,否则结果为0。
0&0=0 0&1=0 1&0=0 1&1=1
|(或):参加运算的两个对象,按二进制位进行"或"运算。两个对象只要有一个为1,其值为1。
0|0=0 0|1=1 1|0=1 1|1=1
注意:&,| 的负数按补码形式参加按位与运算。
^(异或):参加运算的两个数据,按二进制位进行"异或"运算。如果两个相应位相同为0,相异为1。
0^0=0 0^1=1 1^0=1 1^1=0
~(取反):参加运算的一个数据,按二进制进行"取反"运算。对一个二进制数按位取反,即将0变1,1变0。
- ~1=0
- ~0=1
移位运算符在程序设计中,是位操作运算符的一种。
移位运算符可以在二进制的基础上对数字进行平移。
按照平移的方向和填充数字的规则分为三种: <<(左移) 、 >>(带符号右移) 和 >>>(无符号右移)。
<<左移
- //左位移后的值计算方法 : a * 2 的 b 次方
- int a = 5; //a的二进制: 101
- int b= 3; //位移位数
- int c= a<//c的二进制: 101000,发现二进制的右边多了三个0
>>带符号右移
- //右位移后的值计算方法 : a / 2 的 b 次方,没有小数
- int a = 50; //a的二进制:110010
- int b= 2; //位移位数
- int c= a>>b; //c的二进制:110,发现二进制的右边少了三个0
>>>无符号右移
它和 >>带符号右移 的功能是将参与运算的对象对应的二进制数右移指定的位数。它们的功能是将参与运算的对象对应的二进制数右移指定的位数。
注意
类似 if...else... 这种操作符,语法为: 条件表达式?表达式1:表达式2 。
问好前面的位置是判断的条件,判断结果为布尔型,为true时调用表达式1,为false时调用表达式2。
Java中的控制流程其实和C一样,在Java中,流程控制会涉及到包括 if-else,while,do-while,for,return,break 以及选择语句 switch。
可以根据不同的条件执行不同的语句,包括 if 条件语句与 switch 多分支语句。
- //if:可以单独判断表达式的结果,表示表达的执行结果
- int a = 10;
- if(a > 10){
- return true;
- }
- return false
-
- //if...else:通常表现为“如果满足某种条件,就进行某种处理,否则就进行另一种处理”
- int a = 10;
- int b = 11;
- if(a >= b){
- System.out.println("a >= b");
- }else{
- System.out.println("a < b");
- }
-
- //if...else if 多分支语句
- int x = 40;
- if(x > 60) {
- System.out.println("x > 60");
- } else if (x > 30) {
- System.out.println("x > 30");
- } else if (x > 0) {
- System.out.println("x > 0");
- } else {
- System.out.println("x <= 0");
- }
注意:if 后的 () 内的表达式必须是 boolean 型的。如果为true,则执行if后的复合语句;如果为false,则执行else后的复合语句。
- //switch 多分支语句:一种比 `if...else if`语句更优雅的使用方式
- switch (week) {
- case 1:
- System.out.println("1");
- break;
- case 2:
- System.out.println("2");
- break;
- case 3:
- System.out.println("3");
- break;
- default:
- System.out.println("No Else");
- break;
- }
在满足一定条件下反复执行某一表达式的操作,直到满足循环语句的要求。主要有 for,do...while,while 。都是利用一个条件来控制是否要继续反复执行这个语句。
- //当布尔值为true的时候,执行下面的表达式,布尔值为false的时候,结束循环,布尔值其实也是一个表达式
- int a = 5;
- //while
- while(a > 3){
- a--;
- }
- //do...while
- do {
- System.out.println("b == " + a);
- a--;
- } while(a == 1);
两者唯一区别
是开发中常用的循环方式。它的形式如下
- //每次迭代前都会测试布尔表达式。
- //如果表达式结果是false,就会执行for语句后面的代码块。
- //每次循环结束,会按照步进的值执行下一次循环。
- for(初始化;布尔表达式;步进){
- 代码块;
- }
逗号操作符
Java里唯一用到逗号操作符的就是 for 循环控制语句。
在表达式的初始化部分,可以使用一系列的逗号分隔的语句;通过逗号操作符,可以在 for 语句内定多个变量,但它们必须具有相同的类型。
- for(int i=1,j=i*2;i<5;i++,j=i*3,j=i*4){
- System.out.println("i="+i+" "+"j="+j);
- }
- //i=1 j=2
- //i=2 j=8
- //i=3 j=12
for语句中的int定义涵盖了i和j,在初始化部分实际上可以拥有任意数量的具有相同类型的变量定义。
在控制表达式中,定义多个变量的能力只限于for循环适用,其他任何选择或迭代语句中都不能使用这种方式。
for-each语句
在 Java JDK 1.5 中还引入了一种更加简洁的,方便对数组和集合进行遍历的方法,即 for-each 语句。
- int array[] = {1,2,3};
- for (int arr : array){
- System.out.println("i="+i+" "+"j="+j);
- }
Java语言中,有三种跳转语句:break,continue 和 return
switch中已经见到了,它是用于终止循环的操作,实际上break语句在 for,do...while,while 循环语句中,用于强行退出当前循环,例如
- for(int i = 0;i < 10;i++){
- if(i == 5){
- break;
- }
- }
该语句也可以放在循环语句中,它与 break 语句具有相反的效果,它的作用是用于执行下次循环,而不是退出当前循环。
- //求1到100的奇数和
- int sum=0;
- for(int i=0;i<=100;i++){
- if(i%2==0){
- continue;
- }
- sum+=i;
- }
return语句作为一个无条件的分支,他不需要判断条件即可发生。
主要用途