java方法的重载的规则
- 格式:docx
- 大小:4.03 KB
- 文档页数:5
java中方法重载方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。
调用重载方法时,Java编译器能通过检查调用的方法的参数类型和个数选择一个恰当的方法。
方法重载通常用于创建完成一组任务相似但参数的类型或参数的个数不同的方法。
java中重载与重写的区别首先我们来讲讲:重载(Overloading)(1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。
多个同名函数同时存在,具有不同的参数个数/类型。
重载Overloading是一个类中多态性的一种表现。
(2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。
调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。
(3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。
无法以返回型别作为重载函数的区分标准。
下面是重载的例子:package c04.answer;//这是包名//这是这个程序的第一种编程方法,在main方法中先创建一个Dog类实例,然后在Dog 类的构造方法中利用this关键字调用不同的bark方法。
不同的.重载方法bark是根据其参数类型的不同而区分的。
//注意:除构造器以外,编译器禁止在其他任何地方中调用构造器。
package c04.answer;public class Dog {Dog(){this.bark();}void bark()//bark()方法是重载方法{System.out.println(\ no barking!\this.bark(\ female\ , 3.4);}void bark(String m,double l)//注意:重载的方法的返回值都是一样的,{System.out.println(\ a barking dog!\this.bark(5, \ China\}void bark(int a,String n)//不能以返回值区分重载方法,而只能以参数类型和类名来区分{System.out.println(\ a howling dog\}public static void main(String[] args){Dog dog = new Dog();//dog.bark(); [Page]//dog.bark(\ male\ , \ yellow\//dog.bark(5, \ China\然后我们再来谈谈重写(Overriding)(1) 父类与子类之间的多态性,对父类的函数进行重新定义。
java重载方法的特征Java的重载方法是指在同一个类中定义了多个方法,它们具有相同的名称但是不同的参数列表。
重载方法在Java中是一种多态性的体现,它允许我们使用相同的方法名来调用不同的方法。
重载方法具有以下的特征:1.方法名相同:重载方法的名称必须相同。
2.参数列表不同:重载方法的参数列表必须不同,可以是参数类型不同、参数个数不同或参数顺序不同。
3.返回类型可以相同也可以不同:重载方法的返回类型可以相同,也可以不同。
唯一的限制是不能仅仅通过返回类型的不同来进行方法的重载。
4.可以有不同的访问修饰符:重载方法可以有不同的访问修饰符,比如public、private或protected。
5.可以抛出不同的异常:重载方法可以抛出不同的异常,也可以不抛出异常。
重载方法的使用有以下的优点和特点:1.提高代码的可读性:通过使用重载方法,可以使用相同的方法名来表达不同的意义,这使得代码更加直观和易于理解。
2.简化编程:通过使用重载方法,可以避免定义大量类似的方法,从而简化了代码的编写过程。
3.提高代码的可维护性:重载方法使得代码更加模块化,当需要修改某个功能时,只需要修改对应的方法,而无需修改其他方法,这提高了代码的可维护性。
4.增加灵活性:通过使用重载方法,可以根据不同的参数类型或参数个数进行适应性的操作,从而增加了代码的灵活性。
在使用重载方法时,需要注意以下几点:1.不能仅仅通过返回类型的不同来进行方法的重载,因为Java编译器无法根据返回类型来确定具体调用哪个方法。
2.当重载方法的参数列表中有继承关系的参数类型时,需要注意参数类型的匹配规则。
例如,如果有一个重载方法的参数类型为Object,而另一个重载方法的参数类型为String,当调用方法时传入一个String对象时,编译器会优先选择参数类型为String的方法,而不会选择参数类型为Object的方法,因为String是Object的子类。
3.在重载方法中,参数个数和参数类型越多,重载方法的区分度就越高。
第一章:1、CPU指的是运算器和CRT F×2、计算机与一般计算装置的本质区别是它具有存储程序和程序控制功能T*√3、在计算机中,控制器是执行算术运算和逻辑运算的部件,它的任务是对信息进行加工处理。
×4、程序在运行时发现的错误一般是程序语法上的错误。
√*5、第一代计算机时期没有操作系统。
√6、计算机中数值数据一般采用补码形式存储。
√7、利用Java语言可以开发客户端Java小程序和应用程序,以及独立的服务器应用程序等。
√8、Java2技术分为J2EE、J2SE和J2ME,其中J2SE是Java的企业版,用来针对企业级进行应用服务的开发。
×9、Java语言适合开发跨平台的应用程序。
√10、Java语言适合用来开发系统程序,像很多的操作系统及驱动程序都是用Java来编写的。
×11、Java源程序文件扩展名必须为.java,但文件名不必与(主)类名保持一致。
×12、Java的平台无关性主要是依靠JRE实现的。
×13、与Java应用程序(Application)不同,Java Applet程序的运行,需要得到客户端浏览器的支持。
√14、安装JDK时,需要配置环境变量path、classpath和JA V A_HOME。
√第三章:1、J2EE企业版是以企业为环境而开发应用程序的解决方案。
√2、J2ME小型版是致力于消费产品和嵌入式设备的最佳解决方案。
√3、J2SE标准版为桌面开发和低端商务应用提供了可行的解决方案。
√4、Java是区分大小写的语言,关键字的大小写不能搞错,如果把类class写成Class或者CLASS,都是错误的。
√5、Java源程序编写好之后,以文件的形式保存在硬盘或U盘上,源文件的名字可以随便取的,它不一定与程序的主类名一致。
×6、在JDK命令行开发工具中,用编译程序javac.exe编译生成的文件是二进制可执行文件。
Java中的⽅法覆盖(Overriding)和⽅法重载(Overloading)是什么意思? ⽅法覆盖也称为重写,重写即⼦类重新定义了⽗类的⽅法。
重写: 1、重写的⽅法必须与原⽅法有相同的⽅法名、参数列表和返回值类型(Java SE5之后返回值类型可以是其类型的⼦类型) 2、被重写的⽅法不能是final类型,因为final类型⽆法重写 3、被重写的⽅法不能是private,因为private⽆法继承,⽽继承是重写的前提 4、被重写的⽅法不能为static,如果⽗类中的⽅法为静态,⽽⼦类的⽅法不是静态的,但是两个⽅法除了这⼀点其他都满⾜重写条件,那么会发⽣编译错误,反之亦然。
如果⼦类和⽗类中的⽅法都是静态的,并且满⾜重写条件,但仍然不会发⽣重写,因为静态⽅法是在编译时把静态⽅法和类的引⽤进⾏匹配。
5、重写的⽅法的访问权限不能⼩于原⽅法 6、重写抛出的异常的范围不能⼤于原⽅法 7、重写是在运⾏是发⽣的,JVM会在代码运⾏时作出决定。
⽅法重载简称重载,重载即同⼀个类中两个或多个⽅法名相同但参数不同的情况重载: 1、⽅法名必须相同 2、参数列表必须不同(参数的个数,类型,顺序不同) 3、⽅法的返回类型可以相同也可以不同 4、仅仅返回值类型不同不⾜以成为⽅法的重载 5、重载是发⽣在编译时的,因为编译器可以根据参数类型来选择使⽤哪个⽅法重写和重载的区别: 1、重写只能⽤于⼦类重写⽗类的⽅法,⽽重载⽤于同⼀类中的所有⽅法 2、重写的参数列表必须相同,重载的参数列表必须不同 3、重写要求返回值类型必须⼀致或是其⼦类,重载没有要求 4、重写对⽅法的访问权限和抛出异常有特殊的要求,⽽⽅法的重载没有这⽅⾯的限制 5、⽗类的⽅法只能被同⼀⼦类重写⼀次,⽽⼀个⽅法可以在所有类中被重载很多次 6、重写是运⾏时的多态,重载是编译时的多态。
新员工考试一、选择题共30题,每题2分1.下面哪些是合法的标识符多选题A. $personsB. TwoUsersC. pointD. thisE. _endline答案A,B,E分析Java的标识符可以以一个Unicode字符,下滑线_,美元符$开始,后续字符可以是前面的符号和数字,没有长度限制,大小写敏感,不能是保留字this保留字;2.哪些是将一个十六进制值赋值给一个long型变量单选题A. long number = 345L;B. long number = 0345;C. long number = 0345L;D. long number = 0x345L答案 D分析十六进制数以0x开头,long型数以L大小写均可,一般使用大写,因为小写的l 和数字1不易区分;3.下面的哪些程序片断可能导致错误多选题A. String s = "Gone with the wind";String t = " good ";String k = s + t;B. String s = "Gone with the wind";String t;t = s3 + "one";C. String s = "Gone with the wind";String standard = s.toUpperCase;D. String s = "home directory";String t = s - "directory";答案B,D分析A:String类型可以直接使用+进行连接运算;B:String是一种Object,而不是简单的字符数组,不能使用下标运算符取其值的某个元素,错误;C:toUpperCase方法是String对象的一个方法,作用是将字符串的内容全部转换为大写并返回转换后的结果String类型;D:String类型不能进行减-运算,错误;4.point x处的哪些声明是句法上合法的多选题class Person {private int a;public int changeint m{ return m; }}public class Teacher extends Person {public int b;public static void mainString arg{Person p = new Person;Teacher t = new Teacher;int i;// point x}}A. i = m;B. i = b;C. i = p.a;D. i = p.change30;E. i = t.b.答案D,E分析A:m没有被声明过,不能使用;B:虽然b是类Teacher的public成员变量,但是在静态方法中不能使用类中的非静态成员;C:a是类Person的private成员,在类外不能直接引用;D:changeint m方法是public方法,并且返回一个int型值,可以通过类的实例变量p引用并赋值给一个int型变量;E:b是类Teacher的public成员变量,且是int型,可以通过类的实例变量t引用并赋值给一个int型变量;5.下面的代码片断多选题:1 public void create {2 Vector myVect;3 myVect = new Vector;4 }下面的哪些陈述正确A. 第二行的声明不会为变量myVect分配内存空间;B. 第二行的声明分配一个到Vector对象的引用的内存空间;C. 第二行语句创建一个Vector类对象;D. 第三行语句创建一个Vector类对象;E. 第三行语句为一个Vector类对象分配内存空间;答案A,D,E分析要为一个新对象分配空间必须执行new Xxx调用,new调用执行以下的操作:1.为新对象分配空间并将其成员初始化为0或者null;2.执行类体中的初始化;例如在类中有一个成员声明int a=10;在第一步后a=0 ,执行到第二步后a=103.执行构造函数;4.变量被分配为一个到内存堆中的新对象的引用;6.下面的哪些答案可以用以表示八进制值8 单选题A. 010B. 0x10C. 08D. 0x8答案 A分析八进制值以0开头,以0x开头的为十六进制值,八进制中不能出现数字8,最大只有7;1 class Person {2 public void printValueint i, int j {/…/ }3 public void printValueint i{/.../ }4 }5 public class Teacher extends Person {6 public void printValue {/.../ }7 public void printValueint i {/.../}8 public static void mainString args{9 Person t = new Teacher;10 t.printValue10;11 }12 }第十行的声明将调用哪些方法单选题A. on line 2B. on line 3C. on line 6D. on line 7答案 D分析变量t是一个Person对象,但是它是用Teacher实例化的,这个问题涉及到java的编译时多态和运行时多态的问题,就编译时多态来说,t实际上是一个Person类,这涉及到类型的自动转换将一个子类的实例赋值给一个父类的变量是不用进行强制类型转换,反之则需要进行强制类型转换,而且被赋值的变量实际上应该是一个子类的对象,如果对t调用了子类中新增的方法则造成编译时错误编译将不能通过,而在运行时,运行时系统将根据t实际指向的类型调用对应的方法,对于本例来说,t.print10将调用t实际指向的Teacher类的对应方法;在java中,可以用一个子类的实例实例化父类的一个变量,而变量在编译时是一个父类实例,在运行时可能是一个子类实例;7.给出下面的代码:单选题x的取值在什么范围内时将打印字符串"second";A. x > 0B. x > -3C. x <= -3D. x <= 0 & x > -3答案 D分析x>0时打印"first",x>-3&&x<=0时打印"second",x<=-3时打印"third";这个题目没有什么难的,只要理解if语句的语法就可以了;8.下面的哪些赋值语句是不正确的单选题A. float f = 11.1;B. double d = 5.3E12;C. double d = 3.14159;D. double d = 3.14D.答案 A题目:;浮点数的赋值是带有小数点的数字缺省是double型的,如果在浮点数后面加f或者F则是float,后面加d或者D则是double,科学计数法形式的浮点数也是double型的,而double的精度比float高,将一个高精度的double赋值给一个低精度的float时需要进行强制类型转换,反之则不需要;9.给出下面的不完整的类代码: 单选题class Person {String name, department;int age;public PersonString n{ name = n; }public PersonString n, int a{ name = n; age = a; }public PersonString n, String d, int a {// doing the same as two arguments version of constructor// including assignment name=n,age=adepartment = d;}}下面的哪些表达式可以加到构造方法中的"doing the same as..."处A. Personn,a;B. thisPersonn,a;C. thisn,a;D. thisname,age.答案 C分析:在同一个类的不同构造方法中调用该类的其它构造方法需要使用this…的形式,而且必须是在构造方法的第一行调用,这个和普通的方法重载调用的方式不同,普通的方法可以直接使用方法名加参数来调用,而且调用位置没有限制,因此答案A是不行的,B的语法就是错误的,D的错误在于在父类型的构造函数被调用前不能引用类的成员;构造方法是一个类对象实例化的起点虽然严格来说首先执行的并不是构造方法的第一个语句,而是内存的分配,因此在构造方法中不能将成员作为参数引用;10.public void test {// 多选题try {oneMethod;} catch ArrayIndexOutOfBoundsException e {} catchException e {} finally {}}在oneMethod方法运行正常的情况下将显示什么A. condition 1B. condition 2C. condition 3D. finally答案 ad分析:如果try块中的语句在执行时发生异常,则执行从该处中断而进入catch块,根据异常的类型进行匹配,最前面的优先进行匹配比较,只要该异常是catch中指定的异常的子类就匹配成功进而执行相应的catch中的内容,而finally块中的内容无论是否发生异常都将被执行;11.给出下面的代码:单选题public class Test {void printValueint m{while --m > 10}public static void mainString arg {int i=10;Test t= new Test;t.printValuei;}}输出将是什么A. The value is 8B. The value is 9C. The value is 10D. The value is 11答案:c此题考察的是do… while循环和 -- 操作符的知识,do…while最少被执行一次,在执行完do中的内容后判断while中的条件是否为true,如果为true的话就再执行do中的内容,然后再进行判断,以此类推直到while的判断为false时退出循环执行循环后面的内容,而—操作符的规则是在变量右边的-- 将先进行运算,然后才是使变量的值减一,而在变量左边的是先将变量的值减一再运算;12.给出下面的代码:单选题1 public void modify {2 int i, j, k;3 i = 100;4 while i > 0 {5 j = i 2;7 k = k + 1;8 i--;9 }10 }哪些行在编译时可能产生错误;A. line 4B. line 6C. line 7D. line 8答案 c这个问题在前面有关变量的类型及其作用域的问题中讨论过,局部变量在使用前必须显式初始化,而代码中的变量k在使用前没有;13.给出下面的代码片断:单选题1 String str = null;2 if str = null && str.length > 10 {34 }5 else if str = null & str.length < 5 {67 }哪些行将导致错误A. line 1B. line 2C. line 5D. line 8答案 c此题需要将代码仔细看清楚,查询没有逻辑错误,if …else的使用没有问题,也没有拼写错误,错误在于第5行的“与”操作符的使用,逻辑操作符logical operator的“与”应该是&&,而&是位逻辑操作符bitwise logical operator的“与”,使用的对象不一样,逻辑操作符的“与”的左右操作数都应该是布尔型logical boolan的值,而位逻辑操作符的左右操作数都是整型integral值;14.给出下面的代码:单选题public class Person{static int arr = new int10;public static void mainString a {}}那个叙述是对的;A. 编译时将发生错误;B. 编译时正确但是运行时出错;C. 输出为0;D. 输出为null答案 cint型数组是类对象,它在类被加载时完成初始化,在前面题目中已经有叙述,由于是原始数据类型int,其初始值为0;15.public class Parent {//多选题public int addValue int a, int b {int s;s = a+b;return s;}}class Child extends Parent {}哪些方法可以加入类Child中A. int addValue int a, int b {// do something...}B. public void addValue {// do something...}C. public int addValue int a {// do something...}D. public int addValue int a, int b throws MyException {//do something...}答案bc此题涉及方法重载overload,方法重写override以及类派生时方法重写的规则;方法重载的规则是:一、参数列表必须不同,个数的不同完全可以,如果个数相同则参数类型的不同不能引起歧意,例如int 和long,float和double就不能作为唯一的类型不同;二、返回值可以不同,但是不能是重载时唯一的不同点这点和c++中不同,c++中返回类型必须一致;方法重写发生在类继承时,子类可以重写一个父类中已有的方法,必须在返回类型和参数列表一样时才能说是重写,否则就是重载,java中方法重写的一个重要而且容易被忽略的规则是重写的方法的访问权限不能比被重写的方法的访问权限低重写的另一个规则是重写的方法不能比被重写的方法抛弃throws更多种类的异常,其抛弃的异常只能少,或者是其子类,不能以抛弃异常的个数来判断种类,而应该是异常类层次结果上的种类;此题中答案a的错误就是重写的访问权限比被重写的方法的低,而b,c都属于重载,d的错误在于比被重写的方法抛弃了更多种类的异常;16.共有成员变量MAX_LENGTH是一个int型值,变量的值保持常数值100;使用一个短声明定义这个变量;单选题A. public int MAX_LENGTH=100;B. final int MAX_LENGTH=100;C. final public int MAX_LENGTH=100;D. public final int MAX_LENGTH=100;答案 dJava中共有变量使用public定义,常量变量使用final,另外注意的是修饰符的顺序,一个最完整的修饰是public static final int varial_a=100;这个顺序不能错,这和c++中也是不同的;而答案c恰恰错在修饰符的顺序上;17.下面的那个java源文件代码片断是对的多选题A. package testpackage;public class Test{//do something...}B. import java.io.;package testpackage;public class Test{// do something...}C. import java.io.;class Person{// do something...}public class Test{// do something...}D. import java.io.;import java.awt.;public class Test{// do something...}答案acdjava中的package语句必须是源文件中除去说明以外的第一条语句,导入包语句可以有几个,但是必须位于package语句之后,其它类定义之前,一个源文件中可以有几个类,但最多只能有一个是public的,如果有,则源文件的文件名必须和该类的类名相同;18.下面的哪些声明是合法的多选题A. long l = 4990;B. int i = 4L;C. float f = 1.1;D. double d = 34.4;E. double t = 0.9F.答案ade此题的考点是数字的表示法和基本数据类型的类型自动转换,没有小数点的数字被认为是int型数,带有小数点的数被认为是double型的数,其它的使用在数字后面加一个字母表示数据类型,加l或者L是long型,加d或者D是double,加f或者F是float,可以将低精度的数字赋值给高精度的变量,反之则需要进行强制类型转换,例如将int,short,byte赋值给long型时不需要显式的类型转换,反之,将long型数赋值给byte,short,int型时需要强制转换int a=int123L;;19.如下描述:多选题public class Parent {int change {…}}class Child extends Parent {}哪些方法可被加入类ChildA. public int change{}B. int changint i{}C. private int change{}D. abstract int chang{}答案ab这个题目的问题在第35题中有详尽的叙述;需要注意的是答案D的内容,子类可以重写父类的方法并将之声明为抽象方法,但是这引发的问题是类必须声明为抽象类,否则编译不能通过,而且抽象方法不能有方法体,也就是方法声明后面不能带上那两个大括号{},这些D都不能满足;20.给出下面的代码:单选题1 class Parent {2 private String name;3 public Parent{}4 }5 public class Child extends Parent {6 private String department;7 public Child {}8 public String getValue{ return name; }9 public static void mainString arg {10 Parent p = new Parent;11 }12 }哪些行将导致错误A. line 3B. line 6C. line 7D. line 8E. line 10答案 d第8行的getValue试图访问父类的私有变量,错误,参看前面有关变量类型及其作用域的叙述21.变量"result"是一个boolean型的值,下面的哪些表达式是合法的多选题A. result = true;B. if result { // do something... }C. if result= 0 { // so something... }D. result = 1答案abJava的boolean不同于c或者c++中的布尔值,在java中boolean值就是boolean 值,不能将其它类型的值当作boolean处理;22.类Teacher和Student都是类Person的子类单选题Person p;Teacher t;Student s;P,t和s都是非空值;ift instanceof Person { s = Studentt; }这个if语句导致的结果是什么A. 将构造一个Student对象;B. 表达式合法;C. 编译时非法;D. 编译时合法而在运行时可能非法;答案 cinstanceof操作符的作用是判断一个变量是否是右操作数指出的类的一个对象,由于java语言的多态性使得可以用一个子类的实例赋值给一个父类的变量,而在一些情况下需要判断变量到底是一个什么类型的对象,这时就可以使用instanceof了;当左操作数是右操作数指出的类的实例或者是子类的实例时都返回真,如果是将一个子类的实例赋值给一个父类的变量,用instanceof判断该变量是否是子类的一个实例时也将返回真;此题中的if语句的判断没有问题,而且将返回真,但是后面的类型转换是非法的,因为t是一个Teacher对象,它不能被强制转换为一个Student对象,即使这两个类有共同的父类;如果是将t转换为一个Person对象则可以,而且不需要强制转换;这个错误在编译时就可以发现,因此编译不能通过;23.给出下面的类:单选题public class Sample{long length;public Samplelong l{ length = l; }public static void mainString arg{Sample s1, s2, s3;s1 = new Sample21L;s2 = new Sample21L;s3 = s2;long m = 21L;}}哪个表达式返回true;A. s1 == s2;B. s2 == s3;C. m == s1;D. s1.equalsm.答案 b前面已经叙述过==操作符和String的equals方法的特点,另外==操作符两边的操作数必须是同一类型的可以是父子类之间才能编译通过;24.给出下面有关List的表达式:多选题List l = new List6,true;哪些叙述是对的;A. 在没有其它的约束的条件下该列表将有6行可见;B. 一行的最大字符数是6C. 列表将允许用户多选;D. 列表只能有一项被选中;答案acList组件的该构造方法的第一个参数的意思是它的初始显式行数,如果该值为0则显示4行,第二个参数是指定该组件是否可以多选,如果值为true则是可以多选,如果不指定则缺省是不能多选;25.给出下面的代码:单选题class Person {String name,department;public void printValue{}}public class Teacher extends Person {int salary;public void printValue{// doing the same as in the parent method printValue// including print the value of name and department.}}下面的哪些表达式可以加入printValue方法的"doing the same as..."部分A. printValue;B. this.printValue;C. person.printValue;D. super.printValue.答案 d子类可以重写父类的方法,在子类的对应方法或其它方法中要调用被重写的方法需要在该方法前面加上”super.”进行调用,如果调用的是没有被重写的方法,则不需要加上super.进行调用,而直接写方法就可以;这里要指出的是java支持方法的递归调用,因此答案a和b在语法上是没有错误的,但是不符合题目代码中说明处的要求:即做和父类的方法中相同的事情打印名字和部门,严格来说也可以选a和b;26.给出下面的代码片断:多选题1 switchm2 {34 case 2:56 }m为哪些值将导致"default"输出A. 0B. 1C. 2D. 3答案cd此题考察switch语句的用法,switch的判断的条件必须是一个int型值,也可以是byte、short、char型的值,case中需要注意的是一个case后面一般要接一个break语句才能结束判断,否则将继续执行其它case而不进行任何判断,如果没有任何值符合case 列出的判断,则执行default的语句,default是可选的,可以没有,如果没有default而又没有任何值匹配case中列出的值则switch不执行任何语句;27.给出下面的不完整的方法:多选题12 { success = connect;3 if success==-1 {4 throw new TimedOutException;5 }6}TimedOutException 不是一个RuntimeException;下面的哪些声明可以被加入第一行完成此方法的声明;A. public void methodB. public void method throws ExceptionC. public void method throws TimedOutExceptionD. public void method throw TimedOutExceptionE. public throw TimedOutException void method答案b、c如果程序在运行的过程中抛出异常,而这个异常又不是RuntimeException或者Error,那么程序必须捕获这个异常进行处理或者声明抛弃throws该异常,捕获异常可以使用try{}catch{}语句,而抛弃异常在方法声明是声明,在方法的声明后面加上throws XxxxException,抛弃多个异常时在各异常间使用逗号,分隔,题目中的程序在运行时抛出的不是一个RuntimeException,所有必须捕获或者抛弃,而程序又没有捕获,所有应该在方法声明中声明抛弃;由于Exception是所有异常的父类,所有当然也可以代表RuntimeException了;28.下面的哪些答案可以正确表示一个十六进制数字10 单选题A. 0xAB. 0x16C. 0AD. 016答案 a十六进制数以0x开头,以0开头的是八进制数;十六进制表示中的a,b,c,d,e,f依次为10,11,12,13,14,15;29.给出下面的代码:单选题1 public class Test {2} int m, n;3} public Test {}4} public Testint a { m=a; }5} public static void mainString arg {6} Test t1,t2;7} int j,k;8} j=0; k=0;9} t1=new Test;10} t2=new Testj,k;11} }12} }在编译时哪行将导致一个错误A. line 3B. line 5C. line 6D. line 10答案 d第10行的声明调用一个带两个参数的Test的构造方法,而该类没有这样的构造方法;二、简答题1.读如下程序,说出结果,并说明得出结果原因10分;public class BreakContinue {public static void mainString args {for int i = 0; i < 10; i++ {ifi == 3 || i == 5 {continue;}for int j = 0; j < i; ++j {if i + j > 5 {break;}}if i == 6 {break;}}}}答案:1,2,3,4,52.读程序,说出j值,并说明得出结果原因10分;public class Test {private static int j = 0;public static void mainString args {methodA0;}private static boolean methodBint k{j += k;return true;}public static void methodAint i {boolean b;b = i < 10 | methodB4;b = i < 10 || methodB8; // 此处短路method不进行计算}}答案:4三、编程题1.请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母20分;答案:1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母; importpublic class Ex26 {public static void mainString args{//保存用户输入的第二个字母char weekSecond;//将Scanner类示例化为input对象,用于接收用户输入Scanner input = new ScannerSystem.in;//开始提示并接收用户控制台输入System.out.print"请输入星期值英文的第一个字母,我来帮您判断是星期几:";String letter = input.next;//判断用户控制台输入字符串长度是否是一个字母if letter.length == 1{//利用取第一个索引位的字符来实现让Scanner接收char类型输入char weekFirst = letter.charAt0;switch weekFirst{case'm'://当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能case'M':System.out.println"星期一Monday";break;case't'://当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能case'T':System.out.print"由于星期二Tuesday与星期四Thursday均以字母T开头,故需输入第二个字母才能正确判断:";letter = input.next;//判断用户控制台输入字符串长度是否是一个字母if letter.length == 1{//利用取第一个索引位的字符来实现让Scanner接收char类型输入weekSecond = letter.charAt0;//利用或||运算符来实现忽略用户控制台输入大小写敏感的功能if weekSecond == 'U' || weekSecond == 'u'{System.out.println"星期二Tuesday";break;//利用或||运算符来实现忽略用户控制台输入大小写敏感的功能} else if weekSecond == 'H' || weekSecond == 'h'{System.out.println"星期四Thursday";break;//控制台错误提示} else{System.out.println"输入错误,不能识别的星期值第二个字母,程序结束";break;}} else {//控制台错误提示System.out.println"输入错误,只能输入一个字母,程序结束";break;}case'w'://当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能case'W':System.out.println"星期三Wednesday";break;case'f'://当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能case'F':System.out.println"星期五Friday";break;case's'://当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能case'S':System.out.print"由于星期六Saturday与星期日Sunday均以字母S开头,故需输入第二个字母才能正确判断:";letter = input.next;//判断用户控制台输入字符串长度是否是一个字母if letter.length == 1{//利用取第一个索引位的字符来实现让Scanner接收char类型输入weekSecond = letter.charAt0;//利用或||运算符来实现忽略用户控制台输入大小写敏感的功能if weekSecond == 'A' || weekSecond == 'a'{System.out.println"星期六Saturday";break;//利用或||运算符来实现忽略用户控制台输入大小写敏感的功能} else if weekSecond == 'U' || weekSecond == 'u'{System.out.println"星期日Sunday";break;//控制台错误提示} else{System.out.println"输入错误,不能识别的星期值第二个字母,程序结束";break;}} else{//控制台错误提示System.out.println"输入错误,只能输入一个字母,程序结束";break;}default://控制台错误提示System.out.println"输入错误,不能识别的星期值第一个字母,程序结束";break;}} else{//控制台错误提示System.out.println"输入错误,只能输入一个字母,程序结束"; }}}。
第一章思考题】1、简述path 环境变量的作用。
2、请说说你对JVM 的理解。
答案】1、path 环境变量是系统环境变量中的一种,它用于保存一系列可执行文件的路径,每个路径之间以分号分隔。
当在命令行窗口运行一个可执行文件时,操作系统首先会在当前目录下查找是否存在该文件,如果不存在会继续在path 环境变量中定义的路径下去寻找这个文件,如果仍未找到,系统会报错。
2、JVM 是Java Virtual Machine 的缩写,全称是Java 虚拟机。
Java 语言的一个非常重要的特性就是跨平台性,而Java 虚拟机是实现这一特性的关键。
不同的操作系统需要使用不同版本的虚拟机,这种方式使得Java语言能够“一次编写,到处运行”。
Java语言编译程序只需生成在Java 虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。
第二章【思考题】1、请简述& 与&& 的区别。
2、简述break、continue 和return 语句的区别。
【答案】1、&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
当运算符“ &”和“ && ”的右边为表达式时,使用“ &”进行运算,不论左边为true 或者false,右边的表达式都会进行运算。
如果使用" && ”进行运算,当左边为false时,右边的表达式则不会进行运算,因此“ && ”被称作短路与。
2、break 语句:在switch 条件语句和循环语句中都可以使用break 语句。
当它出现在switch 条件语句中时,作用是终止某个case并跳出switch结构。
类和对象一、定义对象:具有一组属性和方法的实体。
万事万物皆对象。
类:具有相同属性和方法的对象的集合。
抽象的概念。
关系:类是对象的抽象,对象是类的具体存在。
二、类1.定义类2.创建对象语法:类名对象名 = new 类名();示例:Student stu = new Student();通过对象名+.的方式可以调用类的成员(属性、方法)。
= “zhangsan”;stu.study();3.JAVA中的数据类型◆基本数据类型(值类型)1)整型:byte、short、int、long2)浮点型:float、double3)字符型:char4)布尔型:boolean◆引用数据类型:1)String2)数组3)类三、方法1.定义方法语法:访问修饰符返回值类型方法名称(数据类型参数名, 数据类型参数名){//方法体}注意:◆如果方法没有任何返回值,那么返回值类型写void。
◆如果方法有返回值,那么应该使用return关键字将结果值返回。
◆方法的参数列表可以为空。
◆定义方法时,参数列表中的参数为形参(形式参数)。
◆方法体中不能再定义其他方法。
2.方法的调用语法:通过对象名.方法名进行方法的调用。
注意:◆方法如果有参数,那么必须传递参数(参数的类型、个数)。
◆参数如果为值类型,方法调用前后,实参的值不变;参数如果为引用类型,方法调用前后,实参的值要改变。
◆如果方法定义时,没有返回值,那么不能定义变量接受方法的返回值。
◆如果方法定义时,有返回值,那么可以定义变量接收返回值;也可以不定义变量接受。
◆同一类中相互调用方法时,直接通过方法名调用。
◆不同类中调用方法时,需要首先创建类对象,通过对象名.方法名()进行调用。
◆方法调用时,不需要写{}3.构造方法◆构造方法的方法名和类名相同。
◆如果没有显示定义构造方法,那么系统会默认创建一个无参的构造方法。
◆如果显示定义了构造方法,那么系统将不会再创建任何构造方法。
◆构造方法没有返回值类型。
Java基础之⽅法重写详解⼀、java⽅法重写⽅法的重写是⼦类根据需求对⽗类继承的⽅法进⾏重新的编写,在重写时,可以使⽤super⽅法的⽅式来保留⽗类中的⽅法,注意:构造⽅法不可以被重写。
创建⼀个⼈类,属性包括姓名性别年龄⾏为⽅法是输出信息⼆、super关键字⽅法重写时要在⼦类中定义⼀个和⽗类相同名称的⽅法,并采⽤super关键字super.⽅法名();,这样就实现了⽅法的重写package cn.zhz.Kind.dh;public class Person1 {public String sex;public String name;public int age;public void showInfo() {System.out.println("姓名:" + name + "年龄:" + age + "性别:" + sex);}}创建⼀个学⽣类,属性包括学号学科,⾏为⽅法是输出信息package cn.zhz.Kind.dh;public class Student1 extends Person1{public int stuId;public String stuSubject;public void showInfo(){super.showInfo();System.out.println("学号:"+ stuId+ "学科:"+ stuSubject);}}创建学⽣类的⼀个实例,进⾏赋值操作,赋值后输出package cn.zhz.Case.dh;import cn.zhz.Kind.dh.Student1;public class Student1Test {public static void main(String[] args) {Student1 student1 = new Student1();student1.stuId = 1; = "张三";student1.age = 18;student1.sex = "男";student1.stuSubject = "物理";student1.showInfo();}}2.1 super关键字的介绍super可以应⽤在⼦类访问⽗类成员中,⽐如说:访问⽗类的属性super.print();注意是⾮private的⽅法访问⽗类的⽅法;访问⽗类的构造⽅法super();package cn.zhz.Inherit.dh;public class Pet {private String name = "⽆名⽒";private int health = 100;private int love = 0;public int age = 1;public Pet() {System.out.println("⽗类⽆参构造⽅法");}public Pet(String name) { = name;}public Pet(String name, int health, int love) {//this可以调⽤本类的构造⽅法,且在第⼀⾏//this(name); = name;this.health = health;this.love = love;System.out.println("⽗类带参构造⽅法");}public void setAge(int age) {this.age = age;}public int getAge() {return age;}public void setHealth(int health) {if (health < 0 || health > 100) {System.out.println("宠物的健康值在0-100之间");this.health = 60;return;}this.health = health;}public int getHealth() {return this.health;}public void setName(String name) { = name;}public String getName() {return ;}public void setLove(int love) {if (love < 0 || love > 100) {System.out.println("宠物的亲密度只能在0-100之间");this.love = 60;return;}this.love = love;}public int getLove() {return this.love;}//输出宠物的信息public void print() {System.out.println("宠物的⾃⽩:\n我的名字叫" + + "健康值是" + this.health + "和主⼈的亲密度是:" + this.love); }}package cn.zhz.Inherit.dh;public class Dog extends Pet {private String strain = "聪明的拉布拉多⽝";public Dog() {System.out.println("⼦类狗狗的⽆参构造⽅法");}public Dog(String name, int health, int love, String strain) {//通过super调⽤⽗类的构造⽅法,必须是第⼀句//super();super(name, health, love);this.strain = strain;System.out.println("狗狗的带参构造⽅法");}public void setStrain(String strain) {this.strain = strain;}public String getStrain() {return this.strain;}public void print() {//调⽤⽗类的⾮private的print()⽅法super.print();System.out.println("我是⼀只" + this.strain);}public void m1() {//super不可以调⽤⽗类的private属性// System.out.println();System.out.println(super.age);}}在使⽤super关键字来访问⽗类的成员时,使⽤super关键字,super代表的是⽗类的对象,super只可以出现在⼦类的⽅法和构造⽅法中,使⽤super调⽤构造⽅法时,只可以是第⼀句,super不可以访问⽗类的private成员。
Java重写时应当遵守的11条规则CSDN 的⼩伙伴们,⼤家好,我是沉默王⼆。
重写(Overriding)算是 Java 中⼀个⾮常重要的概念,理解重写到底是什么对每个 Java 程序员来说都⾄关重要,这篇⽂章就来给⼤家说说重写过程中应当遵守的 12 条规则。
01、什么是重写?重写带来了⼀种⾮常重要的能⼒,可以让⼦类重新实现从超类那继承过来的⽅法。
在下⾯这幅图中,Animal 是⽗类,Dog 是⼦类,Dog 重新实现了move()⽅法⽤来和⽗类进⾏区分,毕竟狗狗跑起来还是⽐较有特⾊的。
重写的⽅法和被重写的⽅法,不仅⽅法名相同,参数也相同,只不过,⽅法体有所不同。
02、哪些⽅法可以被重写?规则⼀:只能重写继承过来的⽅法。
因为重写是在⼦类重新实现从⽗类继承过来的⽅法时发⽣的,所以只能重写继承过来的⽅法,这很好理解。
这就意味着,只能重写那些被 public、protected 或者 default 修饰的⽅法,private 修饰的⽅法⽆法被重写。
Animal 类有move()、eat()和sleep()三个⽅法:public class Animal {public void move() { }protected void eat() { }void sleep(){ }}Dog 类来重写这三个⽅法:public class Dog extends Animal {public void move() { }protected void eat() { }void sleep(){ }}OK,完全没有问题。
但如果⽗类中的⽅法是 private 的,就⾏不通了。
public class Animal {private void move() { }}此时,Dog 类中的move()⽅法就不再是⼀个重写⽅法了,因为⽗类的move()⽅法是 private 的,对⼦类并不可见。
public class Dog extends Animal {public void move() { }}03、哪些⽅法不能被重写?规则⼆:final、static 的⽅法不能被重写。
java方法的重载的规则
Java方法的重载是指在一个类中,可以定义多个方法名相同但参数类型或参数个数不同的方法。
通过重载,可以根据不同的参数类型和个数来调用不同的方法,从而提高代码的灵活性和可复用性。
重载方法的规则主要包括以下几点:
1. 方法名必须相同:在同一个类中,只有方法名相同才能构成重载关系,否则会被视为重复定义的错误。
2. 参数类型或参数个数必须不同:重载的方法必须拥有不同的参数类型或参数个数,否则编译器无法区分它们,会报错。
3. 与返回值类型无关:重载方法与返回值类型无关,即便返回值类型不同也可以构成重载关系。
4. 可以有不同的访问修饰符:重载方法可以具有不同的访问修饰符,如public、private、protected等。
5. 可以抛出不同的异常:重载方法可以抛出不同的异常,但是需要遵循Java异常处理的规则。
6. 重载方法的调用是根据参数类型和参数个数来确定的:在调用重载方法时,编译器会根据传入的参数类型和参数个数来匹配对应的方法,选择最匹配的方法进行调用。
重载方法的好处在于提高了程序的可读性和可维护性。
通过重载,我们可以用相同的方法名来表示各种不同的功能,而不必使用不同的方法名。
这样一来,我们在调用方法时就能够更加直观地理解其功能,同时也方便了代码的管理和维护。
下面通过一些示例来展示重载方法的规则和应用。
1. 重载方法的参数类型不同:
```java
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
}
```
在上面的例子中,我们定义了两个add方法,一个接收两个int类型的参数,另一个接收两个double类型的参数。
通过重载,我们可以根据传入的参数类型来选择不同的方法进行调用。
2. 重载方法的参数个数不同:
```java
public class StringUtil {
public String concat(String str1, String str2) {
return str1 + str2;
}
public String concat(String str1, String str2, String str3) {
return str1 + str2 + str3;
}
}
```
在上面的例子中,我们定义了两个concat方法,一个接收两个String类型的参数,另一个接收三个String类型的参数。
通过重载,我们可以根据传入的参数个数来选择不同的方法进行调用。
3. 重载方法的返回值类型不同:
```java
public class MathUtil {
public int square(int num) {
return num * num;
}
public double square(double num) {
return num * num;
}
}
```
在上面的例子中,我们定义了两个square方法,一个接收int类型的参数并返回int类型的结果,另一个接收double类型的参数并返回double类型的结果。
通过重载,我们可以根据传入的参数类型来选择不同的方法进行调用。
需要注意的是,重载方法的区分是通过参数类型和参数个数来确定的,与方法的返回值类型无关。
因此,在定义重载方法时,参数类型和参数个数应该能够明确地区分不同的方法,避免产生歧义。
需要注意在重载方法时应该遵循以下规则:
1. 不要过度使用重载:重载方法应该尽量用于表示相似但不完全相同的操作,而不是仅仅为了改变参数类型或参数个数而重载方法。
2. 不要产生歧义:重载方法的参数类型和参数个数应该能够明确地区分不同的方法,避免产生歧义。
如果参数类型和参数个数无法明确区分不同的方法,编译器会报错。
3. 调用重载方法时要明确参数类型和参数个数:当调用重载方法时,编译器会根据传入的参数类型和参数个数来选择最匹配的方法进行调用。
因此,调用重载方法时应该明确传入的参数类型和参数个数,确保调用的是预期的方法。
Java方法的重载是一种提高代码灵活性和可复用性的技术。
通过重载,我们可以用相同的方法名表示不同的功能,根据传入的参数类型和参数个数来选择不同的方法进行调用。
在使用重载方法时,需要遵循重载方法的规则,确保参数类型和参数个数能够明确区分不同的方法,避免产生歧义。