java基础语法学习
jdk、jre、jvm
jdk:称为java的开发工具,包含了jre和开放工具,可以理解成是.java文件运行在jvm虚拟机上面的一个翻译器。
jre:称为java的运行环境,包含了jvm和java的核心内库(java API)
JVM:就是java虚拟机
其实可以理解成这个结构
程序运行的步骤
1、首先在.java文件里面写代码
比如
//这里面的main()就是主函数,也就是程序的入口点,如果没有这个程序就会报错
public class A{
public static void main(String[] args){
System.out.println("Hello world");
}
}
这个程序里面也有一些细节,首先就是使用public class A,这个public就是规定这个类的名字必须和文件名一样,不然就会报以下的错误
2、使用jdk进行编译
简单理解就是把.java的文件编译成可以让jvm虚拟机运行的文件
javac xxx.java
这个就会在同级目录下面生成一个class文件
这个class文件就能直接运行
3、运行文件
编译好的文件就可以直接运行
//这个就不需要加上后缀,直接运行即可
java XXX
tips:我刚开始使用的是notepad++进行学习,得设置几个地方,第一个就是软件的首选项里面把默认的语言修改成java,然后编码修改成ANSI
java的注释很简单和其他语言差不多
//单行注释
/**/多行注释
/****/文档注释
类型的转换
下面的这个图就是java的数据类型
1、隐式转换
理解:就是小的数据和大的数据进行转化,然后小的数据得先转化为大的数据类型,再运算
//这段代码就是将byte数据类型的数据赋值给int,过程就是a先把自己提升到int类型的数据,然后再赋值给b
public class A{
public static void main(String[] args){
byte a = 4;
int b = a;
System.out.println(b);
}
}
tips:精度损失
简单理解就是把大的数据类型赋值给小的数据类型,小的数据类型接不了,就比如把int类型的数据赋值给byte类型的就会产生精度损失
int a = (int)89.365
这里面a的值就直接就是89,因为后面的是double类型的数据 8个字节,int是4个字节,接不下。
2、强制转换
语法 (类型)数据
比如 a = (int}12.6
数据转换案例
1、隐式转换
public class A{
public static void main(String[] args){
byte a = 3;
byte b = 4;
byte c = a+b;
}
}
这里面就会产生错误
原因:首先明确这个隐式转换的概念就是把小的数据类型和大的数据类型运算,小的数据类型得先变成大的数据类型。这里也有一个特别的知识就是当char byte short int在进行运算的时候,都会将自己提升为int类型,然后再继续进行运行
所以这里错误的原因就是c是byte类型的是1个字节,但是a和b都转换为int了,就是大的数据类型给小的数据类型,然后就必须得进行强制转换。所以得这么修改
public class A{
public static void main(String[] args){
byte a = 3;
byte b = 4;
byte c = byte(a+b); //这里就进行了强制转换
}
}
2、常量优化机制
案例
public class ys2{
public static void main(String[] args){
byte d = 3 + 4;
System.out.println(d);
}
}
这里面的的代码"byte d = 3+4" 就是典型的int数据赋值给byte,但是这段代码不会报错,因为注意,这里面的3和4都是常量而不是变量,之前的案例都是变量进行转换就没有这个优化机制,注意,这里是常量优化机制
优化机制:就是在进行3+4的过程中,在编译的时候就会自动判断这个结果是否在byte的取值范围类有两种情况
1、在范围类:不报错,可运行
2、不在范围内:报错,超过范围
还有一个注意点
1、long num = 123;
==================
2、long num = 123456487961313;
//这里的第一个例子不会报错,这个是int赋值给long类型的数据,属于小给大,直接给,但是第二个就是大给小,已经超过了long的类那些个数据,无法直接给,需要强制转化,直接修改成以下的代码即可
long num = 1234679134676446L
这里粘一个常量的类型
注意:这里的单字符就是使用''单引号进行包裹的,仅仅只能赋值一个字符,字符串才是双引号""
总结
1、jdk包含了jre和jvm,然后jre和jvm和jdk的关系就是编写-->编译-->运行
2、数据类型:注意数据的隐式转换和强制转换,隐式转换就是小给大,小的转换成大的数据类型直接给,强制转换就是大给小无法直接给,得使用(目标类型)需转换数据,进行强制转换。
3、常量:有多种常量,比如单引号和双引号的字符常量,单引号的只能一个字符。
4、常量的优化机制:就是在常量进行运算的时候编译的过程就自动计算结果是否符合赋值的目标类型。
5、重要:与安全相关的东西,jvm虚拟机运行在内存中(这个有可能和内存马有关系),变量就是内存中的存储空间。