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

在起名字时,提高阅读性,要尽量“见名知意”

数据类型

包含基本数据类型与引用数据类型

基本数据类型:数值型(整数类型与浮点类型)、字符型、布尔型

引用数据类型: 类、接口、数组

  1. 整型 byte(1字节-128~127) short(2字节) int(4字节) long(8字节)
  2. 浮点型:float(4字节) double(8字节)
  3. 字符型:char(2字节)
  4. 布尔类型:boolean(一般忽略大小,只有两个值true和false)

变量间的运算

基本数据类型间的运算(7种不包括boolean)

自动类型提升:小容量的变量和大容量做运算结果,用大容量的变量来接受

byte,short,char->int ->long ->float ->double

注意:

  1. 容量指的是表数范围
  2. byte short char 三者之间做运算,三者会先提升为int在做运算,

强制类型转换:自动类型提升的逆过程

小容量的变量和大容量做运算结果,用小容量的变量来接受

格式:强转的类型,

注意:使用强制类型转换可能会损失精度

String(引用数据类型)与基本数据类型(8种)间的运算

  1. String与基本数据类型只能做连接运算
  2. String与基本数据类型做运算结果还是String

java常量的默认类型

  1. java的整型常量默认为int
  2. java的浮点型常量默认为double

运算符

算术运算符 :+(正) -(负) +(加) -(减) * / %(取模) 前++ 后++ 前– 后– +(连接符)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int number = 10 / 4; //2
System.out.println(number);

double dou = 10 / 4; //2.0
dou = (10 * 1.0) / 4; //2.5
dou = 10 / (4 * 1.0);//2.5
dou = (double)10 / 4;//2.5

dou = 10 / 4 * 4; //8.0
dou = 10 * 4 / 4; //10.0 建议:顺序没有影响的情况下,先乘后除
System.out.println(dou);

System.out.println("----------------取模-------------------");

//使用场景 :判断某个数是否能被整除
System.out.println(0 % 2); //0
System.out.println(1 % 2); //1
System.out.println(2 % 2); //0
System.out.println("--------------------------");
//思考:取模结果的正负和谁有关?和被模数有关
System.out.println(-1 % 3); //-1
System.out.println(2 % -3); //2
System.out.println(-5 % -3); //-2
  • 前++后++前–后++区别

后++ :先赋值再运算(自加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
2
3
4
5
6
7
8
9
10
//求两个数的最大值
int a = 10,b = 15;
int maxNumber = (a > b)? a : b;
System.out.println(maxNumber)

//需求 :求三个数的最大值
int aa = 5,bb = 10,cc = 15;
int maxNum = (aa > bb)? aa : bb;
maxNum = (maxNum > cc)? maxNum : cc;
System.out.println("maxNum=" + maxNum);

进制

二进制: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 协议 ,转载请注明出处!