本文讲述的是Java在面向对象三大特性之前的一些基础知识,并非是面对编程零基础的教程,仅可作为Java零基础的参考内容。观看本文需有C语言基础。 不同于C语言的面向过程,Java是一门面向对象的编程语言。本文不讲什么是面向对象,仅帮助大家快速上手Java的基本语法和基本逻辑。
目录
一、Java的基本运行
本教程使用IDEA作为讲解软件,JDK安装和JAVA的背景请自行寻找其它教程学习。
这就是一个最基本的Hello world!的输出
那这边的语句的含义目前不详细说明,在之后的讲解中会慢慢了解到。
只需知道 System.out.println()可以做到输出的作用,并且文件主体需要在main方法中执行,类似于C语言中的main函数作为程序的入口。
二、 Java数据类型上和C语言的区别
这边默认读者已经学习过C语言的基础知识。
首先我们先来了解Java的标识符,其实和C语言的标识符区别不大,只需要知道那些重要的可能会被系统使用的词汇,我们不要拿过来命名就好。英文或美元符号开头这样的知识点,这里就不再强调,因为这不是面向零基础的教程,仅是作为C语言转Java的参考材料。
标识符是用来标识类名、变量名、方法名、类型名、数组名以及文件名的有效字符序列。
标识符的规则是:由字母、下划线、美元符号和数字组成,第一个字符不能说数字字符,不能是关键字,不能是true、false、null。
false不能作为标识符。
Java语言采用的Unicode字符集,可以用表示许多种语言。
基本数据类型:
逻辑类型:boolean
整数类型:byte short int long
字符类型:char
浮点类型:float double
读者会发现这边与C语言最大的不同就是多了个boolean(布尔)类型,是用来作为逻辑判断的,其取值仅有true和false两种,分别表示真和假。那既然有了boolean作为逻辑判断,所以这里就出现了和C语言极大不同的地方就是,Java不再采用0和非0数来判断真和假了。
以前的if(0),while(1)等逻辑判断这里不再适用,逻辑判断的表达式中只能是true和false这两种。
这里再简单介绍一下其它数据类型,其实和C语言的数据类型区别不大,不过就是Java的char类型的存储变成了2字节存储外,其余没什么区别,数据的具体取值范围可自行查询。
其次,float类型的常数必须要加上f或者F后缀,才能通过运行,因为Java的浮点常数默认是double类型,我们需要用f或者F后缀做为说明。而long类型的常数也是同理,整数常数默认都是int类型,所以需要在常数后面加上l或者L。【如图所示】
以上就是关于数据类型的一些基本内容,此处我再讲一讲关于类型转换。
我知道,数据类型是可以进行类型转换的,就比如在C语言中,我们可以把char字符转换成int型,比如int x = 'A'这样,但是在Java里面的类型转换要遵循以下几点:
1、自动类型转换只能是从低精度转向高精度,即char→int→long→float→double
以及byte→short→int→long→float→double
2、boolean类型不参与类型转换
3、如果要向下转换,必须要写清楚要转的类型,比如要把double转int,可以写int x = (int)3.14,会输出x为3,如图所示是可以正常输出的。
4、一个最基本的原则就是赋值号左右两边类型要相同,否则无法赋值
5、如果char和byte和short混合运算,会先转成int类型后再进行运算,如图所示是可以正常运行的
6、正如第5条所说,如果是浮点数和其它类型进行混合运算,则会转成double类型
以上就是数据类型的一些基本内容,读者可以花时间多尝试。
三、Java在输入输出上与C语言的不同
下图就是一个输入输出的示范,实现的功能就是把从键盘上的输入原样输出。
因为这里还没有讲到包和类的概念,所以这边简单介绍以下就是,我们引入(import)了Java里一个包,通过调用Scanner类里的构造方法,创建了一个输入的入口。用C语言来解释就是,引入了一个头文件,让我们可以调用里面的scanf来读入,目前理解到这里就可以了,我们现在只需要掌握这种输入方式即可。
注意一点,就如图上所示,如果n是int类型,我们就写nextInt(),如果是double类型我们就写nextDouble(),即对应什么类型的变量,就写什么类型的名称再后面,读者可以对着上面的示例图自己试一试。
然后我们从键盘读入了这个变量之后,我们通过System.out.println()这个语句输出。同样你可以理解为这就是个printf输出语句,但是这个语句输出后会带有换行效果,如果输入的是System.out.print(),则没有换行效果,如果是System.out.printf(),则和printf的用法一致,但是我们通常不采用C风格的语句写。
为了接下来的解释,这里额外提及一个C语言里没有的类型,叫做String引用类型,它类似于C语言的字符数组,可以存放长字符串,如图所示。【将字符串原样输出】
既然我们都用数组来解释了,它自然也有一些特性。为什么我们把它叫做引用类型呢?因为字符串是通过“引用”来调用的。目前可以理解为,我们通过地址来访问这个字符串,即引用。字符串可以存储多个字符,这点上就与只能存放单个字符的char类型不同。
接下来我们继续介绍输出语句。
像下图这种,就是输出一个字符串常量。
那如果我想输出多个不同的数据要怎么输出呢?
我们用并置符号+号来把不同数据连接起来一起输出。如下图所示都是合法的输出,读者可以自行尝试。
如果觉得这样输入太长,也可以跨行输出。
注意!要把这种连接符的使用与普通的加号区分开,只要输出的表达式中有字符串类型,就会把整个式子变成字符串,让每个变量都原样输出,而不进行计算。
如下图这种就会进行计算,输出21。
读者可以自行多尝试。
四、数组
数组的话与C语言有许多的不同之处。数组也属于引用型变量,数组名存放的是数组的引用。
下图就是一些常用的声明数组的方式。
上图中a,b,c都为一维数组,而d和e为二维数组,读者自行理解即可。
我们把多维的数组,叫做数组的数组,即在数组中套用数组,用数组引用数组,并且Java二维数组中套的一维数组可以有不同长度,以下是这些数组的声明和为数组分配元素。
数组的声明和分配空间是可以写一起的。
下图就是我给二维数组里的每个一维数组分配了不同大小的数据空间,分别是2,3,4。
下图这种写法也是可以的。
更多的写法读者可以自行探索,这里仅介绍一些常用的写法。
接下来介绍数组的遍历。
可以如C语言一样遍历,如图。
这里的length是查询数组的长度。
一维数组的遍历较为简单,那么我们来看看二维数组的遍历。
如果像图中这样遍历,得到的结果只会是这个二维数组中,三个一维数组的引用【引用理解为数组地址即可】
如下图的写法即可正确地遍历二维数组。
那这样我们就明白了数组的遍历,但是Java提供了一种更强的遍历,读者这里推荐这种写法。
这里的含义就是我们临时声明了一个变量i来遍历一整个数组n,然后逐个输出,还是比较容易理解的,注意!这里的i必须要在括号里声明,不能在外面声明,即下图所示是不行的。
那么同理,二维数组我们也可以用这种方式来访问。
应该不难理解,读者可以自行敲代码做实验。
五、选择分支和循环语句
这里不再讲述运算符的知识点,读者可自行复习。
我们都知道,选择分支语句有if,switch,而循环语句有while,for,do……while这几种常用的语句。
那么这些语句和C语言有什么不同吗?
结论是,没多大不同,基本上一模一样。
唯一要注意的就是判断语句!
下图这些写法都是错误的!
我们不可以在条件判断的地方放入除了boolean类型的任何语句,应该如下图这样写:
这里的if语句判断为真,所以返回的是boolean类型的true到括号中,所以if语句执行。
然后while语句括号中为true将一直执行,直到x等于0时跳出(break)循环。
这边就是判断语句的知识点,读者可以自行实验。
像图中这种赋值语句也是不行,因为赋值语句返回的值也是int型。
而下图这种返回boolean类型的值的情况就可以。
这里再讲讲switch语句,就只强调一点就是:
switch括号里的表达式类型可以是byte、short、int、char和String类型,其余都不可以。
六、类与对象
以上部分我们已经讲完了所有Java里的基本数据类型和语法结构,并且能写出一些程序,像C语言一样完成许多事情了,但是我们还要再讲讲一些别的知识点,就是类与对象。
类是什么?你可以简单理解为它就像C语言里的结构体,但是比结构体更有逻辑性。
结构体可以封装许多的不同的数据类型,而Java的类也可以,我们把这些封装的全局变量叫做属性【局部变量不是属性】,同时类里面不仅可以定义属性,我们还可以定义方法,你可以理解为是一个行为。
让我们拿下图来举例吧!
你看,这里我就定义了一个类,叫做Student,里面封装了哪些属性呢?
我定义了Student的name属性,age属性和score属性,这些还是比较容易理解的。
其次我定义了一个叫做speak的方法。
什么是方法?目前就理解为我想做的一个行为就好了,也可以暂时理解为一个实现特定功能的函数。那这边这个方法,我们就是可以读入一句话,然后输出。
你看,这样我们就成功写了一个类,定义了其中的属性和方法。
那我们怎么在main方法【程序执行的入口】中使用这个类呢?
我们用下面这个图来解释。
这里我们通过Student这个类,创建了一个叫做a的对象,并且给他的各项属性都进行了赋值。
我们一个一个来解释。
首先这个.叫做点运算符,就是类似C语言中结构体利用.来访问变量一样,我们这里用这个点来访问a中的属性。
我们先来解释第一句:
Student a = new Student();
这句话左半边的意思就是,我们用Student这个类声明了一个变量a。
所以实际上,类就是一个比普通数据类型更高级一点数据类型,我们可以通过这个数据类型创建很多变量,我们把这些变量叫做对象。我们也有人把类叫做模板,利用这个模板去创建对象,来使用。那这里左半句其实还不算是创建了对象,我们只是声明了我们要创建一个Student类型的a对象,a仅是对象的名字,我们可以通过名字来调用对象,但是a不是对象本身。
对的,类是引用类型,也是通过对象的名字来调用的。
那再来看第一句话的右半句。这里的意思就是我们利用new运算符,计算出了a的引用【暂时理解为地址就好】,然后给a对象分配了一个数据空间,所以本质上来说new Student()才是对象本身。
第二句话就是给s赋值。
第三到五句话都是通过点运算符访问了这个a对象,然后给他的属性赋值。
第六句话就不一样了,这里是调用了方法。因为我们用Student这个模板创建了a,所以a就有了对应的属性和方法。这边就是传入参数s,然后调用speak方法执行。目前这样的理解就足够了。
你看,这里就是类与对象的一些基本知识了,是不是还挺有意思的。
这边的a就是Student类的实例化,就是从抽象变为具象,所以我们称其为实例化。因为我们还没有学到多态等知识,所以我们暂时把实例和对象认为是一个东西即可。【并不准确】
以上就是这个博客的所有内容了,仅是为了帮助一些初学Java的朋友快速上手Java的操作,并没有介绍Java面向对象等重点知识。
如果表达有误,可以评论区指出~