文章目录
Java基础知识
第一个Java程序
运行环境:IDEA macOS
在idea中新建一个项目
进入后右键src——>new——>java class
创建了一个demo1的Java 文件
public class demo1{
public static void main(String[] args){
System.out.print("Hello,world!");
}
}
敲完这个代码后,点击绿色的小三角进行编译运行
执行成功后就会发现,下方的控制台出现了一个hello world字样
那么就对于这个应用程序进行分析
首先Java是区分大小写的,如果你将其中的System.out.print(“Hello word”);写成了system.out.print(“Hello word”); 则程序将无法正常运行
对于整个代码进行一个解析(如若看不懂,可以先记下这个专业术语,后面会对于这方面的内容更加深刻的了解)
-
关键字public 被称之为访问修饰符,这些修饰符主要用于控制程序的其他部分对这段代码的访问级别
-
关键字class 表明了Java程序中的全部内容都包含在这个类当中,类是构建所有Java应用程序的构建模块
-
关键字class后面紧跟着类的名字,(类名字就是你创建Java class时取的名字)。对于名字有着严格的要求,名字必须以字母开头,后面可以是字母或者数字,但不能是Java的关键字(比如说public class )
-
运行已编译的程序时(就是当你点击了绿色的小三角之后),Java虚拟机会将从指定类中的main方法开始执行
也就是从public static void main(String [] args)开始执行
注意:
每个Java应用程序中都必须有一个main方法
每个Java应用程序中都必须有一个main方法
每个Java应用程序中都必须有一个main方法
-
System.out.print(“Hello world”);是一个输出语句,在控制台输出显示Hello world,在这里,使用了System.out对象并调用了它的print方法(相当于是调用了函数)
-
在Java中,每个句子的结尾都是以分号作为结尾
注释
和大多数程序设计语言一样,Java的注释不会被执行。
注释分为三类:
-
单行注释 //
-
多行注释。 /**/
花里胡哨的注释:
/*
* _oo0oo_
* o8888888o
* 88" . "88
* (| -_- |)
* 0\ = /0
* ___/`---'\___
* .' \\| |// '.
* / \\||| : |||// \
* / _||||| -:- |||||- \
* | | \\\ - /// | |
* | \_| ''\---/'' |_/ |
* \ .-\__ '-' ___/-. /
* ___'. .' /--.--\ `. .'___
* ."" '< `.___\_<|>_/___.' >' "".
* | | : `- \`.;`\ _ /`;.`/ - ` : | |
* \ \ `_. \_ __\ /__ _/ .-` / /
* =====`-.____`.___ \_____/___.-`___.-'=====
* `=---='
*
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* 佛祖保佑 永不宕机 永无BUG
*/
/*
* ......................................&&.........................
* ....................................&&&..........................
* .................................&&&&............................
* ...............................&&&&..............................
* .............................&&&&&&..............................
* ...........................&&&&&&....&&&..&&&&&&&&&&&&&&&........
* ..................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&..............
* ................&...&&&&&&&&&&&&&&&&&&&&&&&&&&&&.................
* .......................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.........
* ...................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...............
* ..................&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&............
* ...............&&&&&@ &&&&&&&&&&..&&&&&&&&&&&&&&&&&&&...........
* ..............&&&&&&&&&&&&&&&.&&....&&&&&&&&&&&&&..&&&&&.........
* ..........&&&&&&&&&&&&&&&&&&...&.....&&&&&&&&&&&&&...&&&&........
* ........&&&&&&&&&&&&&&&&&&&.........&&&&&&&&&&&&&&&....&&&.......
* .......&&&&&&&&.....................&&&&&&&&&&&&&&&&.....&&......
* ........&&&&&.....................&&&&&&&&&&&&&&&&&&.............
* ..........&...................&&&&&&&&&&&&&&&&&&&&&&&............
* ................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&............
* ..................&&&&&&&&&&&&&&&&&&&&&&&&&&&&..&&&&&............
* ..............&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&....&&&&&............
* ...........&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&......&&&&............
* .........&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.........&&&&............
* .......&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...........&&&&............
* ......&&&&&&&&&&&&&&&&&&&...&&&&&&...............&&&.............
* .....&&&&&&&&&&&&&&&&............................&&..............
* ....&&&&&&&&&&&&&&&.................&&...........................
* ...&&&&&&&&&&&&&&&.....................&&&&......................
* ...&&&&&&&&&&.&&&........................&&&&&...................
* ..&&&&&&&&&&&..&&..........................&&&&&&&...............
* ..&&&&&&&&&&&&...&............&&&.....&&&&...&&&&&&&.............
* ..&&&&&&&&&&&&&.................&&&.....&&&&&&&&&&&&&&...........
* ..&&&&&&&&&&&&&&&&..............&&&&&&&&&&&&&&&&&&&&&&&&.........
* ..&&.&&&&&&&&&&&&&&&&&.........&&&&&&&&&&&&&&&&&&&&&&&&&&&.......
* ...&&..&&&&&&&&&&&&.........&&&&&&&&&&&&&&&&...&&&&&&&&&&&&......
* ....&..&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...........&&&&&&&&.....
* .......&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&..............&&&&&&&....
* .......&&&&&.&&&&&&&&&&&&&&&&&&..&&&&&&&&...&..........&&&&&&....
* ........&&&.....&&&&&&&&&&&&&.....&&&&&&&&&&...........&..&&&&...
* .......&&&........&&&.&&&&&&&&&.....&&&&&.................&&&&...
* .......&&&...............&&&&&&&.......&&&&&&&&............&&&...
* ........&&...................&&&&&&.........................&&&..
* .........&.....................&&&&........................&&....
* ...............................&&&.......................&&......
* ................................&&......................&&.......
* .................................&&..............................
* ..................................&..............................
*/
- 文档注释 可以自动生成文档这种注释是以/**开始,以 */结束
数据类型
基本数据类型:
1.整型
整型用于表示没有小数部分的数值,允许是负数
类型 | 存储要求 | 取值范围 |
---|---|---|
int | 4字节 | -21478483~2147483647 |
short | 2字节 | -32768~32767 |
long | 8字节 | -9223372036854775808~9223372036854775807 |
byte | 1字节 | -128~127 |
常用的是int型
如果数据比较大,则采用long类型
byte和short类型主要用于特定的应用场合,例如:底层文件处理或着需要控制占用存储空间量的大数组
在Java中,整型的范围与运行Java代码的机器无关
这就解决了软件从一个平台移植到另一个平台当中出现的诸多麻烦问题
-
长整型数值有一个后缀L或者l(一般不要小写英文字母L,因为看上去像1,程序可读性会显得略微差劲)
-
十六进制有一个前缀0x(数字0)或者Ox(字母O)
-
八进制有一个前缀0,例如010对应八进制中的8,可以看出八进制的表示法容易让人混淆,建议少使用八进制的常数
对于比较大的数字:百万、千万,我们数那后面的0时都会感到一阵头疼,毕竟0这么多,这要是钱
Java 7 开始,为数字下加入下划线,如1_000_000(一百万),下划线只是为了能够方便读,Java编译器会去除这些下划线
2. 浮点类型
在Java中有两种浮点型
类型 | 存储需求 | 取值范围 |
---|---|---|
float | 4字节 | ±3.40282347E+38F(有效位数为6~7位) |
double | 8字节 | ±1.797693134862631570E+308(有效位数为15位) |
double表示这种类型的数值精度是float类型的两倍,绝大多数情况下采用的是double类型。
float类型的数值都有一个后缀F或f(如,3.14F)
没有后缀F的浮点数默认为double类型
警告⚠️:浮点数值不适合用于无法接受舍入误差的金融计算中,如果在数值计算中不允许有任何舍入误差,就应该使用BigDecimal类
3.char类型
char类型原本用于表示单个字符。
但如今,有些Unicode字符可以用一个char值描述,另外一些Unicode字符则需要两个char值
char类型的字面量值要用单引号括起来,例如,'A’是编码值为65所对应的字符常量。
4. boolean类型
boolean类型有两个值:false和true,判断逻辑条件
整型值和布尔值之间不能进行相互转换
变量
在Java中,每个变量都有一个类型。
声明变量时,变量的类型位于变量名之前
比如:
double salary;
int age;
boolean right;
我们可以通过例子观察到每一个变量声明都是以;结尾
变量名也有严格的命名规则:
变量名必须是一个以字母开头并由字母或数字组成的序列
Java中的字母包含了’A’~ ‘Z’,‘a’~‘z’ ,’ _’’ '$'或在某种语言中表示字母的任何Unicode字符
警告⚠️:Java不能够使用关键字作为变量名
最好是一行就是一个变量,便于后期的维护和可读
变量初始化
声明一个变量之后,必须用赋值语句对变量进行初始化
如果不进行初始化,Java编译器会报错的
对于一个声明过变量进行赋值格式:
变量名 = 值;
int age=14;
在Java中可以将声明变量放在任何地方
常量
在Java中,利用关键字final指示常量
关键字final表示这个变量只能被赋值一次,一旦被赋值后就不可以进行更改
public class demo2{
public static void main(String[] args){
final double salary=1500.5;
final int age=25;
System.out.println("The salary is "+salary+",and the age is "+age );
}
}
在Java中,如果想要一个常量在类中的多个方法中使用,通常叫这些常量为类常量。
一般常用static final设置一个类常量。
示例:
public class demo3{
public static final double pi=3.14;
public static void main(String[] args){
double r=5;
System.out.println("The area of this circle is "+r*r*pi);
}
}
类常量的定义位于main方法的外部
如果一个常量被声明为public,那么其他类的方法也可以使用这个常量
运算符
在Java中,使用算术运算符+ - * /表示加、减、乘、除运算。
当参与/运算的两个操作数都是整数时6,表示整数除法,否则表示为浮点除法;
整数的求余用%来计算,例如15/2等于7,15%2等于1,15.0%2等于7.5
整数被0除会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果
数学函数与常量
在math类,包含了各种各样的数学函数
如果想要计算一个数值的平方,可以使用sqrt方法
public class demo4{
public static void main(String[] args){
double x=4;
double y=Math.sqrt(x);
System.out.println("y");
}
}
小知识
Java中没有幂运算,只能借助Math类中的pow方法。
public class demo5{
public static void main(String[] args){
double x=2;
int a=3;
double y=Math.pow(x,a);
//将x的a次幂赋值给y
System.out.println("The number of "+x +a+"次幂的值为"+y);
}
}
数值之间的转换
实体箭头表示无信息丢失转换,虚箭头表示精度损失
就比如一个较大的整数,包含位数比float类型所表达的位数多
当这个整型数值转换成float类型时,将会得到同样大小的结果,但是失去了一定的精度
关于转换的相关总结:
-
如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型。
-
如果其中一个操作数是float类型,另一个操作数将会转换为float类型。
-
如果其中一个操作数是long类型,另一个操作数将会转换为long类型。
强制类型转换
在必要的时候,int类型的值将会自动地转换为double类型。
但另一方面,有时也需要将double转换成int。
在Java中,允许进行这种数值之间的类型转换。
当然,有可能会丢失一些信息。在这种情况下,需要通过强制类型转换(cast)实现这个操作
强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名
public class demo5{
public static void main(String []args){
double x=9.255;
int y=(int)x;
System.out.println("the x is "+x+"the y is "+y);
}
}
如果想对浮点数进行舍入运算,以便得到最接近的整数(在很多情况下,这种操作更有用),那就需要使用Math.round方法:
double x=9.997;
int y=(int)Math.round(x);
这个时候y是10,调用round方法时,仍然需要使用强制转换类型(int)
结合赋值和运算符
编程讲究的是less is more (少即是多)
在进行运算之时,往往有很多简写的形式
比如:
x=x+4;
x+=4;
//这两者是等价的
自增与自建运算符
i=i+1;
i++;
++i;
//等价的
i=i-1;
i--;
--i;
//++在前,先加再赋值
//++在后,先赋值再加
关系和布尔运算符
Java中检验是否相等,可以用==两个等号,不相等是!=
例如:
int x=2;
int y=2;
x==y;
true
int z=3;
x!=3;
true
此外还有<(小于)、>(大于). <=(小于等于) >=(大于等于)
逻辑运算符
使用&&表示逻辑与运算符
两者都为真,才是true,一者为假,则为false
使用||表示逻辑或运算符
两者中有一个为真,则为true
三元运算符
Java中支持 条件 ?情况1 :情况2 这种格式的三元运算符
当满足条件时,执行情况1
若不满足条件,则执行情况2
例如:
x<y ?x:y
x与y进行比较,返回比较小的那一个
位运算符
处理整型类型时,可以直接对组成整型数值的各个位完成操作
位运算就是直接对整数在内存中的二进制位进行操作
位运算符包括:
符号 | 描述 | 运算规则 |
---|---|---|
& | 与 | 两个位都为1时,结果才为1 |
| | 或 | 两个位都为0时,结果才为0 |
^ | 异或 | 两个位同时为0,相异为1 |
~ | 取反 | 0变1,1变0 |
<< | 左移 | 各二进位全部左移若干位,高位丢弃,低位补0 |
>> | 右移 | 各二进位全部右移动若干位,对于无符号数,高位补0,有符号数,各个编译器处理方式不相同 |
1.按位与运算符(&)
定义:参加运算的两个数据,按二进制位进行"与"运算。
运算规则:
0&0=0 0&1=0 1&0=0 1&1=1
总结:两位同时为1,结果才为1,否则结果为0。
例如:3&5 即 0000 0011& 0000 0101 = 0000 0001,因此 3&5 的值得1。
注意:负数按补码形式参加按位与运算。
2.按位或运算符(|)
定义:参加运算的两个对象,按二进制位进行"或"运算。
运算规则:
0|0=0 0|1=1 1|0=1 1|1=1
总结:参加运算的两个对象只要有一个为1,其值为1。
例如:3|5即 0000 0011| 0000 0101 = 0000 0111,因此,3|5的值得7。
注意:负数按补码形式参加按位或运算。
3.异或运算符(^)
定义:参加运算的两个数据,按二进制位进行"异或"运算。
运算规则:
0^0=0 0^1=1 1^0=1 1^1=0
总结:参加运算的两个对象,如果两个相应位相同为0,相异为1。
4.取反运算符 (~)
定义:参加运算的一个数据,按二进制进行"取反"运算。
运算规则:
~1=0
~0=1
总结:对一个二进制数按位取反,即将0变1,1变0。
5.左移运算符(<<)
定义:将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
设 a=1010 1110,a = a<< 2 将a的二进制位左移2位、右补0,即得a=1011 1000。
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
6.右移运算符(>>)
定义:将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
例如:a=a>>2 将a的二进制位右移2位,左补0 或者 左补1得看被移数是正还是负。
操作数每右移一位,相当于该数除以2。