本文主要介绍java相关的工具概念,基本程序写法,常见注意事项以及对数据类型与操作符解析。
JDK:java的开发工具集合。
JRE:java程序的运行环境。
JVM:java虚拟机,虚拟机是用底层代码实现的软件,该软件可模拟机器的硬件。
三者关系:JDK包含JRE,JRE包含JVM。
第一个java程序:
public class HelloWorld{
public static void main(String [] args){
System.out.println("hello");
}
}
其中public为访问权限修饰符,可用来修饰变量,方法,类等使其具有不同的访问权限。
class为关键字,用来声明一个类。例如此处HelloWorld就是一个类。
注意:每一个类在编译环节都会生成对应的字节码文件
main可在一个工程中多个文件中创建,当使用idea(编译环境)运行时目前在哪个文件中就运行哪个main方法。
标准的方法定义写法:
【访问修饰符】【static】返回值类型 方法名 (形式参数列表){
方法体;
}
System.out.println(); 为输出语句,输出括号内的内容并换行,这里的println可以替换为别的方法:
println打印数据并换行,为java中最常用的输出语句。
print仅打印数据。
printf使用控制符打印数据。
注意:main方法有形式参数,参数类型为字符串数组。
使用方法:使用javac编译完某文件之后,java 文件名运行该文件时在后面可根若干个由空格隔开的字符串,这些字符串都会被记入main的形式参数中,可以在main中使用该字符串数组打印出各个字符串元素。
在java程序中所有程序都写在类里面。
java中一个文件可以有多个类但是每个文件中只能有一个public修饰的类,也并不是说一个文件中必须要有public修饰的类。
java具有跨平台性:一次编译到处运行指的是使用javac编译某源代码文件后该文件后缀变成class,文件中的代码全部被翻译为字节码(二进制码),在安装了虚拟机的机器上该字节码都可运行,没有阻碍。
常见的错误:
1.源文件名后缀不是java,解决方法:在菜单中将文件扩展名调出之后修改
2.类名与文件名不一致,此处指的是public修饰的类
3.main方法写错
4.方法中语句没有以分号结尾
5.中文格式的括号分号等
6.jdk未完全配置,操作系统不能识别javac,java命令
注释:
注释部分的数据不参与编译运行。
注释有三种方法:
1.单行注释:// 注释内容
2.多行注释:/* 注释内容 */
3.文档注释:/** 注释内容 */ 常用注释内容为方法与类
注意:多行注释不能嵌套使用
标识符:
标识符中可以包含:字母,数字,下划线与美元符号。
注意:标识符不能以数字开头,不能是关键字,并且严格区分大小写。、
命名规则:
局部变量,方法:使用小驼峰命名法(首单词首字母小写,其他单词首字母大写)
其他的如:类等可使用大驼峰命名法命名(单词首字母大写)。
关键字:由java语言提前定义好的,含有特殊含义的标识符或保留字。
部分关键字:
数据类型与变量:
常量:在程序运行过程中值不可改变的量。
字面常量:每一个给出来的数值,字符,字符串等如:10,'a',"asd",ture。
字面常量的分类:
1.字符串常量 2.整型常量
3.浮点数常量 4.字符常量
5.布尔常量 6.空常量
数据类型:分为基本数据类型与引用数据类型
只有基本数据类型具有包装类
数据类型可以用来定义变量的类型。
基本数据类型:
整型:byte,char,short,int,long
浮点型:float,double
布尔类型:boolean(取值只有ture与flase,并且不能隐式与强制类型转换为其他类型)
引用数据类型包括:数组,String,类,接口,枚举等等
基本数据类型表格:
不管在什么样的机器中java程序中类型都是有唯一指定大小的,使得java程序具有跨平台性。
注意:整型与浮点型都是有符号的,没有无符号概念。
注意:整型数据默认为int型,浮点型数据默认为double型。
变量:在程序运行当中可以被修改值的量
可以使用数据类型来定义(并规定)变量的储存空间大小与取值范围。
局部变量没有初始值,必须在使用之前赋值,否则编译期间会检查出并报错。
整型(int):java规定:
不管在什么样的机器中,int整型大小都为4个字节。
2.int没有所谓的无符号整数概念,int可表示正负数。
32个bit位,最高位为符号位,其他位都是数值位。
最大值:2^31-1 最小值:-2^31
int类型在储存时占用四个字节,最上位为符号位,其他(31)位为数值位,由此可以得出int数据范围。
包装类:每个基本数据类型都会对应一个类类型,这个类类型被称为包装类。
int类型的包装类为integer。
Integer.MAN_VALUE表示int类型的最大值,最小值同理。
长整型(long):java规定:
不管在什么样的机器中,long类型都占8个字节。
没有无符号长整型概念。
最大值(Long.MAX_VALUE):2^63-1 最小值:-2^63
在给long类型变量赋值时一般在数值后跟一个L(一般不写小写L,小写l与1不好区分)来说明该值为长整型的数值。
long的包装类类型为Long。
短整型(short):
不管在什么样的机器中,short类型都占2个字节。
没有无符号短整型概念。
最大值(Short.MAX_VALUE):2^15-1 最小值:-2^15
short的包装类类型为Short。
字节型(byte):
不管在什么样的机器中,byte类型都占1个字节。
没有无符号byte型概念。
最大值127,最小值-128
byte的包装类类型为Byte。
注意:在赋值时编译器会自动检查该数值是否超出该字面常量的类型(字面常量有默认类型,或者如a=100L其中的L规定了字面常量100的类型为long类型)的取值范围,超出则报错。
整型提升:
整型提升的发生场景:表达式具有运算符时。
如:byte a=127;
byte b=a+1;其中1默认为整型数据,(a+1)赋给b时a会发生整型提升结果为为整型类型,赋值时结果与变量类型不兼容会报错,需要改为:byte b=(byte)(a+1)
这里的127为字面常量直接赋值给byte时不用强制类型转换。
需要强制类型转换的场景:
直接赋值的时候值超过该变量的取值范围
如:byte a=128; 此时128超出byte的取值范围,必须强制类型转换。
或者 赋值时有不同类型的变量参与赋值
如:int a=1; byte b=a;a与b类型不相等,错误。 正确写法为byte b=(byte)a;
类型的转换:说明你为这次类型转换而可能产生的数值损失或者异常负责。
此时byte取了a+1这个int类型的一个字节的数据,根据循环可知byte此时的值为-128.(取出一个字节的数据后经源反补转换得到的值)
浮点型:
java规定:float大小为4个字节,double大小为8个字节。
float赋值小数时应在数值后面加上f声明。因为浮点型数据默认为double类型。
double的精度更高,故一般使用double而不是float编程。
封装类: float-Float double-Double
浮点数类型尝试用有限的存储空间表示可能无限的小数,所以必定会存在一定的精度误差(用浮点型变量存储0也会有误差),浮点数类型的值是一个近似值,不是精确值。
字符型:
字符本质上是一个整数,所以字符类型赋值时整数,该整数将会转化为对应字符。
不管是Unicode中的什么字符都只占用两个字节。
取值范围:0-65535
C语言使用ASCLL,字符元素有256个
但java使用Unicode字符集,该字符集包含很多语言,如中文,拉丁文等等
一般我们使用时只需要记住'0'-'9','a'-'z','A'-'Z'即可,char类型的包装类为Character。
注意:在使用中文字符的文件后执行javac该文件可能会报错,
若要编译Test.java(该文件中带有中文字符)应写为:javac -encoding UTF-8 Test.java
字符编码:GDK UTF-8等等
布尔型变量:
boolean类型只能有两个取值:ture或者false 没有规定的明确大小,非常特殊。
包装类为Boolean。
类型转换:自动(隐式)类型转换与强制类型转换
自动(隐式)类型转换:数据范围小的数据类型自动转化为数据范围大的类型。
该过程在代码编译时由编译器自动处理,编译器在编译环节将较小的数据类型转化为较大的数据类型。
如上int a在赋值给long b时 a由int类型被自动转换为long类型后进行赋值。
强制(显式)类型转换:
当把范围大的数据类型转化为范围小的就会发生数据截断损失,强制类型转换表示自己承担数据损失的后果。
强制类型转换不一定能成功,如boolean类型不能转换为其他类型。
类型提升:不同类型的数据之间相互运算时,数据类型小的会被提升为数据类型大的类型,结果为大类型。
所有小于4个字节的数据进行运算时会先提升为4个字节的类型(int),然后再参与运算。
字符串类型:
java中String str="hello" 和C语言中的字符串不同,这个字符串结尾没有\0,java没有这种说法。
若字符串两边有+,则该+为连接符,作用为连接两边的内容而不是做加法。
对字符串类变量的用法:
str.length()返回值为字符串中字符个数
str.toUpperCase()返回值为该字符串中小写字母转化为大写字母后的字符串
str.trim()返回值为该字符串去除前导零后的字符串
str.replace("字符串1","字符串2");的返回值为将原字符串中所有字符串1替换为字符串2而得到的字符串。
第一个输出语句中字符串与a结合成新的字符串,之后又与b结合成新字符串
第二个输出语句中(a+b)优先计算,值与前面的字符串结合成新字符串
第三个输出语句中a与b先做加法后与后字符串结合成新字符串
结果:
int数据与String数据相互转换
int转换为String方法:
1.将数值与空字符串连接后赋给新的字符串变量
2.使用方法:String.valueOf(num)
String转换为int方法:
使用方法:Interger.parselnt(str);
运算符:对操作数进行操作时使用的符号,不同运算符作用不同。
表达式:运算符和操作数结合所呈现出来的算式。
常见的数学运算符:+.- * / %
注意:若要使用/进行小数运算,必须将分母或分子先转化为浮点型数据类型,否则结果为整型数据。
并且若除数(右操作数)为0时系统会抛出异常并结束程序。做除法和取模时右操作数不能为0.
余数结果正负号与左操作数的符号一致,做余数操作时可将两边操作数的符号忽略,求完余数后加上符号就行。
取余操作的操作数也可以是浮点数类型,结果也是浮点数类型。
两侧操作数类型不一致时,类型小的会向类型大的提升,结果的类型为大类型。
增量操作符:+=,-=,*=,/=,%=
如:a增量操作符b+1,实质上为:a=a(增量操作)(b+1),操作符右端为一个整体
增量运算符内含强制类型转换,能将结果的类型强转为需要赋值的变量的类型。
关系运算符(比较运算符):<,>,<=,>=,==,!=
结果只会是ture或者false。
逻辑运算符(三种):&&,||,!
逻辑运算符的操作数都应为布尔表达式。
而&&与||又叫短路逻辑运算符
若根据&&或||的左表达式就能知道最终结果则右表达式不执行。
&&结果判定:全真为真。
||结果判定:有真为真。
逻辑非使用格式:!(布尔表达式),布尔表达式有值,!表示与该布尔值相反。
位运算符(四种):&,^,|,~
&按位与:两个数对应的比特位都为1,结果才为1
^按位异或:两个数对应比特位不同则为1,对应位相同为0
|按位或:两个数对应比特位只要有1,结果就是1
~按位取反:把二进制序列中所有0变为1,所有1变为0
移位运算符:
左移:<< 二进制序列整体往左移一位,右端补0 对于正数左移一位一般有乘二效果
右移:>> 二进制序列整体往右移一位,最高位补之前的符号 对于正数右移一位一般有除二效果
无符号右移:>>> 二进制序列整体往右移一位,最高位补0
条件运算符:
条件运算符只有一个即三目运算符
表达式1?表达式2:表达式3
表达式1为ture,结果为表达式2的值,否则为表达式3的值
嵌套使用时 ?与最靠近的:配套结合成整体。
END。