首先了解下Java的运行机制
以下面代码为例:
- 首先使用javac Hello.java命令,开启Java编译器并进行编译,生成一个.class的字节码文件。
-
使用java Hello命令启动Java虚拟机运行程序(Java虚拟机首先将编译好的字节码文件加载到内存,这个过程被称为
类的加载
,它是由
类加载器
完成的,然后由
虚拟机
(
JVM
)针对加载到内存的Java类进行解析执行,然后就可以看到运行结果了)。
class Hello{
public static void main(String[] args){
System.out.println("HelloWorld");
}
}
一些简单的点就不写了(都有哪些数据类型,语法格式之类的),书上随便翻翻都能找到的就不写了哈。
一、关键字
(1)被Java语言赋予特定含义的单词
(2)特点:
全部小写。
(3)注意事项:
goto和const作为保留字存在。
在使用IDE和高级记事本的时候,关键字会有特殊颜色标记
二、命名规则:
-
组成规则:
A:英文大小写字母
B:数字
C:$和_ -
注意事项:
A:不能以数字开头
B:不能是java中的关键字
C:区分大小写 -
常见的命名规则(见名知意)
-
包 全部小写
单级包:小写
举例:lala,haha
多级包:小写,并用.隔开
举例:cn.itcast.lianxi -
类或者接口
一个单词:首字母大写
举例:Student,Name
多个单词:每个单词首字母大写
举例:HelloWorld,StudentAge -
方法或者变量
一个单词:首字母小写
举例:name,age
多个单词:从第二个单词开始,每个单词首字母大写
举例:studentAge -
常量
全部大写
一个单词:大写
举例:PI
多个单词:大写,并用_隔开
举例:STUDENT_NAME
三、注释
注释分为:
- 单行注释 //
- 多行注释 /* */
- 文档注释 /** */
这里就说一下之前我遇到的一个问题吧
/*
* public static void main
* System.out.println();
*/
// 上下这两种效果是一样的,这一点相信大家肯定通过实验证明了
/*
public static void main
System.out.println();
*/
刚开始我实验发现两个效果一样,我那时也很迷茫不知道为什么好多都采用第一种方法,它不麻烦吗,当时就想会不会还有更深层次的原因。后来看了Java编程思想一书后,才知道根本没有,就是为了好看,
因为在进行编译时/* */之间所有东西都会被忽略,所以并没有什么两样
三、变量
(1)变量的简介
- 什么是变量:变量是内存中装载数据的小盒子,你只能用它来存数据和取数据。在程序的执行过程中,其值在某个范围内可以发生改变的量。
- 一个变量与一个类型相关联,并且只能够存储该特定类型的值。
- 变量的定义格式:
- 数据类型 变量名 = 初始化值
-
数据类型 变量名;
变量名 = 初始化值; - 可以使用逗号隔开声明多个同类型变量。例如:int a = 17, b = 30;(不过这样看起来,代码会显得乱一些)
注意
:”=”在这里不是指等于的意思,指的是
赋值
的意思:就是说把右边的值赋给(存放到)左边,至于Java中的等于后面会说。
(2)变量的类型转换
在程序中,当把一种数据类型赋给另一种数据类型是,需要进行数据类型转换。根据转换的方式不同,可分为两种:自动类型转换和强制类型转换。
-
自动类型转换(隐式类型转换),指的是两种数据类型在转换过程中不需要
显式的声明(强制类型转化)
,要自动类型转换必须要满足两个条件:第一个条件是两种数据相互兼容,第二个条件是目标类型的取值范围大于原来类型的取值范围。
默认转换
- 从小到大
- byte,short,char – int – long – float – double
- byte,short,char之间不相互转换,直接转成int类型参与运算。
例:
// 数据类型都是整数类型,目标类型的取值范围大于原来类型的取值范围
// 程序将byte类型b自动转为int类型
byte b = 6;
int x = b;
输出结果是9
- 强制类型转换(显式类型转换),指的是两种数据类型不兼容或者目标类型小于原类型时,无法隐式转换,就需要用到显示类型转换(当兼容类型向下强制转换时,会出现精度丢失的情况)。
格式:目标数据类型 变量名 = (目标数据类型) (被转换的数据);
int a = 4;
byte b = a;
System.out.println(b);
会报错:可能会损失精度,而在eclipse上面
用上面方法已经无法转换了,但是可以这样:
int b = 8;
// 括号直接声明就可以了,程序正常运行
byte c =(byte) b;
System.out.println(c);
四、运算符
算数运算符
- +(加法):相加运算符两侧的值,如 A + B。
- -(减法):左操作数减去右操作数,如 A – B。
- *(乘法):相乘操作符两侧的值,如 A * B。
- /(除法):左操作数除以右操作数,如 B / A。
- %(取余):左操作数除以右操作数的余数,如 B % A。
- ++(自增): 操作数的值增加1,如 B++ 或 ++B 。
- –(自减):操作数的值减少1,如 B– 或 –B 。
int x = 1 + 1 // 2
int y = 1 - 1 // 0
int a = 1 * 2 // 2
int b = 4 / 2 // 2
int c = 4 % 3 // 1
int i = 1,j = 2;
i++ // 2
j-- // 1
-
+的用法:
- 加法
- 正号
- 字符串连接符
-
++和–的用法
- 它们的作用是自增1或者自减1
-
使用:
单独使用:
放在操作数据的前面和后面效果一样。
a++或者++a效果一样。
参与操作使用:
放在操作数的前面:先自增或者自减,再参与操作
int a = 5;
int b = ++a;
放在操作数的后面:先参与操作,再自增或者自减
int a = 5;
int b = a++;
赋值运算符
- =,+=,-=,*=,/=,%=等
- =:右边赋值给左边
- +=:两边相加赋值给左边
- -=:左边减右边赋值给左边
- *=:两边想乘赋值给左边
- /=:左边除右边(上面的都一样,不过为了简便写了两边)赋值给左边
- %=:左边对右边取余赋值给左边
- =叫做赋值运算符,也是最基本的赋值运算符 int x = 5; 把5赋值给int类型的变量x。
- 扩展赋值运算符的特点 隐含了自动强制转换。(在变量赋值时,当两种类型不兼容或者目标类型取值范围小于原类型时,需要强制进行转换,例如将一个int类型的值赋值给一个byte类型时,就需要强制类型转换,然而在+=,-=,*=,/=,%=这几个运算符中进行赋值时,强制类型会自动转换完成,程序不需要进行任何显式声明)
int a = 18;
byte b = 5;
b += a;
System.out.println(b);// 输出结果23,这样并不需要任何显式声明
比较运算符
- ==,!=,<,>,<=,>=
- 无论运算符两端简单还是复杂最终结果是boolean类型。
- 注意:千万不要把==写成了=
逻辑运算符
- &,|,^,!,&&,||
- 逻辑运算符用于连接boolean类型的式子
- 结论
- &:有false则false
- |:有true则true
-
^:相同则false,不同则true。(^的特殊用法
一个数据针对另一个数据位异或两次,该数不变) - !:非true则false,非false则true
- &&:结果和&是一样的,只不过有短路效果。左边是false,右边不执行。
- ||:结果和|是一样的,只不过有短路效果。左边是true,右边不执行。
短路现象
:就是一旦能够明确无误的确定整个表达式的值,就不会再计算余下部分了。
这次的内容先到这里,有问题的话欢迎评论区提问。