Java语言的特点
jdk(java development kit java开发工具包)
jre(java runtime environment java运行环境)
JDK=JRE 开发工具集(例如javac编译工具等))
一、生成helloworld
二、注释(comment)
对第一个Java总结程序
1.Java编程-编译-操作过程
2.在一个Java多个可以在原文件中声明class,但最多只能有一个类声明public的。
3.程序入口是main方法。格式是固定的。
4.输出语句:
5.每行执行语句均为";"结束。
6.编译过程:编译后,将生成一个或多个字节码文件。文件名和字节码文件Java源文件中的类名相同
三、Java的API文档
基本语法-toc" style="margin-left:0px;">四、Java的基本语法
1.关键字和保留字
用于定义流程控制的关键字
定义访问权限修改的关键字
关键词用于定义类、函数、变量修饰符
定义类与类之间关系的关键词
关键词用于定义建立实例和引用实例,判断实例
用于处理异常关键词
用于包的关键字
其他修饰符关键字
字面值用于定义数据类型值
保留字(reservedword)
2.标识符(identifer)
3.变量
变量的使用:
4.Java中定义的数据类型
一.变量按照数据类型分:
整型
浮点型:float\double
字符型:char
布尔型:boolean
字符串类型:string
基本数据类型变量间转换
基本数据类型之间的运算规则
1.自动类型提升:
2.强制类型转换:自动类型提升运算的逆运算。
进制与进制间的转换
二进制的整数有如下三种形式:
4.运算符
算数运算符:
赋值运算符:
比较运算符(关系运算符):
逻辑运算符:
位运算符
三元运算符
5.程序流程控制
运算符的优先级
Java语言的特点
面向对象性:
两个要素:类、对象
三个特征:封装、继承、多态
健壮性:去除了c语言中的指针
自动的垃圾回收机制-->任然会出现内存溢出、内存泄漏
跨平台性:write once, run anywhere:一次编译,到处运行
归功于:JVM
jdk(java development kit java开发工具包)
JDK是提供给Java开发人员使用的,其中包含了Java的开发工具,也包括了JRE。所以安装了JDK就不用再单独安装JRE了
jre(java runtime environment java运行环境)
想要运行Java文件,需要安装JRE
JDK=JRE+开发工具集(例如javac编译工具等)
JRE=JVM+JAVA SE标准库
一、生成helloworld
在下面的代码中,我们在test包下创建了一个class类(helloworld),然后我们在我们的helloworld类中定义了我们的主函数,并且使用打印功能,将helloworld打印出来。
package test;
public class helloworld {
public static void main(String[] args){
System.out.println("Hello,World!");
}
}
二、注释(comment)
用于注释说明解释程序的文字就是注释
Java中的注释类型:
单行注释://
多行注释:/* */
文档注释(Java特有):
/**
@author指定Java程序的作者
@version指定源文件的版本
*/
注释内容可以被JDK提供的工具javadoc所解析,生成一套以网页文件形式体现的该程序的说明文档
单行注释和多行注释的作用:
①对所写的程序进行解释说明,增强可读性。方便自己,方便别人
②可以调试所写的代码
特点:单行注释和多行注释的内容都不参与编译。换句话说,编译后生成的.class结尾的字节码文件中不包含注释掉的信息
多行注释不可以嵌套使用
public class hellojava{
/*单行注释:如下的main方法是程序的入口!
main的格式是固定的!
*/
public static void main(string[] args){
//单行注释:如下的语句表示输出到控制台
system.out.println("hello world!");
}
}
对第一个Java程序进行总结
1.Java程序编写-编译-运行的过程
编写:我们将编写的Java代码保存在以”.Java“结尾的源文件中
编译:使用Java.exe命令编译我们的Java源文件。格式:javac 源文件名.java
运行:使用Java.exe命令解释运行我们的字节码文件。个数:Java 类名
2.在一个Java原文件中可以声明多个class,但是,只能最多有一个类声明为public的。
用于指明这个类的权限大小。
而且要求声明为public的类的类名必须与源文件名相同
3.程序入口是main方法。格式是固定的。
4.输出语句:
#先输出,后换行
system.out.println():
#输出不换行
system.out.print():
5.每一行的执行语句都以";"结束。
6.编译的过程:编译后,会生成一个或多个字节码文件。字节码文件的文件名与Java源文件中的类名相同
三、Java的API文档
API(application programming interface,应用程序编程接口)是Java提供的基本编程接口。
Java语言提供了大量的基础类,因此oracle也为这些基础类提供了相应的API文档,用于告诉开发者如何使用这些类,以及这些类里包含的方法
下载API
Java Downloads | Oracle
四、Java的基本语法
1.关键字和保留字
关键字(keyword)的定义和特点:
定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
特点:关键字中所有字母都为小写
官方地址:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
用于定义数据类型的关键字
class |
interface |
enum |
byte |
short |
int |
long |
float |
double |
char |
boolean |
void |
用于定义流程控制的关键字
if |
else |
switch |
case |
default |
while |
do |
for |
break |
continue |
return |
用于定义访问权限修饰的关键字
private |
protected |
public |
用于定义类,函数,变量修饰符的关键字
abstract |
final |
static |
synchronized |
用于定义类与类之间关系的关键字
extends |
implements |
用于定义建立实例及引用实例,判断实例的关键字
new |
this |
super |
instanceof |
用于处理异常的关键字
try |
catch |
finally |
throw |
throws |
用于包的关键字
package |
import |
其他修饰符关键字
native |
strictfp |
transient |
volatile |
assert |
用于定义数据类型值的字面值
true |
false |
null |
Java保留字:现有的Java版本未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字。
goto/const
2.标识符(identifier)
Java对各种变量、方法和类等要素命名时是哟的字符序列称为标识符
技巧:凡是自己可以起名字的地方都叫标识符
比如:类名、变量名、方法名、接口名、包名……
定义合法标识符的规范:-->如果不遵守如下的规则,编译不通过
由26个英文字母大小写,0-9,_或$组成
数字不可以开头
不可以使用保留字和关键字,但能包含关键字和保留字
Java中严格区分大小写,长度无限制
标识符不能包含空格
Java中的名称命名规范:-->如果不遵守,编译可以通过但建议严格遵守
包含:多单词组成时的所有字母都小写:xxyyzz
类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
注意1:在起名字时,为了提高阅读性,要尽可能有意义,“见名知意”
注意2:Java采用Unicode字符集,因此标志符也可以使用汉字声明,但不建议使用。
3.变量
使用变量注意:
Java中每个变量必须先声明,后使用
使用变量名访问这块区域的数据
变量的作用域:其定义所在的一对{}内
变量只有在其作用域内才有效
同一个作用域内,不能定义重名的变量
变量的使用:
1.Java定义变量的格式:数据类型 变量名=变量值;
2.说明:
①变量必须先声明再使用
②变量都定义在作用域内。在作用域内,它是有效的,出了作用域就无效了
③同一个作用域内不可以声明两个同名的变量名
class VariableTest{
public static void main(String[] args){
//变量的定义
int myAge=12;
//变量的使用
System.out.println(myAge);
//变量的声明
int myNumber;
//变量的赋值
myNumber=1001;
System.out.println(myNumber);
}
}
4.Java中定义的数据类型
一.变量按照数据类型分:
整型:byte\short\int\long
浮点型:float\double
字符型:char
布尔型:boolean
类(class)
接口(interface)
数组(array)
整数类型:byte\short\int\long
整型
Java各整数类型有固定的表述范围和字段长度,不受具体OS的影响,以保证Java程序的可移植性
Java的整型常量通常声明为int类型,除非不足以表示较大的数,才使用long
类型 |
占用存储空间 |
表述范围 |
byte |
1字节=8bit位 |
-128~127 |
short |
2字节 |
-215~215-1 |
int |
4字节 |
-231~231-1(约21亿) |
long |
8字节 |
-263~263-1 |
1.声明long型变量,必须以"l"或"L"结尾
2.通常定义整型变量时用int类型
浮点型:float\double
与整数类型类似,Java浮点类型也有固定的表述范围和字节长度,不受具体操作系统的影响
浮点型常量有两种表示形式:
十进制数形式:如:5.12 512.0f .512(必须要有小数点)
科学计数法形式:如:5.12e 512E2 100E-2
float:单精度,尾数可以精确到7位有效数字。很多情况下,精度很难满足需求。
double:双精度,精度是float的两倍。通常采用此类型
Java的浮点型常量默认为double型,声明float型常量,需要在后面加2'f'或'F'
类型 |
占用存储空间 |
表述范围 |
单精度float |
4字节 |
-3.403E38~3.403E38 |
双精度 |
8字节 |
-1.798E308~1.798E308 |
1.声明float型变量,必须以'f'或'F'结尾
2.通常定义浮点型变量时用double类型
字符型:char
char类型数据用来表示通常意义上”字符“(2字节)
Java中的所有字符都使用Unicode编码,故一个字符可以存储一个字母,一个汉字,或其他书面语的一个字符。
字符型变量的三种表现形式:
字符常量是用单引号('')括起来的单个字符。例如:char c1='a';char c2='中';char c3='9';
java中还允许使用转义字符'\'来将其后的字符转变为特殊字符型常量。
例如:char c3='\n';//'\n'表示换行符
直接使用Unicode值来表示字符型常量:'\uXXX'。其中,XXXX代表一个十六进制常数。如:\u000a表示\n
char类型是可以进行运算的。因为它都有对应的Unicode码
布尔型:boolean
1.只能取两个值之一:true、false
2.常常在条件判断、循环结构中使用
字符串类型:string
string不是基本数据类型,属于引用数据类型
使用方式与基本数据类型一致。例如:string str="abcd"
一个字符串可以串接另一个字符串,也可以直接串接其他类型的数据。例如:
str=str+"xyz";
int n=100;
str=str+n
1.声明string类型变量时,使用一对""
2.string类型可以与八种基本数据类型变量做运算,且运算只能是连接运算:+
3.运算的结果任然是string类型
基本数据类型变量间转换
自动类型转换容量小的类型自动转换成容量大的数据类型。数据类型按容量大小进行排序为
(char ,byte,short)-》int-》long-》float-》double
有多种类型的数据混合运算时,系统首先自动将所有数据类型转换成容量最大的那种数据类型,然后再进行计算
byte,short,char,类型之间不会互相转换,他们三者在计算时首先转换为int类型。
Boolean类型不能与其他数据类型运算。
当把任何基本数据类型的值和字符串(string)进行连接运算时(+),基本数据类型的值将自动转化为字符串(string)类型。
基本数据类型之间的运算规则
前提:这里讨论的只是7种基本数据类型变量之间的运算。不包含Boolean类型的。
1.自动类型提升:
当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型
(byte/short/char)-> int-> long-> float-> double
特别的:当byte、char、short三种类型的变量做运算时,结果为int类型
2.强制类型转换:自动类型提升运算的逆运算。
double d1=12.3;
int i1=(int)d1;
1.需要使用强转符:()
2.注意点:强制类型转换,可能会导致精度损失
说明:此时的容量大小指的是,表示数的范围的大和小。比如:float容量要大于long的容量
基本数据类型与string间转换
进制与进制间的转换
所有数字在计算机底层都是以二级制形式存在的。
对于整数,有四种表示方式:
二进制: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不区分大小写。
计算机不同进制的使用说明:
class VariableTest{
public static void main(String[] args){
int num1=0b110;
int num2=110;
int num3=0127;
int num4=0x110A;
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(num4);
}
}
二进制的整数有如下三种形式:
直接将一个数值转换成二进制数。最高位是符号位
是对原码按位取反,只是最高位(符号位)确定为1.
其反码+1。
计算机以二进制补码的形式保存所有的整数。
正数的原码、反码、补码都相同
负数的补码是其反码+1.
4.运算符
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
算数运算符:
+ |
正号 |
- |
负号 |
+ |
加 |
- |
减 |
* |
乘 |
/ |
除 |
% |
取模(取余),结果的符号和被模数相同。开发中,经常使用%来判断能否被除尽的情况 |
++ |
自增(前),先运算后取值;自增(后),先取值后运算 |
-- |
自减(前),先运算后取值;自减(后),先取值后运算 |
+ |
字符串连接 |
赋值运算符:
符号:=
当”=“两侧的数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
支持连续赋值
扩展赋值运算符:+=,-=,*=,/=,%=
不会改变数据本来的类型
比较运算符(关系运算符):
运算符 |
运算 |
== |
相等于 |
!= |
不等于 |
< |
小于 |
> |
大于 |
<= |
小于等于 |
>= |
大于等于 |
instanceof |
检查是否是类的对象。:"hello" instanceof string true |
比较运算符的结果都是Boolean类型,也就是要么是TRUE,要么是FALSE
逻辑运算符:
&:逻辑与
|:逻辑或
!:逻辑非
&&:短路与
||:短路或
^:逻辑异或(如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。)
a |
b |
a&b |
a&&b |
a|b |
a||b |
!a |
a^b |
true |
true |
true |
true |
true |
true |
false |
false |
true |
false |
false |
false |
true |
true |
false |
true |
false |
true |
false |
false |
true |
true |
true |
true |
false |
false |
false |
false |
false |
false |
true |
false |
区分&与&&
相同点1:&与&&的运算结果相同
相同点2:当符号左边是TRUE时,二者都会执行括号右边的运算
不同点:当符号左边是FALSE时,&继续执行符号右边的运算。&&不再执行符号右边的运算。
区分:|与||
相同点1:|与||的运算结果相同
相同点2:当符号左边是FALSE时,二者都会执行符号右边的运算
不同点3:当符号左边是TRUE时,|继续执行符号右边的运算,而||不再执行右边的运算
开发中推荐使用短路与和短路或
位运算符
运算符 |
运算 |
范例 |
运算符细节 |
<< |
左移 |
3<<2=12-->3*2*2 |
空位补0,被溢出的高位丢弃,空缺位补0. |
>> |
右移 |
3>>1=1-->3/2=1 |
被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1 |
>>> |
无符号右移 |
3>>>1=1-->3/2=1 |
被移位二进制最高位无论是0或者1,空缺位都用0补 |
& |
与运算符 |
6&3=2 |
二进制位进行&运算,只有1&1是结果为1,否则是0 |
| |
或运算符 |
6|3=7 |
二进制位进行|运算,只有0|0是结果为0,否则是1 |
^ |
异或运算 |
6^3=5 |
相同二进制位进行^运算,结果是0;1^1=0,0^0=0;不相同二进制位^运算结果是1.1^0=1,0^1=1 |
~ |
取反运算 |
~6=-7 |
正数取反,各二进制码按补码各位取反;负数取反,各二进制码按补码各位取反 |
位运算符是直接对整数的二进制进行的运算
结论:
1.位运算符操作都是整型的数据
2.<<:在一定范围内,每向左移1位,相当于*2
>>:在一定范围内,每向右移1位,相当于/2
三元运算符
格式:
(条件表达式)?表达式1:表达式2;
条件表达式1为FALSE,运算后的结果是表达式2
条件表达式1位TRUE,运算后的结果是表达式1
表达式1和表达式2位同种类型
三元运算符与if-else的联系与区别:
1)三元运算符可简化if-else语句
2)三元运算符要求必须返回一个结果
3)if后的代码可能有多个语句
4)三元运算符可以嵌套使用
练习:获取三个数中的较大数
class VariableTest{
public static void main(String[] args){
int n1=12;
int n2=30;
int n3=-43;
int max1=(n1>n2)?n1:n2;
int max2=(max1>n3)?max1:n3;
System.out.println("三个数中最大值为:"+max2);
int max3=(n1>n2? n1:n2)>n3?(n1>n2? n1:n2):n3;
System.out.println("三个数中最大值为:"+max3);
}
}
5.程序流程控制
凡是使用三元运算符的地方,都可以改写为if-else
反之,不成立
如果程序既可以使用三元运算符,又可以使用if-else语句结构,那么优先使用三元运算符。因为:简洁、效率高效。
class VariableTest{
public static void main(String[] args){
//改写为if-else:
int m=30;
int n=-90;
if(m>n){
System.out.println("两个数中最大值为:"+m);
}else{
System.out.println("两个数中最大值为:"+n);
}
}
}
运算符的优先级
运算符有不同的优先级、所谓优先级就是表达式运算中的运算顺序。如下表,上一行运算符总优先于下一行
只有单目运算符、三元运算符、赋值运算符是从右向左运算的。
. () {} ; , |
|
R->L |
++ -- ~ !(data type) |
L->R |
* / % |
L->R |
+ - |
L->R |
<< >> >>> |
L->R |
< > <= >= instanceof |
L->R |
== != |
L->R |
& |
L->R |
^ |
L->R |
| |
L->R |
&& |
L->R |
|| |
R->L |
? : |
R->L |
= *= /= %= |
+= -= <<= >>= |
|
>>>= &= ^= |= |