Java笔试——2

1. 在 JAVA 编程中, Java 编译器会将 Java 程序转换为(字节码)

解释:

  • 编译器将Java源代码编译成字节码class文件
  • 类加载到JVM里面后,执行引擎把字节码转为可执行代码
  • 执行的过程,再把可执行代码转为机器码,由底层的操作系统完成执行

2. 执行语句“int a= ’ 2 ’ ”后,a的值是(50 )

a是int类型,单引号是字符型 记住0是48 A是65

常用ASCII码值:空格为32;数字0为48;“A”为65;“a”值为97

3. 面向对象的五大基本原则: 
单一职责原则(Single-Resposibility Principle):一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。 
开放封闭原则(Open-Closed principle):软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。 
Liskov替换原则(Liskov-Substituion Principle):子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。 
依赖倒置原则(Dependecy-Inversion Principle):依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。 
接口隔离原则(Interface-Segregation Principle):使用多个小的专门的接口,而不要使用一个大的总接口

4. 

常量池:存放字符串常量和基本类型常量(public static final)。 常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。

5. 接口中的变量默认是public static final 的,方法默认是public abstract 的

6. 

  • 为了更好地组织类,Java提供了包机制。包是类的容器,用于分隔类名空间。如果没有指定包名,所有的示例都属于一个默认的无名包。Java中的包一般均包含相关的类,java是跨平台的,所以java中的包和操作系统没有任何关系,java的包是用来组织文件的一种虚拟文件系统。A错

  • import语句并没有将对应的java源文件拷贝到此处仅仅是引入,告诉编译器有使用外部文件,编译的时候要去读取这个外部文件。B错

  • Java提供的包机制与IDE没有关系。C错

  • 定义在同一个包(package)内的类可以不经过import而直接相互使用。

7. 

  • 对于局部内部类,只有在方法的局部变量被标记为final或局部变量是effctively final的,内部类才能使用它们

  • 成员内部类位于外部类内部,可以直接调用外部类的所有方法(静态方法和非静态方法)

8.

效率:StringString(大姐,出生于JDK1.0时代) 不可变字符序列     <StringBuffer(二姐,出生于JDK1.0时代)  线程安全的可变字符序列   <StringBuilder(小妹,出生于JDK1.5时代) 非线程安全的可变字符序列   。Java中的String是一个类,而并非基本数据类型。string是值传入,不是引用传入。 StringBuffer和StringBuilder可以算是双胞胎了,这两者的方法没有很大区别。但在线程安全性方面,StringBuffer允许多线程进行字符操作。 这是因为在源代码中StringBuffer的很多方法都被关键字 synchronized  修饰了,而StringBuilder没有。StringBuilder的效率比StringBuffer稍高,如果不考虑线程安全,StringBuilder应该是首选。另外,JVM运行程序主要的时间耗费是在创建对象和回收对象上

9.抽象类可权转交给视图(视图由HTML生成);

以被抽象类继承,也可以被非抽象类继承

10.MVC是一种在web应用中常用的架构,下列说法正确的是(ABC)

A. 模型通常代表应用程序中的数据以及用于操纵数据的业务逻辑;

B. 视图是其对应的模型的可视化呈现,视图 将模型渲染成适合于交互的形式(通常为用户界面元素);

C. 控制器是用户与系统之间的纽带,它接受用户输入,并指示模型和视图基于用户输入执行操作(处理数据、展示数据);

D. MVC模式在web应用中的常见实践是:模型接受来自于用户的GET或POST请求数据并决定如何处理,模型将用户数据转交给控制器,控制器将控制

11. hashCode()方法和equals()方法

hashCode()方法和equals()方法的作用其实是一样的,在Java里都是用来对比两个对象是否相等一致。

那么equals()既然已实现比的功能了,为什么还要hashCode()呢?因为重写的equals()里一般比较的比较全面比较复杂,这样效率就比低,而利用hashCode()进行对比,则只要生成一个hash值进行比较就可以了,效率很高。

那么hashCode()既然效率这么高为什么还要equals()呢 因为hashCode()并不是完全可靠,有时候不同的对象他们生成的hashcode也会一样(生成hash值得公式可能存在的问题),所以hashCode()只能说是大部分时候可靠,并不是绝对可靠,

所以我们可以得出:

1.equals()相等的两个对象他们的hashCode()肯定相等,也就是用equals()对比是绝对可靠的。

2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。

所有对于需要大量并且快速的对比的话如果都用equals()去做显然效率太低,所以解决方式是,每当需要对比的时候,首先用hashCode()去对比,如果hashCode()不一样,则表示这两个对象肯定不相等(也就是不必再用equal()去再对比了),如果hashCode()相同,此时再对比他们的equals(),如果equals()也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性!

请你解释为什么重写equals还要重写hashcode?

HashMap中,如果要比较key是否相等,要同时使用这两个函数!因为自定义的类的hashcode()方法继承于Object类,其hashcode码为默认的内存地址,这样即便有相同含义的两个对象,比较也是不相等的。HashMap中的比较key是这样的,先求出key的hashcode(),比较其值是否相等,若相等再比较equals(),若相等则认为他们是相等的。若equals()不相等则认为他们不相等。如果只重写hashcode()不重写equals()方法,当比较equals()时只是看他们是否为同一对象(即进行内存地址的比较),所以必定要两个方法一起重写。HashMap用来判断key是否相等的方法,其实是调用了HashSet判断加入元素 是否相等。重载hashCode()是为了对同一个key,能得到相同的Hash Code,这样HashMap就可以定位到我们指定的key上。重载equals()是为了向HashMap表明当前对象和key上所保存的对象是相等的,这样我们才真正地获得了这个key所对应的这个键值对。

12. 记住就行 接口 只能用 public 和 abstract 修饰

13. 重载是在同一个类中,有多个方法名相同,参数列表不同(参数个数不同,参数类型不同),与方法的返回值无关,与权限修饰符无关

14.

能被java.exe成功运行的java class文件必须有main()方法;

在JDK5之后,J2SDK 改名为 Java SE DK(简称依然是JDK) ,它是java开发编程的工具,提供了编译功能和运行环境等,包含jdk和jre。但它不是java编程开发的平台。Java API 是Java应用程序编程接口,它和JDK不是一回事

appletviewer(小程序浏览器):一种执行HTML文件上的Java小程序类的Java浏览器,就是用来解释执行java  applet应用程序的,简单理解就是没有main函数的继承applet类的 java 类。类似于WEB上开发的java类,不需要写main函数。

15. java程序的种类

  1. Application:Java应用程序,是可以由Java解释器直接运行的程序。
  2. Applet:即Java小应用程序,是可随网页下载到客户端由浏览器解释执行的Java程序。
  3. Servlet:Java服务器端小程序,由Web服务器(容器)中配置运行的Java程序。

16. 变量初始化

  1. 类变量(静态变量)在类加载过程的准备阶段会进行一次赋值,一般是空值或constantValue属性值,同时在初始化阶段会调用类构造器再进行一次赋值。
  2. 而实例变量在创建对象时会调用实例构造器进行一次赋值。因此无论是类变量还是实例变量,在使用前都是非空的。
  3. 而局部变量没有初始化过程,在使用前必须赋值。

17.    构造方法

  1. 构造方法不能被static、final、synchronized、abstract、native修饰,但可以被public、private、protected修饰;
  2. 构造方法不是类的成员方法;
  3. 构造方法不能被继承。

18.

java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。

java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化

19. 构造方法

  1. 构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
  2. 一个源文件中有多个类时,构造函数不一定与公共类同名,因为每个类都可以有构造函数。

20. 

  • Java一律采用Unicode编码方式,每个字符无论中文还是英文字符都占用2个字节。

  • Java的char类型,通常以UTF-16 Big Endian的方式保存一个字符。

21. 字符串的引用传递

String str = "hello";     
foo(str); // str 也没有被改变
System.out.println(str);


static void foo(String text) {
     text= "windows";        
}

输出还是hello,传递的是对象的地址,赋值运算符会改变引用中所保存的地址,原来的地址被覆盖掉。但是原来的对象不会被改变

22.迭代器

迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。   Java中的Iterator功能比较简单,并且只能单向移动:   (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。   (2) 使用next()获得序列中的下一个元素。   (3) 使用hasNext()检查序列中是否还有元素。   (4) 使用remove()将迭代器新返回的元素删除。   Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

22. 

  1. intValue()是把Integer对象类型变成int的基础数据类型; 
  2. parseInt()是把String 变成int的基础数据类型; 
  3. Valueof()是把String 转化成Integer对象类型;

23.

  • 堆区:只存放类对象,线程共享;
  • 方法区:又叫静态存储区,存放class文件和静态数据,线程共享;
  • 栈区:存放方法局部变量,基本类型变量区、执行环境上下文、操作指令区,线程不共享;

24.Java中的HashMap使用hashCode()和equals()方法来确定键值对的索引,当根据键获取值的时候也会用到这两个方法。如果没有正确的实现这两个方法,两个不同的键可能会有相同的hash值,因此,可能会被集合认为是相等的。而且,这两个方法也用来发现重复元素。所以这两个方法的实现对HashMap的精确性和正确性是至关重要的。

25.下面列出了Array和ArrayList的不同点:
Array可以包含基本类型和对象类型,ArrayList只能包含对象类型(Array数组在存放的时候一定是同种类型的元素。ArrayList就不一定了,因为ArrayList可以存储Object。)。
Array大小是固定的,ArrayList的大小是动态变化的。
ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。

适用场景:
如果想要保存一些在整个程序运行期间都会存在而且不变的数据,我们可以将它们放进一个全局数组里,但是如果我们单纯只是想要以数组的形式保存数据,而不对数据进行增加等操作,只是方便我们进行查找的话,那么,我们就选择ArrayList。而且还有一个地方是必须知道的,就是如果我们需要对元素进行频繁的移动或删除,或者是处理的是超大量的数据,那么,使用ArrayList就真的不是一个好的选择,因为它的效率很低,使用数组进行这样的动作就很麻烦,那么,我们可以考虑选择LinkedList。

26.ArrayList和LinkedList都实现了List接口,他们有以下的不同点:
ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。
相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。
LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。
27. Comparable接口和Comparator接口

  • Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序。具体来说,它返回负数,0,正数来表明已经存在的对象小于,等于,大于输入对象
  • Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator相等。只有当输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才返回true。

28. &和&&

&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。

&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长

&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。 

29. 静态变量和实例变量的区别?

  • 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
  • 在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

30 . 

java中源文件的后缀为.java,经过javac.exe编译后生成字节码文件,后缀为.class,再经过java.exe编译为可执行文件,后缀为.exe。

31. 类中声明的变量有默认初始值;方法中声明的变量没有默认初始值,必须在定义时初始化,否则在访问该变量时会出错。

32. 

finally一定会执行的,有两种情况:

  • finally中有return语句,当try执行到return时会执行finally中的代码,其中有return 就直接返回了
  • finally中不含return语句,那么当执行到return时,它会被保存等待finally执行完毕后返回,这个时候无论finally内部如何改变这个值,都不会影响返回结果

33. 子类不能继承父类的构造方法,只能被调用

34.

  • servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁。​​​​​
  • 而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet,CGI不可移植,为某一特定平台编写的CGI应用只能运行于这一环境中

35. 网络通信

IP地址是用一个点来分成四段的,在计算机内部IP地址是用四个字节来表示的,一个字节代表一段,每一个字节代表的数最大只能到达255。

TCP和UDP位于同一层,都是建立在IP层的基础之上。由于两台电脑之间有不同的IP地址,因此两台电脑就可以区分开来,也就可以互相通话了。通话一般有两种通话方式:第一种是TCP,第二种是UDP。TCP是可靠的连接,TCP就像打电话,需要先打通对方电话,等待对方有回应后才会跟对方继续说话,也就是一定要确认可以发信息以后才会把信息发出去。TCP上传任何东西都是可靠的,只要两台机器上建立起了连接,在本机上发送的数据就一定能传到对方的机器上,UDP就好比发电报,发出去就完事了,对方有没有接收到它都不管,所以UDP是不可靠的。TCP传送数据虽然可靠,但传送得比较慢,UDP传送数据不可靠,但是传送得快

一般的网络编程都称为Socket编程,Socket的英文意思是“插座”

 两台电脑都安装上一个插座,然后使用一根线的两端插到两台电脑的插座上,这样两台电脑就建立好了连接。这个插座就是Socket。

  因为互相之间都能互相通信,我说你是我的Server只是从逻辑意义上来讲,我应该把东西先发到你那里去,然后由你来处理,转发。所以你叫Server。但从技术意义上来讲,只有TCP才会分Server和Client。对于UDP来说,从严格意义上来讲,并没有所谓的Server和Client。TCP的Server的插座就叫ServerSocket,Client的插座就叫Socket。

  两台计算机互相连接,那么首先必须得知道它们的IP地址,但是只提供IP地址是不够的,还必须要有连接的端口号,也就是要连接到哪个应用程序上。

  端口号是用来区分一台机器上不同的应用程序的。端口号在计算机内部是占2个字节。一台机器上最多有65536个端口号。一个应用程序可以占用多个端口号。端口号如果被一个应用程序占用了,那么其他的应用程序就无法再使用这个端口号了。记住一点,我们编写的程序要占用端口号的话占用1024以上的端口号,1024以下的端口号不要去占用,因为系统有可能会随时征用。端口号本身又分为TCP端口和UDP端口,TCP的8888端口和UDP的8888端口是完全不同的两个端口。TCP端口和UDP端口都有65536个。

36. sleep和wait的区别有:

  • 这两个方法来自不同的类分别是Thread和Object
  • 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得敏感词线程可以使用同步控制块或者方法 wait,
  • notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
  • sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

37.方法重写应遵循“三同一小一大”原则:

  1. “三同”:即方法名相同,形参列表相同,返回值类型相同;
  2. “一小”:子类方法声明抛出的异常比父类方法声明抛出的异常更小或者相等;
  3. “一大”:子类方法的访问修饰符应比父类方法更大或相等。

38. 重载:指在同一个类中,有多个方法名相同,参数列表不同(参数个数不同,参数类型不同),与方法的返回值无关,与权限修饰符无关

39. replaceAll方法的第一个参数是一个正则表达式,而"."在正则表达式中表示任何字符。

40. session和cookie

  • 1.session用来表示用户会话,session对象在服务端维护,一般tomcat设定session生命周期为30分钟,超时将失效,也可以主动设置无效;
  • 2.cookie存放在客户端,可以分为内存cookie和磁盘cookie。内存cookie在浏览器关闭后消失,磁盘cookie超时后消失。当浏览器发送请求时,将自动发送对应cookie信息,前提是请求url满足cookie路径;
  • 3.可以将sessionId存放在cookie中,也可以通过重写url将sessionId拼接在url。因此可以查看浏览器cookie或地址栏url看到sessionId;
  • 4.请求到服务端时,将根据请求中的sessionId查找session,如果可以获取到则返回,否则返回null或者返回新构建的session,老的session依旧存在,请参考API

41. 隐藏表单域

  • 1 .隐藏域在页面中对于用户是不可见的,在表单中插入隐藏域的目的在于收集或发送信息,以利于被处理表单的程序所使用。浏览者单击发送按钮发送表单的时候,隐藏域的信息也被一起发送到服务器。
  •  2 .有些时候我们要给用户一信息,让他在提交表单时提交上来以确定用户身份,如sessionkey,等等.当然这些东西也能用cookie实现,但使用隐藏域就简单的多了.而且不会有浏览器不支持,用户禁用cookie的烦恼。
  • 3 .有些时候一个form里有多个提交按钮,怎样使程序能够分清楚到底用户是按那一个按钮提交上来的呢?我们就可以写一个隐藏域,然后在每一个按钮处加上 οnclick="document.form.command.value="xx""然后我们接到数据后先检查command的值就会知道用户是按的 那个按钮提交上来的。
  • 4 .有时候一个网页中有多个form,我们知道多个form是不能同时提交的,但有时这些form确实相互作用,我们就可以在form中添加隐藏域来使它们联系起来。
  • 5. javascript不支持全局变量,但有时我们必须用全局变量,我们就可以把值先存在隐藏域里,它的值就不会丢失了。
  • 6. 还有个例子,比如按一个按钮弹出四个小窗口,当点击其中的一个小窗口时其他三个自动关闭.可是IE不支持小窗口相互调用,所以只有在父窗口写个隐藏域,当小窗口看到那个隐藏域的值是close时就自己关掉。

42. JVM在判定两个class是否相同时,不仅要判断两个类名是否相同,而且要判断是否由同一个类加载器实例加载的。

42. Servlet的生命周期

  • 1.初始化阶段  调用init()方法
  • 2.响应客户请求阶段  调用service()方法
  • 3.终止阶段  调用destroy()方法

43. HttpServlet容器响应Web客户请求流程如下:

  • 1)Web客户向Servlet容器发出Http请求;
  • 2)Servlet容器解析Web客户的Http请求;
  • 3)Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息;
  • 4)Servlet容器创建一个HttpResponse对象;
  • 5)Servlet容器调用HttpServlet的service方法,这个方法中会根据request的Method来判断具体是执行doGet还是doPost,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象;
  • 6)HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;
  • 7)HttpServlet调用HttpResponse的有关方法,生成响应数据;
  • 8)Servlet容器把HttpServlet的响应结果传给Web客户。
  • doGet() 或 doPost() 是创建HttpServlet时需要覆盖的方法.

43.

  • Float是类,float不是类.
  • Byte,Character,Short,Integer,Long,Float,Double,Boolean都在java.lang包中.
  • Float正确复制方式是Float f=1.0f,若不加f会被识别成double型,double无法向float隐式转换.
  • Float a= new Float(1.0)是正确的赋值方法,但是在1.5及以上版本引入自动装箱拆箱后,会提示这是不必要的装箱的警告,通常直接使用Float f=1.0f
  • 在Java中,如果你输入一个小数,系统默认的是double类型的,如果想要表达11.1为float类型的,需要在11.1末尾加一个f标识你输入的是float类型即可,float f=11.1;

44.

  • System是java.lang中的类,
  • out为System中的一个静态成员,out是java.io.PrintStream类的对象,
  • 而println()是java.io.PrintStream类的方法,所有可以调用类.静态方法.println()方法。

45. Statement、CallableStatement、PreparedStatement之间的关系

 

46. 封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。(指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。若子类重写了父类中的某些方法,在调用该些方法的时候,必定是使用子类中定义的这些方法(动态连接、动态调用)

47.String 和StringBuffer的区别

JAVA 平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。

48.int和Integer有什么区别?

Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。

引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为null,而原始类型实例变量的缺省值与它们的类型有关。

49.Java中break return continue 区别

  1. continue语句作用。

    <p>continue语句continue语句的一般形式为:continue。</p>
    
    <p>其作用是结束本次循环,即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判定。</p>
    
    <p>执行continue语句并没有使整个循环终止。在while和do-while循环中,continue语句使得流程直接跳到循环控制条件的测试部分 ,然后决定循环是否继续进行。在for 循环中,遇到continue后,跳过循环体中余下的语句,而去对for语句中的“表达式3”求值,然后进行“表达式2”的条件测试。</p>
    
    <p><a href="https://gss0.baidu.com/-vo3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/fc1f4134970a304ec0905312dac8a786c8175cac.jpg" rel="nofollow"><img alt="" class="has" src="https://gss0.baidu.com/-vo3dSag_xI4khGko9WTAnF6hhy/zhidao/wh%3D600%2C800/sign=4eebc59773f0f736d8ab44073a659f21/fc1f4134970a304ec0905312dac8a786c8175cac.jpg"></a></p>
    
    <p><a href="https://gss0.baidu.com/-vo3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/d000baa1cd11728bb2427fcac3fcc3cec2fd2cef.jpg" rel="nofollow"><img alt="" class="has" src="https://gss0.baidu.com/-vo3dSag_xI4khGko9WTAnF6hhy/zhidao/wh%3D600%2C800/sign=bfc230db788da9774e7a8e2d8061d421/d000baa1cd11728bb2427fcac3fcc3cec2fd2cef.jpg"></a></p>
    </li>
    <li>
    <p>return 语句的作用。</p>
    
    <p>return是跳出所有循环,结束方法调用,返回到该调用的方法的语句处,继续执行。</p>
    
    <p>return 返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值 的类型一致,可以使用强制类型转换来是数据类型一致。</p>
    
    <p>return 当方法说明中用void声明返回类型为空时,应使用这种格式,不返回任何值。</p>
    
    <p><a href="https://gss0.baidu.com/-vo3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/8c1001e93901213f15dabe345fe736d12e2e9569.jpg" rel="nofollow"><img alt="" class="has" src="https://gss0.baidu.com/-vo3dSag_xI4khGko9WTAnF6hhy/zhidao/wh%3D600%2C800/sign=64c3bae66c09c93d07a706f1af0dd4e4/8c1001e93901213f15dabe345fe736d12e2e9569.jpg"></a></p>
    </li>
    <li>
    <p>break语句的作用。</p>
    
    <p>只能在循环体内和switch语句体内使用break语句。</p>
    
    <p>当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。</p>
    
    <p>当break出现在循环体中,但并不在switch语句体内时,则在执行break后,跳出本层循环体。</p>
    
    <p>break是跳出本层循环,如果有多层循环,break执行后还要继续执行上一层的循环。</p>
    
    <p><a href="https://gss0.baidu.com/-fo3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/0b46f21fbe096b6380c2aeb807338744eaf8ac7b.jpg" rel="nofollow"><img alt="" class="has" src="https://gss0.baidu.com/-fo3dSag_xI4khGko9WTAnF6hhy/zhidao/wh%3D600%2C800/sign=edb68a1ade62853592b5da27a0df5afe/0b46f21fbe096b6380c2aeb807338744eaf8ac7b.jpg"></a></p>
    </li>
    

50.Java API对Arrays类的说明是:此类包含用来操作数组(比如排序和搜索)的各种方法。

  • Arrays类中的sort()使用的是“经过调优的快速排序法”;
  • 比如int[],double[],char[]等基数据类型的数组,Arrays类之只是提供了默认的升序排列,没有提供相应的降序排列方法。
  • 要对基础类型的数组进行降序排序,需要将这些数组转化为对应的封装类数组,如Integer[],Double[],Character[]等,对这些类数组进行排序。(其实还不如先进行升序排序,自己在转为将序)。
  • 
       
       
    1. int[] a={ 1, 4,- 1, 5, 0};
    2. Arrays.sort(a);

51.Collections.sort();用来对ArrayList进行排序(升序)

Collections是一个工具类,sort是其中的静态方法,是用来对List类型进行排序的


 
 
  1. static List< Integer> intList = Arrays.asList( 2, 3, 1);
  2. Collections. sort(intList);

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值