文章目录
前言
因为对于天蚕土豆的斗破苍穹印象还是比较深的,
所以就拿主角萧炎来说吧,练气筑基阶段是非常重要的,只有基础打得牢,才能够一路披荆斩棘,越阶战斗!
同理而言,对于刚接触Java 的小伙伴来说,Java基础也就是练气筑基过程,只有打牢基础,才能万层高楼拔地起,任凭风吹雨打不动摇!我虽然在本科期间学习过,但是现在只记得一些零零碎碎的内容,所以在研究生学余时间想系统的学习一遍。
下面就让小曾带你一起学java基础,我们来一起练气筑基!
Java基础
1.1注释、标识符、关键字
注释
相信写过代码的都知道,注释是写给我们程序员自己看的,当项目程序比较复杂的时候,注释也是相当重要的,因此养成注释的好习惯,细节决定成败。
Java中的注释有三种:
单行注释:只能注释当前行,以//开始,直到行结束
多行注释:注释一段文字,以/开始, /结束!
public class HelloWorld {
public static void main(String[] args) {
// 单行注释 ,不影响程序运行
/* 多行注释
当有很多语句需要注释掉,就可以用这种形式。小曾带你学java
*/
System.out.println("hello,world");
}
}
文档注释:用于生产API文档,配合JavaDoc。
【注】文档注释我们现在只作为了解,在学习JavaDoc时候我们会详细给大家说,目前知道有这样的注释就好。
关键字
代表java已经定义好的名称,比如public static class等都是已经定义好的,并赋予了相关的含义,因此我们在命名的时候尽量不要重名。
我们来看看有哪些是Java自己定义好的关键字呢?
虽然看起来有很多,这个上面的关键字我们在后面的学习中都会接触的,期待与上面的关键词的下一次见面吧。
标识符
标识符是指用来标识某个实体的一个符号。
Java 所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
关于 Java 标识符,有以下几点需要注意:
- 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始
- 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
- 不能用关键字作为变量名或方法名。
- 标识符是大小写敏感的
- 合法标识符举例:age、$salary、_value、__1_value
- 非法标识符举例:123abc、-salary、#abc
对于java标识符的命名规则其实还是比较重要的,有时候会出现一些基础面试题里面,还是需要引起重视。
1.2数据类型
1.2.1强弱类型语言
也许有一些小伙伴们不太了解,通过java核心卷上看到,Java是一种强类型语言,意味着必须为每一个变量声明一种类型。
强类型语言
强类型语言也称为强类型定义语言。要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。也就是说,只要一个变量被指定某个数据类型,如果不经过转换,就永远是这个数据类型。
优缺点也很明显:
优点:安全性高,可以有效避免很多错误。
缺点:运行效率相对较慢。
弱类型语言
弱类型语言也称为弱类型定义语言。与强类型定义相反,像vb,php等就属于弱类型语言。可以将字符串’12’和整数3连接成字符串’123’
1.2.2 数据类型
Java的数据类型可以分为两大类:基本类型 和 引用类型
【注:引用数据类型的大小统一为4个字节,记录的是其引用对象的地址!】
下面也可以用表格来表示8中基本数据类型以及所占内存和字节范围。
对于有C语言基础的同学来说,这些基本类型都是老朋友了,是比较熟悉的。
补充:对于有计算机基础的同学可以跳过,对于完全不知道的小白而言,可以了解一下字节的相关内容
位(bit):是计算机 内部数据 储存的最小单位,11001100是一个八位二进制数。 字节(byte):是计算机中 数据处理 的基本单位,习惯上用大写 B 来表示,
1B(byte,字节)= 8bit(位)
字符:是指计算机中使用的字母、数字、字和符号
ASCIIS码:
1个英文字母(不分大小写)= 1个字节的空间
1个中文汉字 = 2个字节的空间
1个ASCII码 = 一个字节
UTF-8编码:
1个英文字符 = 1个字节 英文标点 = 1个字节
1个中文 = 3个字节 中文标点 = 3个字节
Unicode编码:
1个英文字符 = 2个字节 英文标点 = 2个字节 1个中文(含繁体) = 2个字节
中文标点 = 2个字节 1bit表示1位, 1Byte表示一个字节 1B=8b。 1024B=1KB
1024KB=1M 1024M=1G.
那有人会问:电脑的32位和64位的区别是什么呢?
32位操作系统只可以使用32位的cpu,而64位的CPU既可以安装32位操作系统也可以安装64位操作系统。
寻址能力简单点说就是支持的内存大小能力,64位系统最多可以支达128 GB的内存,而32位系统最多只可以支持4G内存。
32位操作系统只可以安装使用32位架构设计的软件,而64位的CPU既可以安装使用32位软件也可以安装使用64位软件。
类型转换
整型、实型(常量)、字符型数据可以混合运算
运算中,不同类型的数据先转化为同一类型,然后进行运算。
转换从低级到高级(根据容量来看)
byte,short,char—> int —> long—> float —> double
数据类型转换必须满足如下规则:
- 不能对boolean类型进行类型转换。
- 不能把对象类型转换成不相关类的对象。
- 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
- 转换过程中可能导致溢出或损失精度
- 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
例子:
int i =128;
byte b = (byte)i; //byte 类型是 8 位,最大值为127。所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。
(int)23.7 == 23;
(int)-45.89f == -45
自动类型转换
自动类型转换:容量小的数据类型可以自动转换为容量大的数据类
byte,short,char—> int —> long—> float —> double
强制类型转换
强制类型转换的语法格式: (type)var ,运算符“()”中的type表示将值var想要转换成的目标数据类
型。 条件是转换的数据类型必须是兼容的。
public static void main(String[] args) {
double x = 3.14;
int nx = (int)x; //值为3,强制将double类型转换成int类型
char c = 'a';
int d = c+1;
System.out.println(d); //98
System.out.println((char)d); //b
}
注意:当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同的值,溢出。
public static void main(String[] args) {
int x = 300;
byte bx = (byte)x; //值为44
System.out.println(bx);
}
1.3 变量、常量
变量
变量是什么:就是可以变化的量!
举个例子:
这就好像我们家里有一个大衣柜,里面有十分多的小格子,我们给格子上贴上标签,放衣服,放鞋子,放手表等等,此时我们知道了哪里该放什么,但是,我们并不知道里面到底放的是什么牌子的鞋子,是衣服还是裤子。那个标签就相当于我们的变量,我们给他起了个名字,但是里面放什么需要我们自己去放。
需要注意的点:
1、Java是一种强类型语言,每个变量都必须声明其类型。
2、Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
基本格式:数据类型 变量名 = 值;
int a, b, c; // 声明三个int型整数:a、 b、c
int d = 3, e = 4, f = 5; // 声明三个整数并赋予初值
byte z = 22; // 声明并初始化 z
String s = "runoob"; // 声明并初始化字符串 s
double pi = 3.14159; // 声明了双精度浮点型变量 pi
char x = 'x'; // 声明变量 x 的值是字符 'x'。
变量作用域
变量根据作用域可划分为三种:
- 类变量(静态变量: static variable):独立于方法之外的变量,用 static 修饰。
- 实例变量(成员变量:member variable):独立于方法之外的变量,不过没有 static 修饰。
- 局部变量(lacal variable):类的方法中的变量。
示例
public class Variable{
static int allClicks=0; // 类变量
String str="hello world"; // 实例变量
public void method(){
int i =0; // 局部变量
}
}
常量
常量(Constant):初始化(initialize)后不能再改变值!不会变动的值。
所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。
final 常量名=值; final double PI=3.14; final String LOVE="hello";
1.4 运算符
Java 语言支持如下运算符:
- 算术运算符: +,-,*,/,%,++,–
- 赋值运算符 =
- 关系运算符: >,<,>=,<=,==,!= instanceof
- 逻辑运算符: &&,||,!
- 位运算符: &,|,^,~ , >>,<<,>>> (了解!!!)
- 条件运算符 ?:
- 扩展赋值运算符:+=,-=,*=,/=
运算符这些方面比较简单,后面遇到了再详细介绍一下。
1.5 控制流程
顺序结构
顺序结构是最简单的算法结构:语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。
选择结构
1、if单选择结构
我们很多时候需要去判断一个东西是否可行,然后我们才去执行,这样一个过程在程序中用if语句来表示:
意义:if语句对条件表达式进行一次测试,若测试为真,则执行下面的语句,否则跳过该语句。
2、if双选择结构
那现在有个需求,公司要收购一个软件,成功了,给人支付100万元,失败了,自己找人开发。这样的需求用一个if就搞不定了,我们需要有两个判断,需要一个双选择结构,所以就有了if-else结构。
3、if多选择结构
循环结构
顺序结构的程序语句只能被执行一次。如果您想要同样的操作执行多次,,就需要使用循环结构。
Java中有三种主要的循环结构:
- while 循环
- do…while 循环
- for 循环
1、while 循环
while( 布尔表达式 ) {
//循环内容
}
【图解】在循环刚开始时,会计算一次“布尔表达式”的值,若条件为真,执行循环体。而对于后来每一次额外的循环,都会在开始前重新计算一次判断是否为真。直到条件不成立,则循环结束。
2、do…while 循环
对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。
do {
//代码语句
}while(布尔表达式);
区别:do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。
注意:布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了。 如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false。
3、For循环
虽然所有循环结构都可以用 while 或者 do…while表示,但 Java 提供了另一种语句 —— for 循环,使一些循环结构变得更加简单。
优点:or循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。
for(初始化; 布尔表达式; 更新) {
//代码语句
}
for 循环用前须知:
- 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语 句。
- 然后,检测布尔表达式的值。如果为true,循环体被执行。如果为false,循环终止,开始执行循 环体后面的语句。
- 执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)。 再次检测布尔表达式。循环执行上面的过程。
public static void main(String[] args) {
int a = 1; //初始化
while(a<=100){ //条件判断
System.out.println(a); //循环体
a+=2; //迭代
}
System.out.println("while循环结束!");
for(int i = 1;i<=100;i++){ //初始化//条件判断 //迭代
System.out.println(i); //循环体
}
System.out.println("for循环结束!");
}
其实也可以看出,for循环在知道循环次数的情况下,简化了代码,提高了可读性。
4、break & continue
在循环语句中,我们如果想要提前跳出循环,那样我们应该怎么办?
不用担心,break & continue 可以给你答案
break 关键字
break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。
break 跳出最里层的循环,并且继续执行该循环下面的语句。
示例:
public static void main(String[] args) {
int i=0;
while (i<100){
i++;
System.out.println(i);
if (i==30){
break;
}
}
}
continue 关键字
continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。
在 for 循环中,continue 语句使程序立即跳转到更新语句。
在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。
public static void main(String[] args) {
int i=0;
while (i<100){
i++;
if (i%10==0){
System.out.println();
continue;
}
System.out.print(i);
}
}
break & continue区别
-
break在任何循环语句的主体部分,均可用break控制循环的流程,break用于强行退出循环,不执行循环中剩余的语句。
-
continue 语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
5、小实例
理论知识就是那么简单,光有理论那并不够的,还是要理论与实践相结合,今天主要讲简单的写一个打印9*9乘法表,对于小伙伴来说,这是比较简单的,下面我就来介绍一下,希望看到的小伙伴可以跟着步伐,一起学习。
打印结果:
思路:使用嵌套for循环
实现主要分三步走
第一步:我们先打印第一列,这个大家应该都会
for (int i = 1; i <= 9; i++) {
System.out.println(1 + "*" + i + "=" + (1 * i));
}
第二步:我们把固定的1再用一个循环包起来
for (int i = 1; i <= 9 ; i++) {
for (int j = 1; j <= 9; j++) {
System.out.println(i + "*" + j + "=" + (i * j));
}
}
第三步:去掉重复项,j<=i
for (int i = 1; i <= 9 ; i++) {
for (int j = 1; j <= i; j++) {
System.out.println(j + "*" + i + "=" + (i * j));
}
}
最终完整代码:
for (int i = 1; i <= 9 ; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + (i * j)+ "\t");
}
System.out.println();
}
总结:遇到问题,要慢慢养成一种如何分析问题、如何切入问题的思维,将一个大的问题抽丝剥茧,分解成若干个小问题,然后再逐一解决。
1.6 总结
上述内容,是java最基本的内容,相当于万地高楼平地起的地基,也是练气筑基的第一阶段,了解这些内容,也仅仅迈出了学习java 的第一步,让我们一起加油,努力,小曾,带你们一起学java
写作不易,欢迎大家支持,关注我即可一起学Java!
目前主要参考的书籍就是Java核心卷,目前自己也在看,就把一些基础内容,觉得重要的记录下来。
对于一些参考视频,主要是看了B站的狂神说java的基础篇,讲的浅显易懂,值得推荐!
https://space.bilibili.com/95256449? ,感兴趣的同学可以去B站看一看