一、注释
/** */
文档注释;//
、/**/
普通注释- 有关javadoc命令生成文档叙述正确的是()
A.如果是一个包命令为javadoc –d docDir nameOfPackage
B.如果是一个包命令为javadoc –d docDir nameOfPackages
C.如果文件在默认包中命令为javadoc –d docDir *.java
D.如果文件在默认包中命令为javadoc –d docDir *.javac
【正确答案】A,C
【答案解析】此题目考查javadoc
命令生成文档的了解,BD语法错误,AC均正确 - 文档注释规范说明:
@author Lee Boynton
代表作者@version 1.2.1
代表版本号@see import java.util.Arrays;
代表参见@since JDK1.8
代表JDK版本
二、字符串操作
- 正则表达式
"\d+\.?\d{1,2}"
在匹配下列字符串时结果失败的是( )
A.“12.5”
B.“1.025”
C.“0125”
D.“125.00”
【正确答案】B
【答案解析】\d+
表示可以出现 1 次或是n
次数字;\. ?
表示"."
可以出现 1 次,也可以不出现;\d{1,2}
表示最少出现 1 次 最多出现 2 次数字 - Java 语言中,
String
类的indexOf()
方法返回的类型是( )
A.int16
B.int32
C.int
D.long
【正确答案】C
【答案解析】indexOf
方法的声明为:public int indexOf(int ch)
在此对象表示的字符序列中第一次出现该字符的索引;如果未出现该字符,则返回-1
- 下面代码的打印结果是
A.true,trueString s1 = "abc"; String s2 = "abc"; System.out.println(s1 == s2); System.out.println(s1.equals(s2));
B.true,false
C.false, false
D.false,ture
【正确答案】A
【答案解析】此题目考查的是对于Java常量池的理解,Java中的常量池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节省了很多时间。常量池其实也就是一个内存空间,常量池存在于方法区中。根据代码顺序,先在常量池中创建”abc“
,并指向s1
,而后在创建s2
时,由于常量池中已经存在”abc“
,只需指向s2
就可以,而不需要再创建。”==”
在这里比较的是对象引用,故结果为true
,String
中的equals
方法经过重写后操作为“比较此字符串与指定的对象。当且仅当该参数不为 null,并且是表示与此对象相同的字符序列的String
对象时,结果才为true
。很明显,s1
和s2
的字符序列相同,故而结果为true
- 关于
java.lang.String
类,以下描述正确的一项是( )
A.String
类是final
类故不可以继承
B.String
类是final
类故可以继承
C.String
类不是final
类故不可以继承
D.String
类不是final
类故可以继承
【正确答案】A
【答案解析】String
类是final
的,在 java 中final
修饰类的不能被继承 System.out.println("5" + 2);
的输出结果应该是()
A.52
B.7
C.2
D.5
【正确答案】A
【答案解析】因为5是字符串类型的不会和2进行+运算,会进行拼接String
为引用数据类型,引用类型数据成员的默认值为null
String
类型变量取值应为小写null
或其他用""
双引号括起来的内容- 已知如下代码:
String s = "Example";
下列选项中可以编译通过的是( )
A.s>>>=3;
B.s[3] = "X";
C.int i = s.length;
D.s = s +10;
【正确答案】D
【答案解析】选项A,移位运算需要整数类型才可以;选项B,s
不是数组,数组才有length
属性,字符串只有length()
方法;选项C,String
类有length()
方法而不是属性;选项D,属于字符串拼接操作 - 查看如下代码:
下列哪些表达式返回String s = new String("hello"); String t = new String("hello"); char c [ ] = {'h', 'e', 'l', 'l', 'o'};
true
( )
A.s.equals(t);
B.t.equals(c);
C.s==t;
D.t.equals (new String("hello"));
【正确答案】A,D
【答案解析】String
类的equals
方法已经覆盖了Object
类的equals
方法,比较的是两个字符串的内容是否相等,双等号比较的是两个对象的内存地址是否相等
三、Object
- 以下关于
hashCode
说法正确的是( )
A.两个对象如果hashCode
值不同,则两个对象可能相同
B.两个对象如果hashCode
值相同,则两个对象必定相同
C.两个对象如果hashCode
值相同,则两个对象可能相同
D.两个对象如果hashCode
值不同,则两个对象必定不同
【正确答案】C,D
【答案解析】先通过hashcode
来判断某个对象是否存放某个桶里,但这个桶里可能有很多对象,那么我们就需要再通过equals
来在这个桶里找到我们要的对象 equals()
方法用来判断字符串的内容是否相同==
用来比较字符串对象的地址是否相同=
用来赋值
四、包装类
- 下面代码的执行结果是( )
A.1import java.util.*; public class ShortSet { public static void main(String args[]) { Set<Short> s = new HashSet<Short>(); for(Short i = 0; i < 100; i++) { s.add(i); s.remove(i - 1); } System.out.println(s.size()); } }
B.100
C.Throws Exception.
D.None of the Above.
【正确答案】B
【答案解析】i
是short
类型;i-1
是int
类型,其包装类为Integer
,所以s.remove(i-1);
不能移除Set
集合中short
类型对象
五、集合框架
- 如果要保证元素唯一,且按照存放顺序读取,可以选用
LinkedHashSet
- 欲构造
ArrayList
类的一个实例,此类继承了List
接口,下列哪个方法是正确的( )
A.ArrayList myList = new Object();
B.List myList = new ArrayList();
C.ArraylList myList = new List();
D.List myList = new List();
【正确答案】B
【答案解析】接口不能new
,Object
对象不能直接转型成ArrayList
类型 - 以下哪个不是
Collection
的子接口( )
A.List
B.Set
C.Map
D.SortedSet
【正确答案】C
【答案解析】Map
与Collection
是两个不同的接口,没有继承关系 - 关于以下代码描述正确的有( )
A.编译失败public class Cats { public static void main(String args[]) { List<Cat> cats = new ArrayList<Cat>(); cats.add(new Cat()); Animal b = new Animal(); Cat a = null; if(b instanceof Animal) a = (Cat) b; if(a != null) cats.add(a); System.out.println(cats.size() + "cats"); } } class Animal {} class Cat extends Animal {}
B.输出1 cats
C.输出2 cats
D.运行时抛出异常
【正确答案】D
【答案解析】a = (Cat)b;
处抛出java.lang.ClassCastException
异常,b
为Animal
类型,并且具体引用对象是Animal
对象,不能强转成Cat
类型 - 下面哪个是链式存储并快速顺序(不需要随机访问)访问的集合类型( )
A.java.util.LinkedList
B.java.util.Queue
C.java.util.ArrayList
D.java.util.LinearList
【正确答案】B
【答案解析】考查集合队列的结构特点及元素的存取 - Java的集合框架中重要的接口
java.util.Collection
定义了许多方法。选项中哪个方法不是Collection
接口所定义的( )
A.int size()
B.boolean containsAll(Collection c)
C.int compareTo(Object obj)
D.boolean equals(Object o)
【正确答案】C
【答案解析】考查api
文档手册 - 关于集合类以下说法错误的是( )
A.Vector
是线程安全的
B.ArrayList
是线程安全的
C.HashMap
中可以存放null
值作为key
D.Set
中存放的对象是唯一的
【正确答案】B
【答案解析】ArrayList
不是线程安全的 - 请选出下列正确的答案( )
A.11. import java.util.*; 2. public class WrappedString { 3. private String s; 4. public WrappedString(String s) { this.s = s; } 5. public static void main(String[] args) { 6. HashSet<Object> hs = new HashSet<Object>(); 7. WrappedString ws1 = new WrappedString("aardvark"); 8. WrappedString ws2 = new WrappedString("aardvark"); 9. String s1 = new String("aardvark"); 10. String s2 = new String("aardvark"); 11. hs.add(ws1); hs.add(ws2); hs.add(s1); hs.add(s2); 12. System.out.println(hs.size()); 13. } 14. }
B.4
C.2
D.3
【正确答案】D
【答案解析】HashSet
集合里面存储的元素是无序的且不重复的,本题中的是s1
和s2
两个对象在底层判断时返回的相关信息被视为相同元素,所以最终结果集合中值有3
个元素 - 下面代码的执行结果是( )
A.1import java.util.*; public class ShortSet { public static void main(String args[]) { Set<Short> s=new HashSet<Short>(); for(Short i=0;i<100;i++) { s.add(i); s.remove(i-1); } System.out.println(s.size()); } }
B.100
C.Throws Exception.
D.None of the Above.
【正确答案】B
【答案解析】i
是Short
类型i-1
是int
类型,其包装类为Integer
,所以s.remove(i-1);
不能移除Set
集合中Short
类型对象
Map
HashSet
子类依靠( )方法区分重复元素。
A.toString(),equals()
B.clone(),equals()
C.hashCode(),equals()
D.getClass(),clone()
【正确答案】C
【答案解析】HashSet
内部使用Map
保存数据,即将HashSet
的数据作为Map
的key
值保存,这也是HashSet
中元素不能重复的原因。而Map
中保存key
值前,会去判断当前Map
中是否含有该key
对象,内部是先通过key
的hashCode
,确定有相同的hashCode
之后,再通过equals
方法判断是否相同- 以下哪个不是
Collection
的子接口?( )。
A.List
B.Set
C.Map
D.SortedSet
【正确答案】C
【答案解析】Map
与Collection
是两个不同的接口,没有继承关系
File
- 在Java中,"目录"被看作是()
A.文件
B.流
C.数据
D.接口
【正确答案】A
【答案解析】目录在Java中作为一种特殊文件,即文件名的列表,通过类File
所提供的方法,可得到文件或目录的描述信息(包括名字、路径、长度、可读、可写等),也可以生成新文件、目录、修改文件和目录,查询文件属性,重命名文件或者删除文件
RandomAccessFile
RandomAccessFile
是java.io
包中的一个兼有输入输出功能的类。以下说法正确的是()
A.可以选择文件中的任意位置开始操作
B.必须从文件中的终止位置开始操作
C.必须从文件中的起始位置开始操作
D.必须从文件中的某个固定位置开始操作
【正确答案】A
【答案解析】文件操作中经常需要的是随机访问,Java中的RandomAccessFile
类提供了随意访问文件的功能,它继承了Object
类,用DataInput
和DataOutput
接口来实现。接口中定义了从流中读/写基本类型的数据方法,因此也可以随意读/写数据文件的记录
I/O
FilterOutputStream
是BufferedOutputStream
、DataOutputStream
及PrintStream
的父类,以下哪个类可能是FilterOutputStream
构造函数的参数类型( )
A.OutputStream
B.File
C.InputStream
D.BufferedOutputStream
【正确答案】A
【答案解析】请参考api
文档手册- 流,最早从C语言中引入的。其可以看成是一个流动的数据缓冲区。数据从数据源方向经过缓冲区流向数据的目的地。在传送的过程中,其传送方式是串行的。在Java中的
java.io
包中定义了Java中常见流的接口与类。其中包括两个最基本的流的抽象类,它们分别是OutputStream
与InputStream
。其余的流都分别从这两个基本类中继承而来 - OutputStream用于写操作;InputStream用于读操作且是抽象类不是接口;I/O支持对文件的读写
- 下面哪个流类属于面向字符的输入流( )
A.ByteArrayInputStream
B.FileInputStream
C.ObjectInputStream
D.InputStreamReader
【正确答案】D
【答案解析】A、B、C选项,3个都是字节流
异常处理
- 下列不是异常体系中
Exception
类包括的异常类的有( )
A.Error
B.NullPointerException
C.SQLException
D.InputMismathException
【正确答案】A
【答案解析】一个程序在编译和运行时出现的错误我们统一称之为异常; 一个合理的应用程序不能截获的严重的问题属于错误 getCustomerInfo()
方法如下,try
中可以捕获三种类型的异常,如果在该方法运行中产生了一个IOException
,将会输出什么结果()
A.IOException!public void getCustomerInfo() { try { // do something that may cause an Exception } catch (java.io.FileNotFoundException ex) { System.out.print("FileNotFoundException!"); } catch (java.io.IOException ex) { System.out.print("IOException!"); } catch (java.lang.Exception ex) { System.out.print("Exception!"); } }
B.IOException!Exception!
C.FileNotFoundException!IOException!
D.FileNotFoundException!IOException!Exception!
【正确答案】A
【答案解析】考察多个catch
语句块的执行顺序。当用多个catch
语句时,catch
语句块在次序上有先后之分。从最前面的catch
语句块依次先后进行异常类型匹配,这样如果父异常在子异常类之前,那么首先匹配的将是父异常类,子异常类将不会获得匹配的机会,也即子异常类型所在的catch
语句块将是不可到达的语句。所以,一般将父类异常类即Exception
总放在catch
语句块的最后一个- 下列哪种异常是检查型异常,需要在编写程序时声明( )
A.NullPointerException
B.ClassCastException
C.FileNotFoundException
D.IndexOutOfBoundsException
【正确答案】C
【答案解析】A、B、D选项,3个异常都属于运行时异常 - 下面关于java.lang.Exception类的说法正确的是()
A.继承自Throwable
B.继承自Serialable
C.继承自Error
D.以上说法均不正确
【正确答案】A
【答案解析】Java异常的基类为java.lang.Throwable
,java.lang.Error
和java.lang.Exception
继承Throwable
,RuntimeException
和其它的Exception
等继承Exception
- 下列选项中可以填写在’Point X’处的是()
A.throws TestExceptionpublic class ExceptionTest { class TestException extends Exception {} public void runTest () throws TestException {} public void test () /* Point X*/{ runTest (); } }
B.catch (Exception e)
C.throws RuntimeException.
D.catch (TestException e).
【正确答案】A
【答案解析】方法上应使用throws
抛出异常,test()
方法中执行调用了runTest()
方法,而runTest()
方法抛出的是TestException
异常 final
、finally
、finalize
三个关键字的区别是()
A.final是修饰符(关键字)可以修饰类、方法、变量
B.finally在异常处理的时候使用,提供finally块来执行任何清除操作
C.finalize是方法名,在垃圾收入集器将对象从内存中清除出去之前做必要的清理工作
D.finally和finalize一样都是用异常处理的方法
【正确答案】A,B,C
【答案解析】finally
是关键字不是方法- 关于异常(
Exception
),下列描述正确的是( )
A.异常的基类为 Exception,所有异常都必须直接或者间接继承它
B.异常可以用 try{ . . .}catch(Exception e){ . . .}来捕获并进行处理
C.如果某异常继承 RuntimeException,则该异常可以不被声明
D.异常可以随便处理,而不是抛给外层的程序进行处理
【正确答案】A,B,C
【答案解析】异常可以在自己方法内部处理,当自己无法解决时,需要抛出给调用者来处理
线程
run
方法是线程的执行体- 关于线程设计,下列描述正确的是( )
A.线程对象必须实现Runnable
接口
B.启动一个线程直接调用线程对象的run()
方法
C.Java提供对多线程同步提供语言级的支持
D.一个线程可以包含多个进程
【正确答案】C
【答案解析】A. 线程对象也可以继承Thread
B. 启动线程需要调用start()
方法 D. 一个进程可以包含多个线程 - 下列程序的功能是在控制台上,每隔1秒钟显示字符串
"Hello"
,能够填写在程序中下划线位置,使程序完整,并能够正确运行的语句是( )
A.Thread. sleep (1000) InterruptedExceptionpublic class Test implements Runnable{ public static void main(String[] args){ Test t=new Test(); Thread tt=new Thread(t); tt.start(); } public void run(){ for(;;){ try{ __________ }catch(_________ e ){} System.out.println(“Hello”); } } }
B.sleep (1000) InterruptedException
C.t. sleep (1000) InterruptedException
D.Thread. sleep (1000) RuntimeException
【正确答案】A
【答案解析】睡眠需要调用Thread
的sleep
方法,传入参数为一个long
类型毫秒值,本题中要求间隔时间为1秒,所以需要传入1000毫秒作为参数。打断睡眠程序会抛出InterruptedException
异常 - 下列有关线程的说法正确的是( )
A.启动一个线程是调用start()方法,是线程所代表的虚拟处理机处于可运行状态,这意味着线程此时就会立即运行。
B.notify()方法可以确切的唤醒某个处于等待状态的线程。
C.wait()方法可以使一个线程处于等待状态,但不会释放所持有对象的锁。
D.sleep()方法使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法时,需要捕捉InterruptedException异常。
【正确答案】D
【答案解析】线程调用start
方法后不会立即运行此线程,而是将该线程处于就绪状态;notify
方法不能确切唤醒某个整处于等待状态的线程,而是需要通过其他线程来调用该等待线程中的notify
方法来唤醒该线程;wait
方法会释放掉锁 - 请选出正确的一项( )
A.Compilation fails.1. public class ThreadTest { 2. public static void main (String[] args) { 3. new Thread(new Runnable() { 4. public void run() { 5. System.out.print("bar"); 6. }}).start(); 7. } 8. }
B.An exception is thrown at runtime.
C.The code executes normally, but nothing prints.
D.The code executes normally and prints “bar”.
【正确答案】D
【答案解析】此段代码使用的是匿名类的写法,线程执行时,所执行的内容是其执行计划中的内容,也就是run
方法中所定义的逻辑 - java
Thread
中,run
方法和start
方法的区别,下面说法错误的是?
A.通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行
B.他们都可以实现了多线程运行
C.run方法是thread的一个普通方法调用
D.调用start方法后,一旦得到cpu时间片,就开始执行run()方法
【正确答案】B
【答案解析】两种方法的区别:
1.start
方法:用start
方法来启动线程,是真正实现了多线程, 通过调用Thread
类的start
方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run
方法。但要注意的是,此时无需等待run
方法执行完毕,即可继续执行下面的代码。所以run
方法并没有实现多线程
2.run
方法:run
方法只是类的一个普通方法而已,如果直接调用run
方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run
方法体执行完毕后才可继续执行下面的代码 suspend
方法可以挂起一个线程,就是把这个线程暂停了,它占着资源,但不运行,用resume
方法是恢复挂起 的线程,让这个线程继续执行下去- 以下哪一个是错误的( )
A.public synchronized void go() { /* code here / }
B.private synchronized(this) void go() { / code here / }
C.void go() {
Object o = new Object();
synchronized(o) { / code here / }
}
D.synchronized(Object.class) { / code here */ }
【正确答案】B
【答案解析】如果在方法声明时给该方法加锁,只需要使用synchronized
关键字来修饰该方法即可,不需要传入任何对象,只有在方法内部的某些代码块中才需要传入对象参数 - 在主线程中启动新线程后,新线程处于就绪状态,那么新线程对象中的哪个方法被系统执行时,视为已经进入执行新线程的内容( )
A.public void start()
B.public void run()
C.public static void main(Stirng[] args)
D.public void runnable()
【正确答案】B
【答案解析】线程的执行计划是在run
方法中的 - 线程生命周期:新建状态、可运行状态、运行状态、阻塞状态和终止状态
- 有关线程的哪些叙述是对的( )
A.一旦一个线程被创建,它就立即开始运行。
B.使用 start()方法可以使一个线程成为可运行的,但是它不一定立即开始运行。
C.当一个线程因为抢先机制而停止运行,它被放在可运行队列的前面。
D.一个线程可能因为不同的原因停止并进入就绪状态。
【正确答案】B,D
【答案解析】线程被创建后不可能立即开始运行。 不同优先级的线程间是抢先式的,同级线程间是轮转式的。 即使线程因为抢先而停止也不一定就进入可运行队列的前面。 而同级线程是轮换式的,它的运行可能就是因为轮换,而它因抢占而停止后只能在轮换队列中排队而不能排在前面 - 下面能让线程停止执行的有( )
A.sleep();
B.stop();
C.notify();
D.wait();
【正确答案】A,B,D
【答案解析】sleep
:导致此线程暂停执行指定时间;stop
:这个方法将终止所有未结束的方法,包括run
方法;wait
:当前正在被服务的线程需要睡一会,醒来后继续被服务
XML解析
- XML文档注释符号是
<!-- -->
- java解析XML文件四种方式:
SAX、DOM、JDOM、DOM4J
- XML元素必须遵循以下命名规则: 名称可以含字母、数字以及其他的字符; 名称不能以数字或者标点符号开始; 名称不能以字符 “xml”(或者 XML、Xml)开始; 名称不能包含空格; 可使用任何名称,没有保留的字词
-
关于上述DTD 定义的描述正确的是( )<?xml version="1.0" encoding="GB2312"?> <!ELEMENT Customer EMPTY> <!ATTLIST Customer 称呼 CDATA #IMPLIED 姓名 CDATA #REQUIRED 职位 CDATA #REQUIRED>
A.Customer 元素能包含子元素,并且能为空
B.Customer 元素能包含文本,并且能为空
C.Customer 元素不能包含文本,也不能包含子元素
D.Customer 元素的所有实例的“称呼”属性必须有值,不能为空
【正确答案】C
【答案解析】EMPTY
表示元素不能包含文本,也不能包含子元素;#IMPLIED
属性可以没有值;#REQUIRED
属性必须有值 - 定义xml文档时通过命名空间来避免重复的命名
- xml文档中实体符号是用
&
作为开头的 - 定义xml文档时,通过
encoding
属性来指定字符集 Schema
与DTD
的相同之处有( )
A.基于XML语法
B.支持命名空间
C.可扩展
D.对XML文档结构进行验证
【正确答案】D
【答案解析】DTD
不遵循XML语法;DTD
不支持命名空间;DTD
不可扩展- 下列选项中,哪一个是预定义实体?( )
A.<
B.&left;
C.>
D.&right;
【正确答案】A,C
【答案解析】表示>
号 - 在XML中,下列关于
DOM
的叙述是正确的( )
A.DOM是独立于开发语言和平台的,因此使用Visnal Basic、Java、Visual C++等开发工具使用的DOM编程API是一致的
B.XML文档通过load方法被装载进内存后,在内存中形成一个DOM文档对象模型树
C.通过DOM API,软件开发人员可以控制XML文档的结构和内容
D.通过DOM在XML文档中只能按照顺序方式导航
【正确答案】A,B,C
【答案解析】选项D错误,SAX解析文档需要按照顺序,DOM
可以随意 - 以下说法符合
xml
语法规则的是( )
A.标记头和标记末的大小写一致
B.元素之间要正确的嵌套
C.结束标记可有可无
D.每个XML文档只能有一个根元素
【正确答案】A,B,D
【答案解析】XML语法规则: 必须有XML声明语句; 是否有DTD
文件; 注意大小写; 给属性值加引号; 所有的标识必须有相应的结束标识; 所有的空标识也必须被关闭 - 以下声明正确的是( )
A.<xml-stylesheet type="txt/css" href="abc.css">
B.<?xml-stylesheet type='txt/css' href='abc.css'?>
C.<?xml-stylesheet type="txt/css" href="abc.css"?>
D.<%xml-stylesheet type="txt/css" href="abc.css"%>
【正确答案】B,C
【答案解析】单引号,双引号都可以使用在属性上
进制
- 二进制数左移一位相当于数位上的数值乘以2,右移一位相当于数位上的数值除以2
- 阅读下列代码 :
其运行结果是 ()public class Test{ public static void main(String args[]){ System.out.println(89 >>1); } }
A.44
B.45
C.88
D.90
【正确答案】A
【答案解析】89>>1
相当于89X(1/2)
取整 - 已知如下代码片段:
- public class test {
- public static void main (String args[]) {
- int i = 0xFFFFFFF1;
- int j = ~i;
- }
7.}
当程序运行到第5行时, i 和 j 的值分别为多少( )
A.–15
B.0
C.1
D.14
【正确答案】A,D
【答案解析】0xFFFFFFF1
为十六进制数,其转为二进制数为11111111 11111111 11111111 11110001
,所对应的十进制数为-15
,"~"
符号为取反操作,即将0、1
对换,结果为00000000 00000000 00000000 00001110
,该二进制数转为十进制数结果为14
api
- 下列代码中,哪一项可以编译通过且正常运行出结果( )
A.int foo = (int) Math.max(bar);
B.int foo = (int) Math.min(bar);
C.int foo = (int) Math.abs(bar);
D.int foo = (int) Math.ceil(bar);
【正确答案】C,D
【答案解析】A,B两个选项方法使用错误,都是两个参数。
abs
方法是取bar
的绝对值,ceil
方法返回大于或者等于指定表达式的最小整数,即向上取整,本题中该值大于等于参数bar
例如:Math.ceil(5.6) //6 Math.ceil(-5.6) //-5