大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。
学习java也有段时间了,写篇文章来记录一下学习内容。
说到java不得不提的是java的类加载机制,java是一个依赖于jvm(也就是java的虚拟机)实现跨平台的一个开发语言,java所有的代码都会在jvm里面运行,java在运行中xx.java的源文件会被编译成class后缀文件(字节码文件)才能运行。java类初始化的时候调用java.lang.ClassLoader加载字节码文件。 下面来看一下jdk和jre、jvm的关系示意图。
这里直接来复制一段代码
public class test {
public static void main(String[] args) {
System.out.println("Hello wrorld!");
}
}
先来从第一段代码往下看
public class test {}
这里定义了一个类,这里的类名必须和文件的名字一致,否则会报错
public static void main(String[] args) {}
第二行代码表示是他的主函数,在程序里面的入口点都是main。
System.out.println(“Hello wrorld!”);
第三行代码则是调用System.out.println的方法对屏幕进行打印东西。
java的数据类型分为两大类:
基本数据类型:包括整数、浮点数、字符、布尔
引用数据类型: 包括类、数组、接口
数据类型 | 关键字 |
---|---|
字节型 | byte |
短整型 | short |
整型 | int |
长整型 | long |
单精度浮点型 | float |
双精度浮点型 | double |
字符型 | char |
布尔类型 | boolean |
java里面默认类型:整数是int、浮点数是double。
变量定义的格式包括三要素:数据类型、变量名、数据值。
格式:
数据类型 变量名 = 数据值;
public class test1 {
public static void main(String[] args) {
int a = 1;
float b= 5.5F;
double c = 5.5;
boolean d = true;
char e ='A';
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
}
}
long类型数据加上L表示。
float加上f表示。
定义的变量不赋值则无法使用。
0x04 类型转换
public static void main(String[] args) {
int a =1;
byte b = 2;
int c =a+b;
System.out.println(c);
}
运行成功,运行结果输出3
这可以运行成功是因为在内部进行了自动的类型转换,把b变量的byte类型自动转换成了int类型
转换格式:
数据类型 变量名 = (转换的数据类型) 被转换的变量
int i = (int)1.5
强制类型转换会导致数据精度损失
赋值运算符 | 解释 |
---|---|
= | 赋值 |
+= | 加等于 |
-= | 减等于 |
*= | 乘等于 |
/= | 除等于 |
%= | 取模等于 |
比较运算符 | 解释 |
---|---|
== | 等比两边变量的值 |
< | 对比左边的值是否小于右边的值 |
| 对比左边的值是否大于右边的值 = | 对比左边的值是否大于或等于右边的值 <= | 对比左边的值是否小于或等于右边的值 != | 如果两边的数据不相等结果为true
对于比较运算符结果只会是false或者是ture
逻辑运算符 | 解释 |
---|---|
&& | 两边结果为ture结果则才tue |
|| | 只要一方结果为true,结果都是true |
! | !true 结果为false,!flase结果为true |
至于运算符就不做多的讲解,记录一下,需要用到的时候看看就行。
方法定义格式:
修饰符 返回值类型 方法名(参数列表){ 代码 }
返回值类型:void类型为无类型,所以如果定义返回值类型为void,reurn不需要填写
方法名:为我们定义的方法起名,满足标识符的规范,用来调用方法。
参数列表: 可填写传入参数 参数前面必须携带参数变量类型。
return:方法结束。返回值类型是void,如果在返回值定义其他类型,return返回的结果也必须是返回值类型所填写的类型
public static void main(String[] args) {
show();
}
public static void show(){
System.out.println("方法");
}
定义完方法后,方法是会默认加载的,我们还需要在main方法里面去调用该方法。
方法必须定义在一类中方法外
方法不能定义在另一个方法的里面
一个程序里面必不可少的就是流程控制,流程控制无非就是判断和循环。首先先来看看判断语句。
语法:
if (关系表达式){
语句体;
}else{
语句体;
}
首先会判断该表达式结果为true还是flase,如果是true就执行语句体,如果是false则执行else里面的内容。
public static void main(String[] args) {
int a = 1;
if (a==1){
System.out.println("a:"+a);
}else{
System.out.println("a!=1");
}
}
switch 语句格式:
switch(表达式) {
case 常量值1:
语句体1;
break;
case 常量值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
执行流程:
首先计算出表达式的值,然后和case依次比较,如果有对应的值,则执行相应的语句,执行完成时遇到break结束。最后如果所有的case值都不匹配就会执行default里面的语句。
public static void main(String[] args) {
int weekday = 6;
switch(weekday) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("你输入的数字有误");
break;
}
}
循环语句可以满足在循环条件的情况下,反复执行一段代码。当在达成某个条件的时候必须把循环条件改为flase,让他结束循环,否则就会出现死循环,一直执行下去。
for循环语句格式:
for(初始化表达式;布尔表达式;步进表达式){
循环体;
}
执行流程:
首先初始化一个变量,定义一个表达式和步进表达式,然后循环体执行,如果不满足则继续循环,直到满足布尔表达式的条件则退出循环。
public static void main(String[] args) {
for (int i = 0; i < 20; i++) {
System.out.println("Hello World");
}
}
这里打印了20次,也就是说这循环了20次,循环条件为i小于20,每次执行i就会加1,加到20次就满足了布尔表达式的条件,退出循环。 在这里步进表达式必须要写,否则会陷入死循环。
while循环语句格式:
初始化表达式
while(布尔表达式){
循环体
步进表达式
}
public static void main(String[] args) {
//while循环实现打印10次HelloWorld
//定义初始化变量
int i = 1;
//循环条件<=10
while(i<=10){
System.out.println("HelloWorld");
//步进
i++;
}
}
do-while和while很类似,可以说基本用法都是一样的,但唯一不同的是while如果表达式满足的话就直接不会执行了,而do-while是先执行一遍里面的循环体再判断表达式满不满足条件。
do…while格式:
初始化表达式
do{
循环体
步进表达式
}while(布尔表达式);
public static void main(String[] args) {
int x=1;
do {
System.out.println("HelloWorld");
x++;
}while(x<=10);
}
do…while循环的特点:无条件执行一次循环体,即使我们将循环条件直接写成false,也依然会循环一次。
这里再来说说for循环和while的区别。
控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继 续使用,如果想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消 失,能够提高内存的使用效率。
在已知循环次数的时候使用推荐使用for,循环次数未知的时推荐使用while。
break
使用场景: 终结循环或者是选择结构switch
continue
使用场景:结束本次循环,继续下一次的循环
数组概念:数组就是存储数据成都固定的容器,保证多个数据类型要一致。
容器概念:将多个数据存储到一起,每个数据称为该容器的元素。
方式一格式:
数据存储类型[] 数组名字 = new 数组存储的类型[长度];
数组定义格式详解:
数组存储的数据类型: 创建的数组容器可以存储什么数据类型。
[] : 表示数组。
数组名字:为定义的数组起个变量名,满足标识符规范,可以使用名字操作数组。
new:关键字,创建数组使用的关键字。
数组存储的数据类型: 创建的数组容器可以存储什么数据类型。
[长度]:数组的长度,表示数组容器中可以存储多少个元素
数组有特定长度,长度一旦指定,不可改变。
int[] arr = new int[3];
方式二格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3};
方式三格式:
数据类型[] 数据名 = {元素1,元素2,元素3};
访问数组数据会利用到索引来访问到数组里面的数据,那就来讲讲这个索引吧。
索引: 每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引 (index),可以通过数组的索引访问到数组中的元素。
如果想访问到数据的数据可以在数组变量后面加入中括号,然后里面写入需要索引的值。
数组名[索引]
每个数组都具有长度,而且是固定的。java赋予数值一个属性,可以直接获取数组的长度。
数组名.length
如果想索引到数组的最大值可以直接使用数组名.length-1 获取到,这里之所以减去一是因为从零开始索引的缘故。
在前面也说到过,因为数组的长度一旦定义就无法改变,那么就会出现一些问题,比如索引超出访问,如果索引超出范围的话会爆出空指针异常错误。
遍历数组可以使用for循环进行遍历,获取数组的最大值作为循环条件,然后索引数组的步进数。
public static void main(String[] args) {
int arr[] = {1,20,13,64,45};
for (int i = 0; i < arr.length ; i++) {
System.out.println(arr[i]);
}
}
这样就可以把所有数组的值一一遍历出来了。
数组也可以当作参数进行传递
public static void main(String[] args) {
int[] arr = { 1, 3, 5, 7, 9 };
//调用方法,传递数组
printArray(arr);
} /
*
创建方法,方法接收数组类型的参数
进行数组的遍历
*/
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
方法的参数为基本类型时,传递的是数据值. 方法的参数为引用类型时,传递的是地址值。
基础语法篇更新已完成,后续文章持续更新中。。。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/119959.html原文链接:https://javaforall.cn