Java基础巩固
Posted 过气老学长
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础巩固相关的知识,希望对你有一定的参考价值。
前言
大家好呀,我是一名本该去就业但目前仍在待业中的老学长。我大概三个月就学完了Java基础部分,后来又断断续续地了解了一些数据库方面的知识。但是,又因为这样或者那样的原因,导致中间这三个月时间基本没有碰过电脑,为了巩固巩固半年前那孱弱的Java基础,我决定谢谢博客,顺便洗刷洗刷我这三个月以来的懒散~
有什么不对的,还望各位大佬及时指出。
目录
Java程序长什么样?
先看一个简单的Java程序:
输出 Hello World!
public class test{
String name;
public static void main(String[] args){
System.out.println("Hello World!");
}
}
可能刚开始学的人看不懂,没关系,我先对这个程序进行划分进行划分:
在Java中,类是Java程序的基本单元,所有的程序逻辑都必须写在类中,譬如变量的声明、方法的定义等等。
一个类由两部分组成,一个是成员变量,另外一个是方法。
但是只有在方法中才可以对变量进行操作,在方法外,只能简单地对成员变量做初始化操作。
在Java中每条语句都是以;
结尾。
Java程序如何执行?
在我们把程序编写好之后,计算机并不会直接执行程序,因为计算机只认识0和1,对于String、class甚至3、4这些数字都完全不认识。如果你非要让计算机执行你所编写的源代码程序,这就好比让一个从来没有学过汉语的外国人参加汉语等级考试。
因此,为了让计算机能够读懂Java程序,我们需要进行翻译
,将程序转换为计算机可以识别的01代码。下图列出了Java源程序执行的整个过程:
编译
我们需要先使用javac.exe
编译器编译,Java的编译器会检查一些基本的语法错误。只有编译器检测不出错误,才会生成字节码文件,否则你必须不断地修改程序。
解释
计算机只能识别二进制代码,很遗憾地是,字节码文件不是二进制代码,所以必须对字节码文件进行解释。如果你使用命令行进行执行,你需要使用java.exe
命令。
Java的平台无关性
平台无关,这是Java最吸引人的地方,因为它可以节省很多时间和精力。有接触过C、C++的读者可能会觉得Java的执行过程有些繁琐——编译之后还需要解释,不能直接执行。不过,也正是由于生成了字节码,Java才有了平台无关的优势。
这也就意味着,字节码文件与计算机硬件无关,只要你的设备上安装了Java解释器,那么你就可以直接执行Java程序,而不需要对Java程序做出任何修改。(要知道C语言程序在更换了平台之后,代码有可能需要更改才可以执行)
数据类型
在Java中,数据类型分为两种:一种是基本数据类型,另外一种是引用数据类型。这篇只介绍基本数据类型。
基本数据类型有八种,可以分为四大类。
对于不同类型的数据,计算机会分配不同大小的内存用以存储,下表列出了八种基本数据类型在计算机中的内存分配情况:
数据类型 | byte | short | char | int | long | float | double | boolean |
---|---|---|---|---|---|---|---|---|
内存数(byte) | 1 | 2 | 2 | 4 | 8 | 4 | 8 | 1 |
范围 | -128~127 | -215~215-1 | Unicode | -231~ 231 -1 | -263~ 263-1 | -3.404E38~ 3.404E38 | -1.798E308~1.798E308 | true, false |
声明变量
在Java中,变量必须声明之后才可以使用。变量的声明格式为
type name
其中,type是上面所指的数据类型, name是变量的名字。变量名需要遵循下面的几条规则:
- 变量名可以使用字母(A - Z ,a - z)、数字(0~9)、下划线(_)、美元符号($)进行命名
- 变量名不可以以数字开头
- 不可以使用Java保留字作为变量名
public class variable {
public static void main(String[] args){
byte b = 12;
int i = 123;
long l = 1234L; // 整数默认是int类型,在数值的后面加上L或者l(小写)才是long类型
float f = 123.123f; //浮点数默认是float类型,在数值后面加上F或者f才是float类型
double d = 123.123;
boolean b = true;
char c = 'a';
}
}
在进行其他内容之前,我们先了解一下强类型的概念(这一部分可以跳过)。
强类型语言——Java
Java是一种强类型的编程语言,简单来说,Java要求一种类型的变量只能存储这种类型的值。看一下下面的代码:
public class typeTest{
public static void main(String[] args){
int i;
i = 1;
float f = 5.2f;
char ch = 'A';
boolean b = true;
}
}
这里声明了四种类型的变量,分别保存整数、小数(浮点数)、字符以及布尔值。Java的强类型表现在,你不可以使用一个int类型的变量保存一个float类型或者其他类型的值。如果你这么做了,那么程序就会报错。
public class typeTest{
public static void main(String[] args){
int i;
i = 5.2;//报错
float f = 5.2f;
char ch = 'A';
boolean b = true;
}
}
学过C语言的人可能会纳闷,变量声明时不应该就是这样吗?这里,为了说明强类型的概念,以弱类型语言javascript为例进行比对:
var a;
a = 1;//使用a保存整数
a = 5.2;//使用a保存浮点数
a = 'A';//使用a保存字符
a = true;//使用a保存布尔值
上面的代码对于JavaScript而言,是完全正确的。变量没有一个固定的类型,它仅仅是一个容器,什么都可以装载。
自动类型转换
先看一段代码
public class test {
public static void main(String[] args) {
float f = 5;
System.out.println("f = " + f);
}
}
这段代码不仅可以通过编译,还可以顺利执行:
如果刚刚了解了强类型的概念,各位或许会有一些疑惑——变量和值必须对号入座,什么类型的变量存储什么类型的值?为什么这里没有错误?
这就涉及到类型转换了。在Java中,类型之前是可以相互转换的。下图显示了数据类型之间的默认转换规则,其中,虚线表示有可能造成精度损失。
强制类型转换
除了Java默认的转换规则之外,还可以进行强制类型转换。其格式如下:
(type)name
在括号中写入转换的目标类型,name是要求转换的变量名。可能有些拗口,直接看代码吧:
public class variable{
public static void main(String[] args){
int n = 2;
System.out.println("n = " + n); // n = 2
float f = 5.5;
n = (int)f; //将f强制转换为int类型
System.out.println("n = " + n); //n = 5;
强制类型转换有以下几条规则:
- 不遵循四舍五入。(专业点说,就是会直接截断数值)
- 如果进行转换时,转换结果超出了目标类型的数值范围,也会发生截断。
流程控制
Java和大多数语言一样,有不同的流程控制语句。通过利用这些不同的语句,达到选择性执行或者重复性执行某一段程序。
条件分支结构
条件分支结构满足了选择性执行代码的需求。
if语句
if语句是最简单的条件分支语句,语句的使用格式如下:
if(condition) //当条件(condition)的结果为true,执行语句(statements)
{
statements
}
可以使用下面的流程图来表示if语句的执行过程:
if-else语句
语法格式如下:
if(condition)
{
statements1
}else{
statements2
}
相比于if语句,if-else语句多了一种选择:
if-else-if
和之前的差不多,只是多了一个if语句。
if(condition1){
statements_1
}else if(condition2){
statements_2
}
…
else{
statements_n
}
对应的流程图如下:
switch语句
switch语句和if-else-if语句相似,都可以实现多选一的功能。先看一下语法格式:
switch(常量表达式){
case 常量1: statement1 [break;]
case 常量2: statement2 [break;]
case 常量3: statement3 [break;]
…
default : statement_n [break;]
}
switch语句会先计算出常量表达式的值,然后寻找和这个值相匹配的一个case,找见了执行对应的语句;没有找见的话执行default中的语句。如下所示:
与if-else-if不同的是,switch语句中的case有一定的限制:
- 类型是byte、char、short、int的表达式
- 枚举常量
- 字符串字面量
循环结构
循环结构的语句满足了重复性执行的需求。
while语句
语句格式
while(condition){
//循环体
statements
update
}
只要条件为真,循环体(花括号之内的内容)就会不断地执行。循环体是位于{}
中的复合语句。循环体可以分为两个部分:
- 具体的执行部分
- 更改循环变量的部分——避免陷入“死循环”
do…while
语句格式
do{
statements
update
}while(condition);
do…while和while语句相似,都是用于循环。但是有一个很大的区别:while语句会先判断条件后执行循环体,只有满足条件才可以执行循环体,do…while语句先执行循环体后判断条件。这样就会造成在第一次执行语句时,do…while语句有可能比while语句多执行一次。这点从两者的流程图中也可以看出来。
for循环
语句格式
for(初始化表达式; 循环条件表达式; 循环变量更新表达式){
statements
}
以上是关于Java基础巩固的主要内容,如果未能解决你的问题,请参考以下文章