JavaSE基础

JDK、JRE、JVM

JDK (Java Development Kit):是 Java 语言的软件开发工具包(SDK)。

JRE(Java Runtime Environment,Java运行环境),包含JVM标准实现及Java核心类库。

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

JavaSE基础学习笔记:1.基本语法部分_基本语法


基本语法

注释、标识符、关键字(BAT)

书写注释是一个非常好的习惯,平时写代码一定要注意规范

注释

  • 单行注释 //
    • 可以注释一行文字
  • 多行注释 /**/
    • 可以注释一段文字
  • 文档注释(JavaDoc)/** */
    • 大公司经常用

标识符

标识符规则如下

  • Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。

  • 所有的标识符都应该以字母美元符($)、或者下划线开始

  • 首字母之后可以是字母,美元符,下划线或数字的任何字符组合

  • 不能使用关键字作为变量名或方法名

  • 标识符是大小写敏感的

    合法标识符举例:age、$salary,_value、__1_value

    非法标识符距离:123abc、-salary、#abc

关键字

Java中的关键字有如下表格中这么多

JavaSE基础学习笔记:1.基本语法部分_数据类型_02

具体细节查看:Java关键字及其作用详解


数据类型

Java的数据类型分为两大类

  • 基本数据类型
  • 引用数据类型

基本数据类型

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

数据类型 范围
byte 8位、有符号
short 16 位、有符号
int 32位、有符号
long 0L(64 位、有符号)
float 0.0f(单精度、32位)
double 0.0d(双精度、64 位)
char 'u0000' ~ 'uffff'
boolean false
  • 最大最小值表示方式:封装类.MIN(MAX)_VALUE
  • 面试真题:银行业务少用浮点类型,常用BigDecimal 数学工具类
float f = 0.1f;
double d = 1/10;
system.out.printl(f == d);//false

float f1 = 2311231231231231231231f;
float f2 = f1 + 1;
system.out.printl(f1 == f2);//true	

引用数据类型

  • 对象、数组、类、接口都是引用数据类型。
  • 所有引用类型的默认值都是null。

特殊的转义字符

符号 字符含义
\n 换行 (0x0a)
\r 回车 (0x0d)
\f 换页符(0x0c)
\b 退格 (0x08)
\0 空字符 (0x0)
\s 空格 (0x20)
\t 制表符
" 双引号
' 单引号
\ 反斜杠
\ddd 八进制字符 (ddd)
\uxxxx 16进制Unicode字符 (xxxx)

自动类型转换

整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。

转换从低级到高级。

低  ------------------------------------>  高

byte,short,char—> int —> long—> float —> double 
  • 强制转换(高——低)

(类型)变量名

  • 自动转换(低——高)
  1. 不能进行Boolean类型转换
  2. 不能把对象类型转换为不相干的类型
  3. 把高容量转换到低容量时,强制转换
  4. 转换时可能存在内存溢出,或者精度损失!
//操作比较大的数的时候,注意溢出问题
        int money = 10_0000_0000;//JDK7新特性,数字之间可以用下划线分割
        int year = 20;
        int total1 = money * year;//输出一个负数,计算的时候溢出的
        long total2 = money * year;//先用原始的int类型计算完再转为long类型,所以转换之前已经出错

        //正确做法是在计算前先把一个数的数据类型转化为long类,再计算乘法
        long total3 = money * ((long) year);

常量、变量、作用域

常量

常量在程序运行时是不能被修改的。

在 Java 中使用 final 关键字来修饰常量,声明方式和变量类似:

final double PI = 3.1415927;

变量

Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域

type varName [=value] [{,varName[value]}]
 //数据类型 变量名 = 值;可以使用逗号隔开来声明多个同类型变量。

作用域

  • 类变量(修饰符static):static+数据类型+变量名

    • 可以不初始化
    • 可以在方法中直接调用
  • 实例变量

    • 从属于对象,需要声明不需要初始化
    • 在方法中调用前,需要先将类实例化(新建一个对象)
  • 局部变量

    • 必须声明和初始化值,只在方法内有效
public class Variable{
    static int allClicks=0;//类变量
    String str="hello world";//实例变量
    
    public void method(){
        int i =0;//局部变量
    }
}

运算符

Java的运算符,分为四类:

算数运算符、关系运算符、逻辑运算符、位运算符。

  • 算数运算符(9):+ - * / % -(取反) ~ ++ --
  • 关系运算符(6):== != > >= < <=
  • 逻辑运算符(6):&& || ! ^ & |
  • 位运算符(7):& | ~ ^ >> << >>>

JavaSE基础学习笔记:1.基本语法部分_标识符_03

一、算数运算符

算数运算符操作数必须是数值类型

分为一元运算符二元运算符

因操作数是一个,故称为一元运算符。

运算符 含义 例子
- 改变数值的符号,取反 -x(-1*x)
~ 逐位取反,属于位运算符 ~x
++ 自加1 x++
-- 自减1 x--

数学中的加、减、乘、除等运算。因算术运算符是运算两个操作符,故又称为二元运算符

运算符 含义 例子
+ 加法运算 x+y
- 减法运算 x-y
* 乘法运算 x*y
/ 除法运算 x/y
% 取模运算(求余运算) x%y

二、关系运算符

关系运算符用于比较两个数值之间的大小,其运算结果为一个逻辑类型(boolean布尔类型)的数值。

等于'=='不等于'!='大于'>'大于等于'>='小于'<'小于等于'<='

三、逻辑运算符

逻辑与'&&'逻辑或'||'逻辑非'!'逻辑异或'^'逻辑与'&'逻辑或'|'

两种逻辑与(&&和&)的运算规则基本相同,两种逻辑或(||和|)的运算规则也基本相同。
&和|运算是把逻辑表达式全部计算完,而&&和||运算具有短路计算功能。
对于&来说,如果左侧条件为false,也会计算右侧条件的值,而对于&&来说,如果左侧的条件为false,则不计算右侧的条件,这种现象被称作短路现象。
所谓短路计算,是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止。
对于&&运算来说,只要运算符左端的值为false,则因无论运算符右端的值为true或为false,其最终结果都为false。
所以,系统一旦判断出&&运算符左端的值为false,则系统将终止其后的计算过程;
对于 || 运算来说,只要运算符左端的值为true,则因无论运算符右端的值为true或为false,其最终结果都为true。
所以,系统一旦判断出|| 运算符左端的值为true,则系统将终止其后的计算过程。 

注:异或相同为false,相反则为true。

在程序设计时使用&&和||运算符,不建议使用&和|运算符。

四、位运算符

位运算是以二进制位为单位进行的运算,其操作数和运算结果都是整型值。

位与'&',位或'|',位非'~',位异或'^',右移'>>',左移'<<',0填充的右移'>>>'

位运算的位与'&',位或'|',位非'~',位异或'^'与逻辑运算的相应操作的真值表完全相同,其差别只是位运算操作的操作数和运算结果都是二进制整数,而逻辑运算相应操作的操作数和运算结果都是逻辑值boolean型。

JavaSE基础学习笔记:1.基本语法部分_标识符_04

位运算效率高

  • &:与
  • |:或
  • ^:异或
  • ~:非,取反
  • <<:左移,相当于乘2
  • >>:右移,相当于除以2

面试题:2*8=16,怎样运算最快

答:用位运算最快

0000 0001 1

0000 0010 2

0000 0100 4

0000 1000 8

0001 0000 16

所以把2左移3,就可以得到16

System.out.printlin(2<<3);//输出16

五、赋值运算符与其他运算符的简捷使用方式

  • 赋值运算符

可以与二元算术运算符、逻辑运算符和位运算符组合成简捷运算符,从而可以简化一些常用表达式的书写

  • 条件运算符(三目运算符)

x ? y : z

如果x==true,则返回y,否则返回z

  • 对象运算符instanceof

对象运算符instanceof用来测试一个指定对象是否是指定类(或它的子类)的实例,若是则返回true,否则返回false。

 String s = new String("sa");
        if(s instanceof Object){
            System.out.println("String is object class");
        }