文章目录
详细的java学习路径和教程请看我写的另一篇java小白到大牛的快速直通车
一、基础语法:注释
注释就是我们对所写的代码的解释说明
用我们讲过的输出语句来举例:
package com.duojiao.day01;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
如果作为一个小白,看这段代码是不是一头雾水,但如果我们加上注释
package com.duojiao.day01;
//这是一个输出HelloWorld的方法
public class HelloWorld {
//这是主函数,我们要运行代码必须加上这个主函数
public static void main(String[] args) {
//这段代码的意思是在控制台输出Hello World
System.out.println("Hello World");
}
}
这样看起来是不是清晰多了,包括我们以后在企业中做项目,要尽可能的去写上注释,防止我们后面忘记代码的含义,也方便后续人员对接拿过来我们的代码能够看懂
在java中,注释的方法分为3种:
- 单行注释
- 多行注释
- 文档注释
- 单行注释
顾名思义,就是我们的注释只有1行说明
用法
:开头添加//
快捷键
:选中当前注释 ctrl + /
如上图,就是单行注释的例子 - 多行注释
多行注释用于我们的说明有很多行
用法
:注释开头添加/* ,结尾也要添加/*
快捷键
:选中当前注释 ctrl + shift + /
3.文档注释
文档注释和多行注释一样,用来对多行文字进行说明,不过文档注释可以自动提取到文档说明书当中,这里我们先简单带过,后续教程我们在详细讲解
用法
:注释开头加/** ,结尾加/*
注:注释不会影响代码的运行,他的作用仅仅是对代码作出解释
这里我们运行下代码
可以看到,我们写的注释并没有影响代码的运行,注释也没有显示出来
当我们代码中有注释的时候,我们对其进行编译,编译后的文件就不会再包含注释了,因为注释是给人看的,计算机不需要看注释,为了内存空间和运行效率,编译后注释不会添加
我们可以查看下编译后的代码
进入到我们存放项目的文件夹中
我们发现多出了一个out文件夹,这个out文件就是保存我们编译之后的文件的
当我们再IDEA中右键运行时,他会自动帮我们进行编译并运行
打开out文件并点击production,找到我们的项目,我们会看到里面多了一个.class结尾的文件
因为.class结尾的文件是字节码文件,他的底层就是一堆0和1组成的数字,我们要对他进行反编译
将它直接拖进我们的idea中即可
此时我们可以看到,编译之后的代码不包含注释,所以注释不会影响我们的程序
二、基础语法:字面量
字面量就是我们的数据在程序中的书写格式
常用数据 | 程序中的写法 | 说明 |
---|---|---|
整数 | 333、-54 | 数字在程序中直接写 |
小数 | 18.56、-1.23 | 小数在程序中直接写 |
字符 | ‘A’、‘你’、‘5’ | 字符必须要用英文输入法单引号括起来,有且只能有一个字符 |
字符串 | “ABC”、“你好” | 字符串必须要用双引号引号括起来,内容可有可无 |
布尔值 | true、false | 布尔值只有两个值:true-代表真 false:代表假 |
空值 | null | 代表是空值,后面会详细讲 |
整数:
//整数代码
System.out.println(666);
System.out.println(-52);
小数:
//小数代码
System.out.println(3.14);
字符:
//字符必须要用英文输入法单引号括起来,有且只能有一个字符
System.out.println('a');
System.out.println('8');
//字符中可以加一个空格,表示空字符
System.out.println(' ');
注意:如果字符中不写任何东西,或者多个字符,程序就会报错
字符串:
//字符串必须要用双引号引号括起来,内容可有可无
System.out.print("我爱java");
System.out.println("我");
System.out.println("");
System.out.println(" ");
布尔值:只有两个值:true-代表真 false:代表假
System.out.println(true);
System.out.println(false);
这里介绍一下java中常见的2个特殊字符
- \n 代表换行
- \t 代表一个Tab长度的缩进
我们现在熟知的System.out.println(),他代表着输出并换行,如果不换行则把最后的ln去掉
System.out.print()则表示输出但不换行
System.out.print(1);
System.out.println(2);
运行结果:
我们可以看到,因为第一行代码没有ln,所以不会换行,2就会和1输出在同一行
此时我们添加一个\n并运行
System.out.print(1);
System.out.print("\n");
System.out.println(2);
运行结果:
可以看到,输出的结果换了一行
而如果在代码中加入\t,则会缩进一个Tab长度的空行
System.out.print(1);
System.out.print("\n");
System.out.println("\t2");
运行结果:
三、基础语法:变量
1. 认识变量
变量就是我们计算机用来记住要处理的数据的
如果我要将3个50输出在控制台,不用变量的情况下:
System.out.println(50);
System.out.println(50);
System.out.println(50);
那此时我们想让50变成60,我们就要一行一行的去修改,现在行数较少可能不麻烦,但如果是100行、1000行呢,我们会发现一行一行的修改非常的麻烦和繁琐
此时我们用一个变量来接收这个50,修改数字时我们只需要修改变量的值即可
int a = 50;
System.out.println(a);
System.out.println(a);
System.out.println(a);
运行结果:
int a = 60;
System.out.println(a);
System.out.println(a);
System.out.println(a);
运行结果:
那计算机是如何用变量存储我们的数据呢?
大家知道,我们的数据一般都保存在计算机的硬盘当中,但是硬盘的速度会很慢,所以当我们运行代码时,计算机会将数据从硬盘中取出放在内存中去跑
那么当我们使用变量时,例如 int a = 18,计算机会在内存中开辟一块地址,里面存放着我们的数据18,我们的变量会指向这块变量的地址,当我们使用这个变量时,就会通过内存地址找到数据,取出来进行相应的运算
可以简单理解为变量就是一个盒子上的编码,盒子里装了一个数据,我们使用变量时,会生成一个盒子,那么变量指向着这个盒子的编码,通过编码就能找到盒子里的数据
我们变量保存的数据是可以被替换的
我们这里定义一个整数变量a
int a = 18;
a = 19;
System.out.println(a);
运行结果:
可以看到,输出的结果变成了19,原理其实很简单,当代码运行第一行int a = 18时,会生成一个盒子存着18,我们的变量a指向这个存着18的盒子上的编号,当我们运行到a = 19时,会在生成一个盒子,再让变量a重新指向新的盒子上的编号,我们把这个编号叫做内存地址
变量定义的格式:数据类型 变量名称 = 数据
数据类型:分为4大类8种
java分成这么多类的起初是为了节省计算机的内存的,但随着如今内存的不断变大,数据类型占用的内存可以忽略不计,基本上我们都只用标红的为常用的
当我们要指定一个数据变量,要选相对应的格式来裝取对应的数据
当我们要定义变量裝取整数时:
byte a = 2;
short b = 3;
//常用int
int c = 4;
//注意,long类型的数据后面要加上L(大小写都可以),不然默认是整数类型
long d = 5L;
当我们要定义变量裝取小数时:
float a = 2.1;
//常用double
double b = 3.1;
当我们要定义变量裝取字符型
char a = '中';
char b = 'a';
当我们要定义变量裝取布尔值
boolean a = true;
boolean c = false;
以上8种基本数据类型我们就讲完了
接下来我还要为大家介绍一种特殊的数据类型,它叫做引用数据类型,也是我们今后用的最多的字符串的数据类型:String
当我们要定义变量裝字符串时
String a = "你好啊";
String b = "woaini";
这里提一嘴,String a = "你好啊"中,=号起到的是赋值作用,==号才是比较的作用
2.变量注意事项
-
我们定义什么类型的变量,就要装什么类型的数据
这里可以看到,变量的类型和值不匹配时,会报错 -
变量是有使用范围的,范围是当前所在的大括号内,且同一个范围不允许定义相同名称的变量
我们看到括号里定义了一个int类型的变量a,我们在括号外访问是访问不到的,但是如果反过来,我们在大括号外面定义,里面去访问,是可以的
我们在同一个范围内区定义相同名称变量就会报错
-
定义变量的时候我们可以不赋值,但在使用的时候,我们必须赋值,否则会报错
这里我们定义一个int变量number,我们不赋初始值,程序不会报错
但我们在使用的时候必须要赋值,可以看到,我们使用没有赋值的变量number,程序报错了
3.java中的关键字和标识符
关键字就是java自己用到的一些词,有特殊作用的,比如我们前面看到的public、class、int、double…
注意,关键字我们不能用来做类名、变量名,否则会报错
java中的关键字有很多:
注意,这些关键字我们不用去背,随着我们的使用,我们自然而然的就会记住它
标识符就是我们起的变量名、类名等等
我们在起名的时候,是有一套标准的要求的
- 标识符要求:由数字、字母、下划线(_)和美元符号($)等组成
- 不能以数字开头,不能用关键字作为名字、且是区分大小写的
- 变量起名尽量用英文且有意义,见名知其意、满足驼峰规范的(例如studentNumber),首字母小写,第二个单词首字母大写等
- 类起名建议全用英文且有意义,见名知其意、满足驼峰规范(例如StudentNumber)
四、类型转换
1.计算机存储的底层原理
前面说过,我们计算机存储的方式只有0和1组成的一堆数据,那么这样的数据,我们叫做二进制数据,那么我们的5用二进制来表示是多少呢?这就涉及到了进制之间的互相转换
具体的进制转换文章请点击这里
学完我们就知道,5用二进制表示就是1 0 1,那我们计算机保存5的时候,就是保存的1 0 1么?
其实我们的计算机存储的最小单位是字节(byte,简称B),
而1个字节等于8位(bit,简称b) 1byte = 8bit,简写1B = 8b
所以101在我们计算机中保存时,最少需要8位,也就是前面补5个0
0-0-0-0-0-1-0-1
那我们的字符比如A如何保存在计算机中呢,那么这里我们要知道ASCLL编码表,它规定的现代英语、数字字符、和其它西欧字符对应的数字编号
那么对照表上的数字,当我们保存A的时候,实际上就是保存A相对应的65的二进制形式
在我们代码中想写二进制的数,要在开头加上0B/0b
int i = int i = 0B01100101;
System.out.println(i); //101
八进制的数,以0开头
int i = 0141;
System.out.println(i);
十六进制的数0X/0x开头
int i = 0x61;
System.out.println(i);
2.计算机的数据单位
计算机的最小组成单位是:字节(byte),1B(byte)=8b(bit)
其它数据单位:
- 1B = 8b
- 1KB = 1024B
- 1MB = 1024KB
- 1GB = 1024MB
- 1TB = 1024GB
3.类型转换之自动类型转换
前面我们提到,我们定义了一个什么数据类型就要赋值相同类型的值
但后面我们做开发的时候,往往前端返回的数据是不容易做修改的,那么我们想赋值到我们的变量就要进行类型的转化。
类型的转化分为2种:
- 自动类型转化
- 强制类型转化
自动类型转化是类型范围小的变量,可以直接赋值给类型范围大的变量
前面看到过的这张图片
其中内存的占用就代表着他们的范围,比如byte类型占用1个B(字节)
1个B等于8b(位),这里我们定义变量byte a = 12,那么它在内存中就是
当我们把他赋值给范围比他大的,例如int类型的变量,int类型是4个字节,也就是32位,他会自动在前面补0,直到32位
所以在代码中,我们可以将类型范围小的直接赋值给类型范围大的,他会做自动的类型转换
byte a = 12;
int b = a;
System.out.println(b); //12
当我们写表达式时例如:
byte a = 2;
int b = 3
long c = 4;
a+b+c;
这里a+b+c是什么类型的呢
在我们表达式中,最终的类型结果是由表达式最高类型来决定的
这里面类型最高的就是long类型,因此要用long类型变量来接收
byte a = 2;
int b = 3
long c = 4;
long d = a+b+c;
那我们再来一个
按照我们所讲的,表达式中,最终的类型结果是由表达式最高类型来决定的,那我们用short类型的变量来接为什么会报错呢?
在表达式中,byte、short、char是直接转换成int类型来参与运算的,所以这里我们要用int类型的变量来接收值
4.类型转换之强制类型转换
前面我们讲了小范围转大范围是自动转换的以及他们对应的规则,那我们要是大范围转小范围能不能这么转呢?我们写个代码看一下
可以看到,代码报错了,这是因为byte的范围是-128~127,他会担心你int的数据超过了byte的范围,所以不会进行自动类型的转换,如果我们某个功能需要转换,那么我们就需要强制类型转换
强转的用法:数据类型 变量1 = (数据类型)变量2/数据
int a = 20;
byte b = (byte) a;
这样就能转化成功了,不过需要注意的是,虽然转化成功了,如果大范围类型的数据超过了小范围类型的数据,我们转化的结果会丢失精度,也就是转换完结果不准确
这里可以看到,int类型是4个字节也就是32位,而byte是1个字节8位,当我们强转,会丢弃位数外的数据
所以当范围超过了小类型的数据范围,结果就会丢失精度,所以尽量避免这样的转换
另外注意,浮点数转换为整数,会丢掉小数部分,保留整数部分
double a = 4.52;
int b = (int)a;
System.out.println(b);
运行结果: