Java(一):基本语法
Java语言版本迭代概述
1995年发布了jdk1.0
jdk1.5以后更名5.0,1.6(6.0)……
javaEE(J2EE):企业级开发
javaSE(J2SE):核心类库+桌面级应用开发
javaME(J2ME):手机软件开发(废弃掉了,被Android所代替)
Java语言的特点
面向对象的:封装性,继承性,多态性
健壮的:垃圾回收机制(GC),去掉c++的指针
跨平台:一次编译到处运行(依赖于JVM)
jdk jre jvm之间的区别与联系
JDK = JRE + 开发工具集(例如Java编译工具等)
JRE = JVM + Java SE 标准类库
- JDK
 
Java Development Kit Java开发工具包
它是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK 是整个Java的核心,包括了Java运行环境、Java工具(例如:编译工具 javac.exe 打包工具 jar.exe)和Java基础类库。
- JRE
 
Java Runtime Environment Java运行时环境
它是Sun的产品。运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。
- JVM
 
Java Virtual Machine Java虚拟机
它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,以便在虚拟机上运行。
它是一个虚构出来的计算机,通过咋十几的计算机上仿真模拟各种计算机功能实现的。JVM有自己完善的硬件架构,例如:处理器、堆栈、寄存器等,还具有相应的指令系统。
因为有了JVM,所以同一个Java程序在三个不同操作系统中都可以执行,这样就实现了Java程序的跨平台性,也称Java具有良好的可移植性。
一个简单的helloworld
创建 :创建一个以”.java”结尾的文件,该文件叫做源文件
编译 :javac 源文件名.java - 生成一个或多个字节码文件 (源文件中有几个类就生成几个字节码文件)
运行 :java 字节码文件名 - 运行程序
说明:
1.以.java结尾的文件叫做源文件,以.class文件结尾的叫做字节码文件
2.一个源文件中可以有多个类,类名不可以相同。
3.java严格区分大小写
4.public 修饰的类的类名必须和源文件名称一致
5.一个源文件中可以有多个类,但是只能有一个类可以被public所修饰。
6.每行代码写完后必须以”;”结尾。
关键字与标识符
- java关键字的使用
 
定义:被java语言赋予了特殊含义,用作专门用途的字符串
特点:关键字中字母都为小写
保留字:java现版本暂未使用但可能以后的版本作为关键字使用
- 标识符的使用
 
标识符:凡是需要自己命名的地方都叫做标识符
由26个英文字母大小写,0-9,_或$组成
数字不可以开头
不可以使用关键字和保留字,但能包含关键字和保留字
Java中严格区分大小写,长度无限制
标识符不能包含空格
包名:多单词组成时所有字母小写:xxxyyyzzz
类名、接口名:多单词组成时,所单词的首字母大写XxxYyyZzz
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
常量名:所字母都大写,多单词时每个单词用下划线连接XXX_YYY_ZZZ
在起名字时,提高阅读性,要尽量“见名知意”
数据类型
包含基本数据类型与引用数据类型
基本数据类型:数值型(整数类型与浮点类型)、字符型、布尔型
引用数据类型: 类、接口、数组
- 整型 byte(1字节-128~127) short(2字节) int(4字节) long(8字节)
 - 浮点型:float(4字节) double(8字节)
 - 字符型:char(2字节)
 - 布尔类型:boolean(一般忽略大小,只有两个值true和false)
 
变量间的运算
基本数据类型间的运算(7种不包括boolean)
自动类型提升:小容量的变量和大容量做运算结果,用大容量的变量来接受
byte,short,char->int ->long ->float ->double
注意:
- 容量指的是表数范围
 - byte short char 三者之间做运算,三者会先提升为int在做运算,
 强制类型转换:自动类型提升的逆过程
小容量的变量和大容量做运算结果,用小容量的变量来接受
格式:强转的类型,
注意:使用强制类型转换可能会损失精度
String(引用数据类型)与基本数据类型(8种)间的运算
- String与基本数据类型只能做连接运算
 - String与基本数据类型做运算结果还是String
 java常量的默认类型
- java的整型常量默认为int
 - java的浮点型常量默认为double
 
运算符
算术运算符 :+(正) -(负) +(加) -(减) * / %(取模) 前++ 后++ 前– 后– +(连接符)
1  |  | 
- 前++后++前–后++区别
 
后++ :先赋值再运算(自加1)
前++ :先运算(自加1)再赋值
后– :先赋值再运算(自减1)
前– :先运算(自减1)再赋值
- 赋值运算
 
赋值运算符 : =
扩展赋值运算符 : += -= *= /= %=
int a = 1;
a += 1; //可以理解成a = a + 1 (但是不等同于)
- question
 
short s = 3;
 s = s+2; ① 编译不通过,因为short和int类型的变量做运算,会先自升提升为int类型
 s += 2; ② 编译会通过,不会改原来的数据类型
- 计较运算符(比较运算的结果为boolean类型)
 
| == | 相等于 | 3==4 | false | 
|---|---|---|---|
| != | 不等于 | 3!=4 | true | 
| < | 小于 | 3<4 | ture | 
| > | 大于 | 3>4 | false | 
| <= | 小于等于 | 3<=4 | false | 
| >= | 大于等于 | 3>=4 | False | 
- 逻辑运算符
 
| & | 逻辑与 | 
|---|---|
| && | 短路与 | 
| | | 逻辑或 | 
| || | 短路或 | 
| ! | 逻辑非 | 
| ^ | 逻辑异或 | 
&和&& : 两边同时为true结果才为true
|和|| : 两边只要有true结果就为true
! : 取反
^ : 相同(运算符两边的boolean类型的值)为false,不同为true
1.逻辑运算符是对boolean类型的值进行运算的
2.逻辑运算符的结果为boolean类型
- 面试题
 
&和&&的区别?(&和&& : 两边同时为true结果才为true)
 &和&& 左边的式子结果为true的时候,右边的式子都执行.(因为判断不出结果)
 &左边的式子结果为false时右边的式子仍然执行。
 &&左边的式子结果为false时右边的式子不再执行(因为根据左边的值就能判断出结果)。
|和||的区别?(|和|| :两边只要有true结果就为true )
 |和|| 左边的式子结果为false的时候,右边的式子都执行.(因为判断不出结果)
 |左边的式子结果为true时右边的式子仍然执行。
 ||左边的式子结果为true时右边的式子不再执行(因为根据左边的值就能判断出结果)。
三元运算符
格式:(条件表达式)表达式1:表达式2;
说明:
 1.条件表达式的结果只能为boolean类型
 2.如果条件表达式的结果为true则执行表达式1,如果条件表达式的结果为false则执行表达式2
 3.表达式1和表达式2的类型必须一样。
 如果表达式1和表达式2可以进行自动类型提升那么也可以。
 例 :double d = (a > b)? 100 : 12.3;
 4.三元运算符可以嵌套使用,但是不建议
 5.三元运算符可以被if所替换。但是反之不成立。如果两者都可以使用的情况下,
 建议使用三元运算符效率高一些。
1  |  | 
进制
二进制:0,1 ,满2进1.以0b或0B开头。
十进制:0-9 ,满10进1.
八进制:0-7 ,满8进1. 以数字0开头表示。
十六进制:0-9及A-F,满16进1. 以0x或0X开头表示。此处的A-F不区分大小写。
如:0x21AF +1= 0X21B0
- 转换
 
二进制 -> 十进制
 1011 => 2的0次方 + 2的1次方 + 2的3次方
 十进制 -> 二进制
 除2取余数。最后将余数倒过来。
 二进制 -> 八进制 二进制 -> 十六进制
位运算符
<< 左移 : 在一定的范围内,原来的数乘以2
>> 右移 : 在一定的范围内,原来的数除以2
- 两者的区别
 
>> 右移:正数的话最高位用0补,负数的话最高位用1补
 >>> 无符号右移 :无论是正数还是负数最高位都是用0补
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!