Java_1.基础概念

0. Java相关注意事项

0.1 语言特性

  1. Java区分大小写。
  2. Java是面向对象的程序设计语言,所以所有代码都包含在类中。
  3. Java中的命名不能使用关键字,以及true、false、null、NaN、Infinity、-Infinity等有意义的字面量。
  4. Java是强类型语言,每个变量必须声明它的类型。
  5. 程序的浮点型计算可能存在极小的误差,因为计算机使用二进制无法精确的表示浮点类型的数值。

0.2 Java关键字

关键字 含义
abstract 抽象类或方法
assert 断言
boolean 布尔类型
break 跳出一个switch或循环
byte 8位整型
case switch的一个分支
catch 捕获异常的try块子句
char Unicode字符类型
class 定义一个类类型
const 预留,未使用
continue 进入下一次循环
default switch的缺省子句
do do/while循环中的一部分
double 双精度浮点数类型
else if语句的else子句
enum 枚举类型
extends 定义一个类的父类
final 一个常量,或不能覆盖的方法,不能继承的类
finally try块中总会执行的代码块
float 单精度浮点数类型
for 一个循环类型
goto 预留,未使用
if 条件语句
implements 定义一个类实现的接口
import 导入一个包
instanceof 测试一个对象是否为一个类的实例
int 32位整型
interface 定义一种抽象类型,其中包含由类实现的方法
long 64位整型
native 本地方法
new 创建一个新对象
private (访问限制符)类内部可以访问
protected (访问限制符)类内部、子类及同一个包中的类可以访问
public (访问限制符)所有类都可以访问
return 方法返回
short 16位整型
static 静态,类所有(不属于对象)
strictfp 对浮点数计算使用严格的规则
super 超类的对象或构造函数
swtich 一个选择语句
synchronized 线程锁,保证代码块执行的原子性
this 当前对象的引用或类的构造函数
throw 抛出一个异常
throws 声明一个方法可能抛出异常
transient 标志非永久的数据
try 捕获异常的代码块
void 指示一个方法不返回任何值
volatile 确保一个字段可以由多个线程访问
while 一种循环

对于访问限制符,还有一种包级(即不指定访问限制符),返回是类内部及同一个包中的类可以访问。

0.3 注释

程序中的注释是给程序员阅读的文字,Java中提供三种注释方式。

  1. 行注释,从“//” 开始到行尾。

    int a = 100;//从这里开始是注释的内容。 
    
  2. 块注释,从"/*"开始到"*/"结束。

    /* 里面的内容是注释 */
    /* 这种注释是可以跨行的。
    	多行也没有关系。
    */
    
  3. 自动生成文档的注释,从"/**"开始到"*/"结束。

    /**  Java会位这种注释自动生成文档。
     *   @version 1.01 
     *   @author 作者信息
     */
    

0.4 数的进制

计算机中使用二进制作为数据的表示方法。即用0和1来表示数据。

Java中常用的进制如下。

进制 表示法
十进制 100
二进制 前缀0b或0B,0b100(表示十进制的4)
八进制 前缀0,010(表示十进制的8)
十六进制 前缀0x或0X,0x10(表示十进制的16)

1. Java 程序的基本结构

public class Hello {
    public static void main(String[] args){
        System.out.println("Hello World!");
    } 
}
  1. 首先使用class声明一个名叫Hello的类,这个类用public修饰,所以所有类都可以访问到它。
  2. 然后在类中定义了一个公有静态方法,名叫main,它不返回任何值(void),main方法接收一个String[]类型的参数。
  3. 方法中,使用语句在控制台中打印Hello World! 字符串。
  4. Java虚拟机(JVM)会从指定类中的main方法开始执行。

2. Java中的值

2.1 字面量(Literal)

表示实实在在的值,比如:100、'a'、3.14、"string"、true、false等等。

他们代表着具体的数值、字符串、布尔值。

null是一个字面量,代表空的引用。

NaN表示不是数字,当使用浮点数0.0/0.0或负数的平方根时结果为NaN。

Infinity表示正无穷,使用正数除以0.0时。

-Infinity表示负无穷,使用负数除以0.0时。

public class Hello{
    // 以下所有"="后边的值都是字面量,它们代表具体的值。
    int a = 100;
    char c = 'a';// 字符类型使用单引号
    double d = 3.14;
    float f = 3.14f;// Java默认浮点型字面量为double型,使用f或F后缀表示字面量为float型。
    boolean b = true;
    long l = 1000L;//Java默认整型字面量为int型,使用L后缀表示字面量为long型。
    // 字符串属于类类型,使用双引号。
    String str = "string";
    // 这里是Hello类型的变量。它持有一个空的引用。
    Hello hello = null;
}

2.2 变量(Variable)

2.2.1 变量的声明

// 声明变量的做法:变量类型 变量名 = 初始值;
int a = 10;
// 也可以将声明和赋值分开。如果不给声明的变量赋值,则Java会给这个变量一个默认值。
int a;
a = 10;

不能使用没有初始化的变量,Java编译器会报错(The local variable a may not have been initialized)。

2.2.2 变量的类型

java中的变量有四个种类:基本类型、数组类型、引用类型(类类型)和接口类型。

引用类型和接口类型在面向对象中再说。

这里先介绍Java的基本类型,Java有8种基本类型,如下表。

关键字 类型 类型长度 默认值
byte 整形 -27~27-1 8bit 0
short 整形 -215~215-1 16bit 0
int 整形 -231~231-1 32bit 0
long 整形 -263~263 -1 64bit 0
float 单精度浮点型 32bit 0.0
double 双精度浮点型 64bit 0.0
boolean 布尔型 理论上应该是8bit false
char 字符型 16bit 'u0000'(空字符)

int类型最为常用,大约能表示21亿左右,当需要表示的值大于这个范围时,考虑使用long类型。

char类型使用16位Unicode,范围从\u0000到\Uffff。

2.2.4 数组类型

在类型的基础上添加方括号,就声明了一个对应类型的数组。

数组表示固定长度的同种数据类型的多条记录,索引从0开始。

// 声明了一个int型的数组,同时对数组元素进行了初始化。
int[] arr = new int[]{1,2,3};
// 因为数组十分常用,所以还提供了一种简易的声明方式。
int[] arr = {1,2,3};
// 另外的声明方式,在创建数组的同时必须声明数组的长度。
int[] brr = new int[3];
brr[0] = 1;// 通过索引0访问数组中的第一个数据。
brr[1] = 2;
brr[2] = 3;

无论使用那种方式创建数组,都指明了数组的长度,一旦创建了一个数组,这个数组的长度就是不可变的。

2.2.5 变量的转换

自动类型转换

小范围数据向大范围数据的类型转换,例如int转为long。

java在做两个值的计算时,会将两个量的类型转变为长度较大的变量类型再做计算。

强制类型转换

当大范围数据向小范围数据转换时,因为转换前的长度大于转换后的长度,所以需要显式指定要转换的类型。

byte a = (byte)10;

当然,强制转换有可能会造成数据的精度丢失。

2.3 常量(Constant)

// 当使用final类修饰变量时,该变量被标识为常量,只能对常量赋值一次,否则会报错。
final double PI = 3.14;

常量的变量名通常使用全大写的形式。

2.4 命名规则

2.4.1 类名和接口名

必须以字母开头,后面可以跟字母和数字的任意组合,长度基本没有限制。

标准的命名规范为大驼峰命名法:以大写字母开头的名词,如果名称由多个单词组成,则每个单词的首字母大写。

其中源代码文件名必须与公共类的名字相同,并以.java作为后缀。比如上面Hello类的文件名应该为Hello.java。大小写非常重要

2.4.2 变量名和方法名

必须是以字母开头(字母包括'A~Z','a~z','_','$',在程序中尽量不采用中文作为变量名)并由字母或数字构成的序列。

标准的命名规范为小驼峰命名法:以小写字母开头,如果名称由多个单词组成,则后续的每个单词首字母大写。

3. Java中的语句

在Java中用运算符连接上值,即组成了语句,Java中的每个语句都要用";"结尾

// 以下语句声明了一个int类型的变量a,并把100这个字面量赋给a这个变量。这里"="是赋值运算符,并不表示等于的意思
int a = 100;

Java使用"{"、"}"来将代码块组织在一起。

3.1 运算符

3.1.1 算数运算符

符号 意义
+ 加和
- 减或取负
* 相乘
/
% 取余(取模)
++ 自增
-- 自减

注意事项

  1. 两个整数相除时,做整数除法,结果舍去小数部分,例如:7/3的结果为2,7%3的结果为1。

  2. 两个浮点数除以0,则会得到无穷大或NaN。

  3. 整型相乘时,需要注意结果是否会溢出(超过int型能够表示的极限)。

    long a = 2147483647 * 2;
    /* 结果为-2。虽然a的类型为long,但是在计算时,2147483647和2都是int型,得到的结果也为int型,此时应该将参与计算的任意一个操作数标识为long型。*/
    long a = 2147483647 * 2L;
    
  4. 自增/减可以在变量左右两边存在,当在左边时,先增减再计算;在右边时,先计算再增减。

    // 先增,后算
    int a = 5;
    int b = 6;
    ++a + b;// 结果为12
    a++ + b;// 结果为11
    // 计算结束后,a的值均为6
    

3.1.2位运算符

我们举个例子,比如byte类型的数据标识8位的整数。十进制的13用二进制可以表示为00001101,14可以表示为00001110。

对他们做位运算即将他们按位对齐,再按照对其的位分别进行运算。

​ 00001101

​ 00001110

或----------------

00001101(结果)

符号 意义
& 与运算
| 或运算
^ 异或运算,相同为0,不同为1
按位取反00001010 -> 11110101
<< 左移,00001010 << 2 结果为00101000,相当于乘以22
>> 带符号右移,10001010 >> 2 结果为11100010
>>> 不带符号右移,10001010 >>> 2 结果为10000010,相当于除以22

3.1.3 赋值运算符

符号 意义
= 赋值,将右边的值赋予左边的变量
+= a += 1;等同于a = a + 1;
-=, *=, /=, %= 与+=类似
&=, ^=, |=, <<=, >>=, >>>= 与+=类似,只不过做位运算

3.1.4 比较运算符

运算结果为布尔值。

符号 意义
> 大于
>= 大于等于
< 小于
<= 小于等于
== 等于
!= 不等于

3.1.5 关系运算符

符号 意义
&&
||
!

关系运算符,会进行短路运算,即如果前边的值符合能够最终决定结果的值,就不进行后边表达式的计算。

注意事项

&和|也可以进行关系运算,但是不会对运算进行短路。

3.1.6 三元运算符

布尔表达式 ? 值1: 值2

如果布尔表达式的值为true,则结果为值1,否则为值2。

3.1.7 运算符优先级

优先级 运算符 结合性
1 ()、[]、{} 从左向右
2 !、+、-、~、++、-- 从右向左
3 *、/、% 从左向右
4 +、- 从左向右
5 <<、>>、>>> 从左向右
6 <、<=、>、>=、instanceof 从左向右
7 ==、!= 从左向右
8 & 从左向右
9 ^ 从左向右
10 | 从左向右
11 && 从左向右
12 || 从左向右
13 ?: 从右向左
14 =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= 从右向左

3.2 语句块

Java用大括号来表示语句块。

// 以下为一个语句块,这种形式通常用于方法体、循环体、if判断中以及一些初始化代码块。
{
    int a = 10;
    int b = 20;
    int c = a + b;
}
posted @ 2020-04-27 18:10  MeTwo  阅读(298)  评论(0)    收藏  举报