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中,数据类型分为两种:一种是基本数据类型,另外一种是引用数据类型。这篇只介绍基本数据类型。
基本数据类型有八种,可以分为四大类。

对于不同类型的数据,计算机会分配不同大小的内存用以存储,下表列出了八种基本数据类型在计算机中的内存分配情况:

数据类型byteshortcharintlongfloatdoubleboolean
内存数(byte)12248481
范围-128~127-215~215-1Unicode-231~ 231 -1-263~ 263-1-3.404E38~ 3.404E38-1.798E308~1.798E308true, false

声明变量

在Java中,变量必须声明之后才可以使用。变量的声明格式为

type name

其中,type是上面所指的数据类型, name是变量的名字。变量名需要遵循下面的几条规则

  1. 变量名可以使用字母(A - Z ,a - z)、数字(0~9)、下划线(_)、美元符号($)进行命名
  2. 变量名不可以以数字开头
  3. 不可以使用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;

强制类型转换有以下几条规则:

  1. 不遵循四舍五入。(专业点说,就是会直接截断数值)
  2. 如果进行转换时,转换结果超出了目标类型的数值范围,也会发生截断。

流程控制

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有一定的限制:

  1. 类型是byte、char、short、int的表达式
  2. 枚举常量
  3. 字符串字面量

循环结构

循环结构的语句满足了重复性执行的需求。

while语句

语句格式

while(condition){
//循环体
statements
update
}

只要条件为真,循环体(花括号之内的内容)就会不断地执行。循环体是位于{}中的复合语句。循环体可以分为两个部分:

  1. 具体的执行部分
  2. 更改循环变量的部分——避免陷入“死循环”

do…while

语句格式

do{
statements
update
}while(condition);

do…while和while语句相似,都是用于循环。但是有一个很大的区别:while语句会先判断条件后执行循环体,只有满足条件才可以执行循环体,do…while语句先执行循环体后判断条件。这样就会造成在第一次执行语句时,do…while语句有可能比while语句多执行一次。这点从两者的流程图中也可以看出来。

for循环

语句格式

for(初始化表达式; 循环条件表达式; 循环变量更新表达式){
statements
}

以上是关于Java基础巩固的主要内容,如果未能解决你的问题,请参考以下文章

Java巩固——面向对象基础

Java巩固——面向对象基础

Java SE基础巩固

Java基础巩固

Java基础巩固

JAVA自学基础知识巩固-八大基础数据类型(第六课)