P2-4:import导包和API文档
正如C语言里有很多官方的函数一样(需要引入头文件才能使用),
而java不同,java有两种情况,一种是需要“引入头文件”, 或者也可以用我们更熟悉的名字来称呼:导包 , 把我们需要的包导入到 .java文件之后, 就可以使用这个包里的方法
而除了导包之外,java自身在不需要导包的情况下也可以使用一些方法,我们可以称之为java自带的方法
例如我们学的跟String类型有关的方法,就是Java自带的方法:
上面只是展示了一小部分,想看String类的所有方法可以去下面的网站进行查看:
Java String 类 | 菜鸟教程
并且上面网站里的所有String函数你最好都去练一练,这些都是基础的东西,所以需要去练习和熟悉
至于为什么java不需要导包也可以使用方法,这就要详细讲解一下:
我们学C语言的时候知道,想要调用某些特定的函数,就要引入相应的头文件,
因为只有对应的头文件里才写着那些特定函数,就像是工具箱一样
而在Java里,我们前面之所以可以使用一些函数还不用引入任何头文件,
是因为我们提前下载好了jdk, jdk就相当是一个巨大的文件(你也可以理解成是一个巨大的包)
里面就包含着各种各样的包 , 相当于准备了好多的头文件让我们用
所以只要我们下载好jdk,一切都好办多了
如果说C语言里的头文件是工具箱,引入头文件是为了使用特定的工具的话
那么我们在Java里下载了jdk就相当于引入了一个五金店,基本大部分工具都能在里面找到,
只不过五金店里的这些工具(jdk里面的方法), 有些是可以随便用的,例如String类方法,
而有些工具是需要权限的,你必须要申请权限(导包)才可以正常使用
当然,一些java的第三方包也需要通过导包的方式来使用,并且你在导包之前要确保下载了这些第三方包
在C语言中,引入头文件 用 #inclde <xxx>
而在java中, 导包 用 import xxx;
xxx是我们要引入的package包的名字
我们在java文件里为了使用特定方法而倒入package包的操作就叫做导包
你可以这么理解, C中的引入头文件 就等同于 java中的导包
都是为了让我们使用特定的函数/方法
即java中的包 就近似于 C中的头文件
并且要注意,导包不要导错包,因为java的package包里不乏有很多重名的文件包
所以你在文件里导包的时候一定要 表明清楚你要导入的包的package文件路径,不要导错包,
不然导入了一个重名的package包就尴尬了,因为它不是我们要用的package包,无法给我们提供
我们要用的特定的方法
还有就是记得导包最后要加上分号; 不加的话运行会报错
并且要记住,如果是同一个文件夹的 .java文件,那么它们是可以在不导包的情况下互相用对方的方法的,但是,如果是要用其他文件夹的 .java文件的方法, 那么就必须要导包
打个比方就是,同一个文件夹里面都是一家子,都是一家子那互相用一下彼此的东西没多大问题
但是如果你想用其他文件夹的方法,就相当于要用别人家的成员的东西,这时候你总得向他们申请一下,征求一下意见, 所以就需要导包
那么为什么我们使用java自带的那些方法(例如String类的方法)就不需要导包呢?
还是用jdk五金店来举例子,如果把jdk看成是一个巨大的五金店,里面大部分工具应有尽有的话
那么一些工具是可以随便用的,例如我们上面说的String类的方法,这些方法我们可以在不导包的情况下使用
而有一些工具可能比较贵重或者危险,所以就需要权限才能使用的,要通过 导包 这个申请权限的仪式才可以正常使用
有的编译器十分方便,当我们没有导包但是又想使用某些特定方法的时候,编译器就会自动在main函数上面给我们生成 我们可能要导入的包的package包路径, 即自动帮我们导包
但是要注意,虽然很方便,但是有时候可能会出错,因为会出现我们上面说的那种情况,
即有些包的名字是相同的,所以编译器自动帮我们导的包可能是一个重名的错包,
这时候我们就无法正常使用方法,因为导错包了
我们可以在java的API文档里查看java的包有哪些以及导入这些包能带来的功能:
英文版:
https://docs.oracle.com/javase/8/docs/api/?xd_co_f=47c934d9-e663-4eba-819c-b726fc2d0847
中文版:
Java 8中文版 - API参考文档
整体上来讲,jdk给我们提供的这些包已经足够我们去开发了,
无非就是有些包可以不用导入,直接用里面的方法,
而有些包需要导入才能正常使用里面的方法
除非有一些情况,你要用的工具在jdk这个五金店里找不到,
那你就要去下载一些包含着你想用的那些方法的包(第三方包),大概率是别的公司或者大佬开发的包,把这些包下载之后再去导入使用
P2-5:java中的数组
我们来讲一讲java当中是怎么声明和定义数组的
我们在C语言中,定义数组是这么定义的:
而我们在java当中有很多种定义数组的方式, 而最常用的一种就是下面这种:
其实就是把C语言定义的数组的中括号给挪动到数据类型后面了
java里面声明数组的方式有两种:
并且java里面,初始化一个数组的方式也有两种:
一种是直接初始化,另一种是用new xxx(数据类型名)先分配空间,然后再一个个的进行初始化
第二种方式有点类似于C语言中的malloc函数分配空间,但注意只是类似,并不是真的跟malloc函数一样,只是方便理解而已,new int[3]确实是给arr_2这个整型数组分配了3个整型变量的空间
数组的输出:java整型数组的输出跟C语言一样,输出 数组名[索引下标] 即可, 记得不要直接输出数组名,不然会输出一堆乱码
并且我们用第二种先分配再赋值的方式去写数组的时候,如果分配了空间却没有赋值初始化,
那么强行输出的时候,计算机就会默认数组中没有赋值的元素为0
.length() 这个函数我们知道是用来查看长度size的, 如果是跟String类型联用的话要记得带上小括号(),
例如 String变量名.length()
而 .length()这个方法除了跟字符类联用之外,也可以跟数组联用,用来输出数组的长度size
(或者说上面的String类型本身就是一种字符数组)
.length()与整型数组联用时就不用在后面带上小括号()了
你可以这么理解, .length 跟String类型联用时 ,是作为函数存在的(类似于C的strlen),
所以最后要加上小括号()
而 .length 跟整型数组联用时, 是作为 象征数组长度size的变量存在的,所以这时候就不用加小括号()
这也是java比C语言方便的地方,C语言里我们要得到一个整型数组的长度,
就需要 用到sizeof的运算,还需要创建一个变量size来存储
而在java中直接用 .length就能得到数组的长度size了, 非常方便
但实际上,我们这两种定义数组的方式都不怎么常用,因为这两种方式都定义的是静态数组:
静态数组一旦定义好之后,长度大小就不会再改变(除非我们手动去改),无法扩容,没有灵活性
这就很不方便我们的实际开发,因为我们在实际开发中,需求肯定是不断变化的,
大小固定的数组是满足不了我们变化无常的需求的
所以我们在实际开发中用的数组一般都是动态数组,会根据我们的需求来动态的变化自身的大小
而讲到数组就不得不提到循环,在java中有一种特殊的循环:增强循环
增强循环,也叫for each循环:
For each循环 第一个参数 数组的数据类型 + 你要输出的元素的代号(一般默认是element),
第二个参数是 数组名
然后你就可以在for each循环的循环体内用 System.out.println( ); 搭配 元素代号element的形式输出数组的元素了
可以直接在编译器里输入foreach然后按下enter来召唤for each循环的框架代码:
java中,数组作为函数参数的方式,跟C语言中基本一样,就是定义数组参数的时候记得用java的方式,把中括号[]挪到数组的数据类型后面