Java方法参数…是什么意思
private void test(String… fileNames){
……
}
String… fileNames 代表什么意思?类型后面三个点(String…),是从Java 5开始,Java语言对方法参数支持一种新写法,叫可变长度参数列表,其语法就是类型后跟…,表示此处接受的参数为0到多个Object类型的对象,或者是一个Object[]。 例如我们有一个方法叫做test(String…strings),那么你还可以写方法test(),但你不能写test(String[] strings),这样会出编译错误,系统提示出现重复的方法。
在使用的时候,对于test(String…strings),你可以直接用test()去调用,表示没有参数,也可以用去test(“aaa”),也可以用test(new String[]{“aaa”,“bbb”})。
另外如果既有test(String…strings)函数,又有test()函数,我们在调用test()时,会优先使用test()函数。只有当没有test()函数式,我们调用test(),程序才会走test(String…strings)。
所以可以看到下面这个例子,虽然是可变程度参数,…,但是也可以传入,一个参数,并且使用的时候可以用参数[0],来获取参数:
可以看到,上面用的urls[0]来获取的参数.
Java的发展历史
编程语言的发展,其实是经过了三个比较大的阶段阶段,那就是:汇编语言 –> 面向过程语言 ->面向对象语言。
汇编语言由于其难度太大,需要记忆的语句命令过多,但是其对计算机底层的控制和操作能力还是很强大的,由于学习成本太大,效率较低,已经不作为现在计算机系的重点教程了。C语言可以作为面向过程语言的一种代表,算是一种比较纯正的面向过程语言了。而面向过程的语言也称为结构化程序设计语言,是高级语言的一种。在面向过程程序设计中,问题被看作一系列需要完成的任务,函数则用于完成这些任务,解决问题的焦点集中于函数。所以说C语言的基本单位也是函数。面向过程的概念最早由 E.W.Dijikstra 在 1965 年提出,它的主要观点是采用自顶向下、逐步求精的程序设计方法,使用三种基本控制结构构造程序,即任何程序都可由顺序、选择(if-else、switch-case)、循环(for、while、do-while)三种基本控制结构构造。
面向过程语言的最大的优势就是适合模块化设计。一个程序可以分解为多个函数,通过函数调用过程,使得可以用一条函数调用语句实现函数所完成的复杂运算过程。
这种方法使得可以将一个复杂问题的解决过程分解为较为简单的几个子问题的解决过程:1.首先通过编写函数用语句描述解决每一个子问题的解决过程的步骤;2.然后可以用一条函数凋用语句描述解决某个予问题的过程的步骤;3.最后在一个主程序中用多条函数调用语句描述解决分解为多个子问题的复杂问题的解决过程的步骤。
但是当我们在开发新系统诸如此类的问题时,我们开始肯定不清楚这个系统完工后的架构是怎么样的,所以说,利用模块化设计的语言,就很难对开发出来的系统进行调整(或者工作量会很大)。在此类诸多问题的压力下,面向对象语言便体现出了其独一无二的优势。
面向对象语言(OOP, Object-Oriented Programming)是一类以对象作为基本程序结构单位的程序设计语言。Java 便就是面向对象编程中的的一种代表性语言。
其实最早,C++ 相对于C语言的基础上就添加了面向对象和模块的思想,这也可以理解成 C++ 中两个加号的来历。
然而,C++ 在面向对象上做的并不是太好,比如 C++ 支持多继承,多继承会引发不确定性(这个后面谈到继承大家就知道了)。
再如,C++ 还支持指针,指针直接对内存底层操作,虽然效率高,危险系数却非常高。例如,一个简单的病毒程序就可以靠指针完成:你通过一个程序的中给指针随机赋值,能够获取到访问不属于本程序执行空间的其他空间的权限,那么这也就是一个计算机病毒。(当然,真正的病毒不可能那么简单,但这是基本特性)。所以后来的 Java 在 C++ 的基础上移除了指针,增加了引用,提高了安全性。
C++ 中,假如你写同样一个程序,在 Java 里面会报错,而在 C++ 语言里面是不会报错的。为什么?
因为 C/C++ 语言设计的思想是:你想怎么写程序就怎么写,只要你的这种写法错得不是很离谱,就认为你这么写有特殊的含义,可以通过。但 Java 不行:只要你这么写有歧义,或者说这样写不太好,那么它都会报错。
比如 C++ 中你可以将一个浮点型数据赋给一个整型变量,编译时只会警告,因为会丢失精度,但是在 Java 中这样写就会报错,它在语法上就禁止你这样写。这就是不同的语言对同样一个问题有不同的理解和处理方式。
由于 C++ 中大大小小的问题会导致不安全性,所以就在 C++ 的基础上,取其精华,去其糟粕,便形成了早期的 Java 语言。直到现在,Java 又多了很多新的特性,比如说集合,反射,泛型,Lambda 表达式等等。
正因为 C -> C++ -> Java 的发展历史,使得 Java 在一定程度上继承了多数C语言的语法,但又有一定的改变。
Java 语言介绍
Java 发展简史
1991 年,James Gosling 在 SUN 公司的工程师小组想要设计这样一种小型计算机语言。该语言主要用于像电视盒这样的消费类电子产品。另外,由于不同的厂商选择不同的CPU 和操作系统,因此,要求该语言不能和特定的体系结构绑在一起,要求语言本身是中立的,也就是跨平台的。所以,将这个语言命名为“Green”,类似于绿色软件的意思。后来,改名为 Oak,橡树的意思。改名后发现已经有一种语言叫这个名字了,再改名叫 Java。
Java 语言发展到今天经历了一系列的过程:
1991 年,SUN 公司的 Green 项目,Oak
1995 年,推出 Java 测试版
1996 年,JDK1.0
1997 年,JDK1.1
1998 年,JDK1.2,大大改进了早期版本缺陷,是一个革命性的版本,更名为 Java2。
2004 年,J2SE 5.0 (1.5.0) Tiger 老虎
2006 年,J2SE 6.0 (1.6.0) Mustang 野马
2011 年,JavaSE7.0 Dolphin 海豚
2014 年,JavaSE8.0
2017 年,JAVA 9.0
2018 年 3 月,JAVA 10
2018 年 9 月,JAVA 11
2019 年 3 月,JAVA 12
2019 年 9 月,JAVA 13
2020 年 3 月,JAVA14
SUN 公司已经被 oracle 公司收购,目前每半年更新一次 java 的版本。但是,企业中的主流仍然以 8 为主。对于初学者,应该以企业主流应用版本为核心进行学习,没有必须在此处追求最新版本。
Java 的核心优势
Java 为消费类智能电子产品而设计,但智能家电产品并没有像最初想象的那样拥有大的发展。然而 90 年代,Internet 却进入了爆发式发展阶段,一夜之间,大家都在忙着将自己的计算机连接到网络上。这个时候,遇到了一个大的问题。人们发现连接到 Internet 的计算机各式各样,有 IBM PC、苹果机、各种服务器等等,不仅硬件 CPU 不同,操作系统也不同,整个的网络环境非常复杂。这个时候,程序员们希望他们编写的程序能够运行在不同的机器,不同的环境中,这需要一种体系中立的语言(即跨平台)。Java 的研发小组户然发现他们用于小范围的语言也可以适应 Internet 这个大环境。
跨平台是 Java 语言的核心优势,赶上最初互联网的发展,并随着互联网的发展而发展,建立了强大的生态体系,目前已经覆盖 IT 各行业的“第一大语言”,是计算机界的“英语”。虽然,目前也有很多跨平台的语言,但是已经失去先机,无法和 Java 强大的生态体系抗衡。Java 仍将在未来几十年成为编程语言的主流语言。
Java 各版本的含义
JavaSE(Java Standard Edition):标准版,定位在个人计算机上的应用这个版本是 Java 平台的核心,它提供了非常丰富的 API 来开发一般个人计算机上的应用程序,包括用户界面接口 AWT 及 Swing,网络功能与国际化、图像处理能力以及输入输出支持等。在上世纪 90 年代末互联网上大放异彩的 Applet 也属于这个版本。Applet 后来为 Flash 取代,Flash 即将被 HTML5 取代。
JavaEE(Java Enterprise Edition):企业版,定位在服务器端的应用
JavaEE 是 JavaSE 的扩展,增加了用于服务器开发的类库。如:JDBC 是让程序员能直接在 Java 内使用的 SQL 的语法来访问数据库内的数据;Servlet 能够延伸服务器的功能,通过请求-响应的模式来处理客户端的请求;JSP 是一种可以将 Java 程序代码内嵌在网页内的技术;
JavaME(Java Micro Edition):微型版,定位在消费性电子产品的应用上
JavaME 是 JavaSE 的内伸,包含 J2SE 的一部分核心类,也有自己的扩展类,增加了适合微小装置的类库:javax.microedition.io.*等。该版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型产品能够随时增加支持的能力。
Java 的特性和优势
跨平台/可移植性
这是 Java 的核心优势。Java 在设计时就很注重移植和跨平台性。比如:Java 的 int 永远都是 32 位。不像 C++可能是 16,32,可能是根据编译器厂商规定的变化。这样的话程序的移植就会非常麻烦。
安全性
Java 适合于网络/分布式环境,为了达到这个目标,在安全性方面投入了很大的精力,使 Java 可以很容易构建防病毒,防篡改的系统。
面向对象
面向对象是一种程序设计技术,非常适合大型软件的设计和开发。由于 C++为了照顾大量 C 语言使用者而兼容了 C,使得自身仅仅成为了带类的 C 语言,多少影响了其面向对方象的彻底性!Java 则是完全的面向对象语言。
简单性
Java 就是 C++语法的简化版,我们也可以将 Java 称之为“C++-”。跟我念“C 加加减”,指的就是将军 C++的一些内容去掉;比如:文件,指针运算,结构,联合,操作符重载,虚基类等等。同时,由于语法基于 C 语言,因此学习起来完全不费力。
高性能
Java 最初发展阶段,总是被人诟病“性能低”;客观上,高级语言运行效率总是低于低级语言的话,这个无法避免。Java 语言本身在发展中通过虚拟机的优化提升了几十倍的运行效率。比如,通过 JIT(JUST IN TIME)即时编译技术提高运行效率。 将一些“热点”字节码编译成本地机器码,并将结果缓存起来,在需要的时候重新调用。这样的话,使 Java 程序执行效率大大提高,某些代码甚至可以接待 C++的效率。
因此,Java 低性能的短腿,已经被完全解决了。业界发展上,我们也看到很多 C++应用转到 Java 开发,很多 C++程序员转型为 Java 程序员。
分布式
Java 是为 Internet 分布式环境设计的,因为它能够处理 TCP/IP 协议。事实上,通过 URL 访问一个网络资源和访问本地文件是一样的。Java 还支持远程方法调用(RMI,Remote Method Invocation),使程序能够通过网络调用方法。
多线程
多线程的使用可以带来更好的交互响应和实时行为。 Java 多线程的简单性是 Java 成为主流服务器端开发语言的主要原因之一。
健壮性
Java 是一种健壮的语言,吸收了 C/C++ 语言的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等)。Java 程序不可能造成计算机崩溃。即使 Java 程序列也可能有错误。如果出现某种出乎意料之事,程序也不会崩溃,而是把该异常抛出,再通异常处理机制加以处理
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。