笔者为了面试,回顾下自己java基础,适合有java基础的同学。
Java是什么?
Java就是一门编程语言,其思想是面向对象,对应不同的技JavaSE,JavaEE,JavaME等。从编译原理的角度来说,它属于解释性语言也属于编译行语言。
Java有健壮性,是一种类似c语言,舍弃了c语言中容易出错的指针(以引用取代),有重载继承等特性,增加了回收机制。
解释性与编译性语言
编译型语言:使用编译器一次性将所有源代码编译为一个可执行程序,一次编译可重复执行。代表语言有C、C++、Golang、汇编等
解释性语言:需要对应的解释程序获编译程序对其运行进行翻译,然后在机器上面运行。代表语言有JavaScript、Python、PHP、Shell等。
Java的编译过程大致包括编译,运行,也就决定了Java的特性:跨平台。
其中要理解JDK,JRE,JVM的关系:
JDK(Java开发工具包)包含开发Java程序的工具群(javac.exe,java.exe,javadoc.exe),以及Java程序的运行时环境JRE。
JRE(Java运行环境)包括Jvm,Java各种类库
JVM(虚拟机):一个类似于电脑的运行平台
搭建环境
网上有教程,笔者就不一一赘述了。可以把jdk装在c盘里面,jdk占的内存不大
第一个程序
public class Main {
public static void main(String[] args) {
System.out.println("helloword");
}
}
基本语法
注释
单行和多行注释,文件注射
//这是一个单行注释
/*
这是一个多行注释
*/
/**
*这是一个文件注释
**/
关键字
定义:Java定义的特殊含义的小写单词
关键字可以参考菜鸟教程
https://www.runoob.com/java/java-basic-syntax.html
标识符
对于各种变量,方法和类等要素命名使用的字符串叫做标识符
规则:
- 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始
- 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
- 关键字不能用作标识符
- 标识符是大小写敏感的
- 合法标识符举例:age、$salary、_value、__1_value
- 非法标识符举例:123abc、-salary
变量
变量:是程序最基本的存储单元,包括变量类型,变量名称,存储的值,用来保存数据
/**变量类型:String 变量名称:result 存储的值"helloworld"
*/
String result="helloworld";
注意:必须先声明后使用,只有在作用域{}里面才有效,而且作用域里面有且只有一个相同的变量名
基本数据类型
按照基本数据类型分为,基本数据类型和引用数据类型
基本数据类型
名称 | 大小 | 例子 |
---|---|---|
byte | 1字节=8bit | byte a = 100 |
short | 2字节=16bit | short s = 1000 |
int | 4字节=32bit | int a = 100000 |
long | 8字节=64bit | long a = 100000L |
float | 4字节=32bit | float f1 = 234.5f |
double | 8字节=64bit | double f1 = 12.9867; |
char | 1字符=2字节 | char letter = ‘A’; |
boolean | 1字节 | boolean one = true |
注意:
Java整型常量默认为int,浮点型常量默认为double,声明float时候必须后面加f或者F
基本数据类型之间的运算
除了boolen以外的7种
- 自动类型提升
public static void main(String[] args) {
byte b1=2;
int i1=129;
int i = b1 + i1;
System.out.println(i);
//131
}
当容量小的数据类型与容量大的数据类型做运算时候,结果自动提升为容量大的数据类型。本质上就是小转大。byte、char、short->int->long->float->double
说明:容量表示的数字范围的大小
public static void main(String[] args) {
//A在ASSII字符集表示65
char c1='A';
int i2=c1+1;
System.out.println(i2);
//66
}
- 强制转化类型
public static void main(String[] args) {
double d1=123.5;
//使用()强转
int i1=(int) d1;
System.out.println(i1);
//123
int i2=128;
byte b1=(byte) i2;
System.out.println(b1);
//-128
}
注意:使用()进行强转,可能导致精度损失
基本数据类型与字符串String的运算
String属于引用数据类型,使用" "定义,有且只有使用+进行连接运算,结果依然是String
public static void main(String[] args) {
String str="helloworld";
String str1="";
//char c1='' 编译不通过;
System.out.println(str1);
System.out.println(str);
// helloworld
int i1=100000;
String s = i1 + str;
System.out.println(s);
//100000helloworld
}
关于+连接的练习
public static void main(String[] args) {
char charResult='A';
int intResult=100;
String str="hello";
System.out.println(charResult+intResult+str);
//165hello
System.out.println(charResult+str+intResult);
//Ahello100
System.out.println(charResult+(intResult+str));
//A100hello
System.out.println((charResult+intResult)+str);
//165hello
System.out.println(str+charResult+intResult);
//helloA100
}
public static void main(String[] args) {
System.out.println("* *");
//* *
System.out.println('*'+'\t'+'*');
//93
System.out.println('*'+"\t"+'*');
//* *
System.out.println('*'+'\t'+"*");
//51*
System.out.println('*'+('\t'+"*"));
//* *
}
变量类型
按照变量声明的位置分类,分为成员变量和局部变量
- 成员变量:实例变量(不用 static 修饰)类变量(用 static 修饰。)
- 局部变量:形参(方法,构造器定义的变量),方法局部变量(在方法里面定义),代码局部变量(在代码里面定义)
注意:局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
运算符
用来表示数据的运算、赋值、比较等的特殊符号
- 算术运算符
- 赋值运算符
- 比较运算符
- 位运算符
- 三元预算符
算术预算符
假设i=15,j=2;
符号 | 含义 | 例子 |
---|---|---|
“+” | 加法 | i+j |
“-” | 减法 | i - j |
“*” | 乘法 | i * j |
/ | 除法 | j / i |
% | 取余 | i % j |
++ | 自增 | i++,++i |
– | 自减 | i–,–i |
public static void main(String[] args) {
int i=15;
int j=2;
System.out.println(i+j);
System.out.println(i - j);
System.out.println(i * j);
System.out.println(j / i);
System.out.println(i % j);
System.out.println(i++);
System.out.println(i--);
}
结果:
17
13
30
0
1
15
16
注意:
- %:取模的结果与被模数符号相同
- i++和++i的比较
public static void main(String[] args) {
int i=15;
int i1=i++;
int j=10;
int j1=++j;
System.out.println(i1);
System.out.println(j1);
}
结果
15
11
总结:前++:先增加1,后运算;后++:先运算,后增加1
3. 自增和自减不会改变本身类型
关于自加和自减的练习
public static void main(String[] args) {
int i1=10;
int i2=20;
int i=i1++;
System.out.println("i="+i+","+"i1="+i1);
i=++i;
System.out.println("i="+i+","+"i1="+i1);
i=i2++;
System.out.println("i="+i+","+"i2="+i2);
i=--i;
System.out.println("i="+i+","+"i2="+i2);
}
i=10,i1=11
i=11,i1=11
i=20,i2=21
i=19,i2=21
赋值运算符
使用“=”进行赋值,当两边数据类型不一致时。可以使用自动类型转换金额强制类型转换处理,支持连续赋值,不会改变本身的数据类型
扩展赋值运算符:+=、-=、*=、/=、%=
比较运算符
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a == b = " + (a == b) );
System.out.println("a != b = " + (a != b) );
System.out.println("a > b = " + (a > b) );
System.out.println("a < b = " + (a < b) );
System.out.println("b >= a = " + (b >= a) );
System.out.println("b <= a = " + (b <= a) );
}
a == b = false
a != b = true
a > b = false
a < b = true
b >= a = true
b <= a = false
逻辑运算符
操作都是boolen类型。有&&、||、&、|、!
public static void main(String[] args) {
boolean a=true;
boolean b=false;
System.out.println("a && b = " + (a&&b));
//&&:表示与,相当于并且,结果false
System.out.println("a || b = " + (a||b) );
//||:表示或,相当于或者,结果true
System.out.println("!(a && b) = " + !(a && b));
//!:表示非,相当于取反,结果为结果true
}
注意:&&和& ,||和|的区别
逻辑预算符的练习
public static void main(String[] args) {
boolean x=true;
boolean y=false;
short z=42;
if ((z++==42)&&(y=true)) {
z++;
}
System.out.println("z="+z);
if((x=false)||(++z==45)){
z++;
}
System.out.println("z="+z);
}
//结果为44 46
位运算符
位预算符在实践中开发中用得少,了解即可
https://www.runoob.com/java/java-operators.html
三元运算符
一个类似于if/else结构的运算符
格式:条件表达式?表示式1:表达式2;
注意
- 表达式为true,运算结果为表示式1;为false,运算结果为表达式2;
- 表达式1和表达式2结果必须相同
public static void main(String[] args) {
int i=1;
int j=39;
int max=i>j?i:j;
System.out.println("最大的数为"+max);
//39
}
运算符优选级
优先级如下表
只有单目预算符,三元运算符。赋值运算符从右到左。