Java语言概述
Java两大核心机制
- java虚拟机(Java Virtual Machine)
- 垃圾回收机制(Garbage Collection)
JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。
JVM 用于运行 Java 应用程序对于不同的平台,有不同的虚拟机。Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”。
垃圾回收:将不再使用的内存空间进行回收。
在 C/C++ 等语言中,由程序员负责回收无用内存。
Java 不需要程序员负责回收无用的内存:它提供一种系统级线程跟踪存储空间的分配情况。并在JVM空闲时,检查并释放那些可被释放的存储空间。
垃圾回收在 Java 程序运行过程中自动进行,程序员无法精确控制和干预。
Java语言的特点
1. 面向对象——基本概念:类、对象;三大特性:封装、继承、多态
2. 健壮性
3. 跨平台向——Java虚拟机
JDK和JRE
IDE(Integrated Development Environment,集成开发环境)
一个 Java 源文件中最多只能有一个 public 类。
Java 语言严格区分大小写。
Java中的注释类型:
单行注释//注释文字
多行注释 /* 注释文字 */
文档注释(java 特有)
单行和多行注释,被注释的文字,不会被JVM(java虚拟机)解释执行。
多行注释里面不允许有多行注释嵌套
Java 的API文档
API (Application Programming Interface,应用程序编程接口)是 Java 提供的基本编程接口。
Java基本语法
关键字
关键字中所有字母都为小写
标识符
凡是可以自己命名的都叫标识符
规则
由26个英文字母大小写,数字:0-9 ,_或 $ 组成
数字不可以开头。
不可以使用关键字和保留字,但能包含关键字和保留字。
Java中严格区分大小写,长度无限制。
标识符不能包含空格。
名称命名规范
包名:多单词组成时所有字母都小写xxxyyyzzz
类名接口名:多单词组成时,所有单词的首字母大写XxxYyyZzz
变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写xxxYyyZzz
常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
变量
变量的概念:
内存中的一个存储区域
该区域有自己的名称(变量名)和类型(数据类型)
Java中每个变量必须先声明,后使用
该区域的数据可以在同一类型范围内不断变化
定义变量的格式:数据类型 变量名 = 初始化值
Java是强类型语言,每个变量必须先声明类型,后使用.
变量的分类
按被声明的位置划分:
1. 成员变量:方法外部、类的内部定义的变量
2. 局部变量:方法或语句块内部定义的变量
按所属的数据类型划分:
1. 基本数据类型变量
数值型(整数类型(字节型byte、short、int、long)、浮点类型(float(4字节f)、double)、字符型(char)、布尔型(boolean)
2. 引用数据类型变量
类、接口、数组
使用变量注意
变量的作用域:一对{ }之间有效
声明类中成员变量会自动赋值为0或者null,局部变量不会自动初始化
字符类型:char
字符型常量的三种表现形式:
1. 字符常量——用单引号(‘ ’)括起来的单个字符,涵盖世界上所有书面语的字符,例如:char c1 = ‘a’; char c2 = ‘中’; char c3 = ‘9’;
2. 转义字符——用‘\’来将其后的字符转变为特殊字符型常量。例如:char c3 = ‘\n’; – ‘\n’表示换行符
3. 直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表一个十六进制整数。如:\u000a 表示 \n。
char 类型是可以进行运算的。因为它都对应有 Unicode 值。
布尔类型:boolean
适于逻辑运算,一般用于程序流程控制:条件控制语句;循环控制语句;
只允许取值true和false,不可以0或非 0 的整数替代
基本数据类型转换
自动类型转换:
容量小的类型自动转换为容量大的数据类型。
【多种类型的数据混合运算】时,系统首先自动将【所有数据转换成容量最大的那种数据类型】,然后再进行计算。
byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
任何基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型。
强制类型转换
将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符(()),但可能造成精度降低或溢出
字符串不能直接转换为基本类型,通过包装类的方法实现
String a="43";
int a=Integer.parseInt(a);
boolean类型不可以转换为其它的数据类型。
进制
原码:直接将一个数值换成二进制数。
反码:是对原码按位取反,只是最高位(符号位)保持不变。
计算机以【补码】的形式保存所有的整数。
正数的补码与其原码相同;负数的补码是在其反码的末位加1
运算符
算术运算符
赋值运算符
比较运算符(关系运算符)
逻辑运算符
位运算符
三元运算符
算术运算符的注意问题
如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。 但被模数是负数就另当别论。
对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。5/2=2 5/2.0=2.5
+除字符串相加功能外,还能把非字符串转换成 字符串
System.out.println("5+5="+5+5);//结果是5+5=55
System.out.println("5+5="+(5+5));//结果是5+5=10
比较运算符的注意问题
注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。
注2:比较运算符“==”不能误写成“=” 。
逻辑运算符
逻辑运算符用于连接布尔型表达式,在Java中不可以写成
3<x<6,应该写成x>3 && x<6 。
“& |”和“&& ||”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边已经可以判断结果,右边不会计算
位运算符
<< 左移 ——被移除的高位丢弃,空缺位补0。
>> 右移 ——被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1。
>>> 无符号右移 ——被移位二进制最高位无论是0或者是1,空缺位都用0补。
&(与)|(或)^(异或)
三元运算符
格式:
(条件表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
判断语句和循环语句
if(布尔表达式){
语句或语句块;
}
if(布尔表达式) {
语句或语句块;
}
else if(布尔表达式){
语句或语句块;
}else {
语句或语句块;
}
switch(表达式){
case 常量1:
语句1;
break;
… …
case 常量N:
语句N;
break;
[default:
语句;
break;]
}
switch(表达式)中表达式的返回值必须是下述几种类型之一:int, byte, char, short, 枚举, 字符串;
case子句中的值必须是【常量】,且所有case子句中的值应是【不同】的;
default子句是任选的;
break语句跳出switch语句块;
循环语句功能——在循环条件满足的情况下,反复执行特定代码
for循环
for (初始化表达式; 布尔值测试表达式; 更改表达式){
语句或语句块;
}
while 循环语句
[初始化语句]
while( 布尔值测试表达式){
语句或语句块;
[更改语句;]
}
do/while 循环语句
[初始化语句]
do{
语句或语句块;
[更改语句;]
}while(布尔值测试表达式);
特殊
【break】:用于终止【switch语句】和【循环】语句块的执行,跳出当前【循环】
在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块
label1: { ……
label2: { ……
label3: { ……
break label2;
……
}
}
}
【continue】
跳过某个【循环】语句块的【一次执行 】
出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环
注意
break只能用于switch语句和循环语句中。
continue 只能用于循环语句中。
break和continue之后不能有其他的语句,因为程序永远不会执行break 和 continue之后的语句。