介绍
版本
JavaSE:标准版,用于开发和部署桌面、服务器以及嵌入设备和实时环境中的Java应用程序。Java SE包括用于开发Java Web服务的类库,同时,Java SE为Java EE和Java ME提供了基础。Java SE(Java Platform, Standard Edition,Java标准版)就是基于JDK和JRE,包含支持 Java Web 服务开发的类,并为 Java 企业级开发提供基础。
JavaME:微型版,是一个技术和规范的集合,它为移动设备(包括消费类产品、嵌入式设备、高级移动设备等)提供了基于Java环境的开发与应用平台。Java ME分为两类配置,一类是面向小型移动设备的CLDC(Connected Limited Device Profile),一类是面向功能更强大的移动设备如智能手机和机顶盒,称为CDC(Connected Device Profile CDC)。Java ME有自己的类库,其中CLDC使用的是专用的Java虚拟机叫做JVM。
JavaEE:企业版,是一种利用Java2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。还提供了对 EJB(Enterprise JavaBeans)、Java Servlets API、JSP(Java Server Pages)以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。
面向对象
跨平台 程序编译成字节码文件,通过jvm运行字节码文件
有垃圾回收机制(GC)
环境配置
到官网下载jdk(根据自己需要的选择,以下页面提供java17、19、11、8版本的下载):https://www.oracle.com/java/technologies/downloads
根据自己的系统选择对应的版本,我自己的系统选择Windows x64版本的:
现在的jdk安装一般会自动将环境变量添加上去,保险起见,回顾一下环境变量的添加:
在设置——系统——高级系统设置——环境变量中的系统变量中建新一个变量名为JAVA_HOME,变量值为jdk安装路径的系统变量如:
在环境变量中的PATH中建新(添加):JAVA_HOME\bin
也可以在系统变量的PATH中直接添加安装路径(安装jdk时的默认添加方式):
开发工具
编辑器:
Notepad++
VSCODE
集成开发环境:
Eclipse
JBuilder
IDEA
刚开始敲代码时建议自己一字一句的编辑并且规范代码格式,以熟悉常用代码和养成良好的编辑习惯以便以后读代码、排错、交接等。
变量与标识符
变量
没有固定的值,可变的值,常用非数字的符号来代表。变量的作用在于能够一般化描述指令的方式。
按照所属的数据类型划分:
基本数据类型变量:(八中基本数据类型)
引用数据类型变量:自定义类型
按照被生命的位置划分:
局部变量:方法或语句内部定义的变量,例如循环内定义的变量、方法内定义的变量;
成员变量:方法外部、类的内部定义的变量。
变量的基本数据类型
单位
我们知道,计算机中的数据都是以二进制的形式储存的,二进制中的一位即是1Bit,比如0100就是4Bit,Bit是计算机运算的基础。8位(Bit)是一个字节(Byte),而字节(Byte)是计算机文件大小的基本计算单位。
常见单位换算:
1byte = 8bit
1KB = 1024byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
八种基本数据类型
标识符
java对包、类、方法、参数和变量等要素命名时使用的字符序列成为标识符。
命名规则
- 由字母、数字、下划线(_)和美元符号($)组成
- 不能以数字开头
- 区分大小写
- 长度无限制
- 不能是java中的关键字和保留关键字
命名习惯(规范代码):驼峰命名法(每个单词首字母大写,例如Money、XiaoMing)、见字如意,以单词或单词组合或缩写命名,方便理解代码
命名实例:
合法:vince、DaoGuo、user_name、_userName、$abc_123、小明(可以通过,但强烈不建议使用,直接用拼音都比这强。可能会出现编码问题导致一些列错误)
非法:2UserName、my#Name、Holle world、class
进制
二进制、八进制、十进制、十六进制
2进制 0/1 逢2进1 1 + 1 = 10 11 + 1 = 100
8进制 0-7 逢8进1 7 + 1 = 010
10进制 0-9 逢10进1 9 + 1 = 10 99 + 1 = 100
16进制 0-9,a-f(a相当于10,。。。f相当于15) 逢16进1 f+1 = 0x10
进制转换
一般是十进制、二进制、十六进制之间的转换。
十进制——>二进制
以29.75为例:
整数部分:除2取余,逆序排列
29/2 = 14······1
14/2 = 7 ······0
7/2 = 3······1
3/2 = 1······1
1/2 = 0······1
于是整数部分二进制为11101
小数部分:乘2取整,顺序排列
0.752 = 1.50
0.502 = 1.00
于是小数部分为0.11
29.75(10)= 11101.11(2)
二进制——>十进制
1010.01 = 123 + 022 + 121 + 020 + 02-1 + 12-2 = 8 + 2 + 0.25= 10.25
基本数据类型转换
自动类型转换
容量小的类型可以自动转换成容量大的类型,即数据类型的所占字节的大小。
byte,short,int三者间在计算时会转换成int类型(根据Ascll码表进行转换计算)。
int值转换为float值与long值转换为double值时不需要强制转换,但可能会丢失精度!
强制类型转换
容量大得到类型转换成容量小的数据类型,要加上强制转换符,例:
long n = 100L;
int i = (int)n;
但这样可能会导致精度降低或数据溢出,需小心使用。
boolean类型不能转换成其他任何类型!
类型转换示例
short s = 10;
s = s + 3;
//在s+3时返回的数据类型自动转换成int,然后赋予short类型的s,这样精度可能会有丢失而报错,这时候就要把int类型的结果转换成short类型再赋予s,即
short s = 10;
s = (short)(s + 3);
运算符与优先级
算术运算符
“+”、“-”、“*”(乘)与生活中的用处相同。
“/”:除,针对整数操作,表示取整,例:9/5=1,10/3=3;
“%”:模,取余,例:9/5=4,10/3=1;
“++”:自增,分为前自增后自增,前自增变量先+1,然后再返回变量值,后自增先返回变量值,然后变量+1,例:
int a = 1,b = 2,x = 1,y = 2;
int s ;
s = b-(++a);
//此时a=2,b=2,s=0;
s = y-(x++);
//此时x=2,y=2,s=1;
“–”自减,与自增类同。
赋值运算符
“=”:赋值,例:a = 10,此时a的值即为10;
“+=”:加等于,例:a=1,a+=4,此即相当于a = a + 4,此时a的值为5;
“-=”:减等于,与加等于类同;
“*=”:乘等于,与加等于类同;
“/=”:除等于,与加等于类同;
“%=”:模等于,与加等于类同;
关系运算符
返回结果为boolean类型
“<”,“>”,“<=”,“>=”与日常使用相同。
“”:相等于,例:a=1,则a10结果为false;
“!=”:不等于,例:a=1,则a!=10结果为true;
逻辑运算符
“&”:与,“全真才为真”;
“|”:或,“全假才为假”;
“^”:异或,“不同为假,相同为真”;
“!”:非,“!ture=false”;
“&&”:短路与,从左至右,遇到一个false即返回false,全为true才返回true;
“||”:短路或,从左至右,遇到一个true即返回true,全为false才返回false;
位运算符
“~”:按位取反;
“&”:按位与;
“|”:按位或;
“^”:按位异或;
位移运算符
“<<”:左移,“a<<b”即将二进制形式的a逐位左移b位,最低位空出的b位补0;
“>>”:带符号右移,“a>>b”即将二进制形式的a逐位右移b位,最高位空出的b位补原来的符号位;
“>>>”:无符号右移,“a>>>b”即将二进制形式的a逐位右移b位,最高位空出的b位补0;
三目运算符
“x?y:z”:x为Boolean类型的表达式,若x运算结果为true,则返回y的值,若结果为false则返回z的值。
运算符优先级
注意:在程序中,程序的进行一般都是从上到下,自左向右进行的,在表达式的运算中也是如此
例如:
int a = 3,b = 4,c;
c = a+b-(a++)+a*(--b);
System.out.println("a="+a+",b="+b+",c="+c);
//结果应该是a=4,b=3,c=16
//我们理解时的计算顺序应该是先a+b-,到括号则先计算括号中的a++,先返回a再++,此时a=4,算式到7-3+,即4+
//然后先乘运算a*(--b),乘运算中先进行括号中的--b,先减1再返回值,此时b=3,算式到4+4*3,先算乘即4+12,结果为16
(面试)例题
1、以最快的速度计算8*4的结果:
以上的几种运算中,在计算机中位运算是最快的。
位移的方法是最快的:
int result = 8<<2;
左移算法:位数作为2的次幂与操作数相乘
例:10<<2 = 40
右移算法:操作数除以位移数的二次幂
例:12>>2 = 3
2、将两个数值变量交换位置:
int a = 1,b = 2;
(1)通过第三个变量实现:
int c = a;
a = b;
b = c;
(2)不通过第三个变量
①通过运算
a = a+b;
b = a-b;
a = a - b;
//乘除也可
//不适合大数,可能溢出
②通过表达式
a = a+b-(b=a);
③通过异或(ab不能相同)
a = a^b
b = a^b
a = a^b