1.
简述方法重写与方法重载的意义与区别:
方法重写:
1.参数列表必须完全与被重写方法相同
//参数列表(分为四种):
(1)无参无返回值方法;
(2)有参无返回值方法;
(3)无参有返回值方法;
(4)有参有返回值方法;
2.返回类类型必须完全与被重写方法的返回类型相同
3.方法名相同
访问权限不能比父类被重写发方法的访问权限更低,此为一大
父类的成员方法只能被它的子类重写
声明为final的不能被重写
声明为static的方法不能被重写
子类和父类在同一包中,那么子类可以重写父类的所有方法,除了声明为private和final的方法
子类和父类不在同一个包中,那么子类只能够重写父类声明为public和protected的非final方法
重写的方法能够抛出任何非强制性异常,无论重写
强制性异常:所谓强制性异常就是在编写程序的过程中必需在抛出异常的部分try catch 或者向上throws异常。
** 非强制性异常**:所谓非强制性异常就和上面相反了
构造方法不能被重写
如果不能继承一个方法,则不能重写
方法重载:
被重载的方法必须改变参数列表(参数个数或类型或顺序不一样)
被重载的方法可以改变返回类型
可以改变访问修饰符
可以声明新的或更广的检查异常
无法以返回值类型作为重载函数的区分标准
2.
了解一下
hashCode方法本质就是一个哈希函数,这是Object类的作者说明的。Object类的作者在注释的最后一段的括号中写道:将对象的地址值映射为integer类型的哈希值。但hashCode()并不完全可靠的,有时候不同的对象他们生成的hashcode也会一样,因此hashCode()只能说是大部分时候可靠。
通常我们比较两个对象是否相同,我们会重写equals(),因为原版的equal效率比较低下,利用hashcode 生成hash值进行比较,这样通过equal比较的两个hashcode值肯定相同,如果这个hashcode相同了,再对比他们的quals()
equals()相等的两个对象hashCode()一定相等。
hashCode()相等的两个对象equal()不一定相等
3.
public class ZeroTest { public static void main(String[] args) { try{ int i = 100 / 0; System.out.print(i); }catch(Exception e){ System.out.print(1); throw new RuntimeException(); }finally{ System.out.print(2); } System.out.print(3); } }
分析:
catch捕捉之后,1
抛出异常之后程序终止,finally执行
throw抛出异常之后程序就不继续往下执行了。
4.
public class Arraytest{ int a[] = new int[6]; public static void main ( String arg[] ) { System.out.println ( a[0] ); } }
在static方法中不能访问静态变量a,需要将a声明为static
5.
我们还要来补充一个运算符的补充知识点:
1、>>:右移运算符,num >> 1,相当于num除以2。
按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。符号位不变。
如:
-1在32位二进制中表示为:
11111111 11111111 11111111 11111111
-1>>1:按位右移,符号位不变,仍旧得到11111111 11111111 11111111 11111111
因此值仍为-1
2、>>>:二进制右移补零操作符,左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充
如value >>> num中,num指定要移位值value 移动的位数。
扩展资料
“>>”和“>>>”等移位运算符的运算规则:
1、无符号右移,忽略符号位,空位都以0补齐。
value >>>a,a是要移位值value 移动的位数。
无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位 无符号右移运算符>>> 只是对32位和64位的值有意义。
2、右移位运算符>>,若操作的值为正,则在高位插入0;若值为负,则在高位插入1。
右移补零操作符>>>,无论正负,都在高位插入0。
没有<<<是因为不需要
6.
interface中的方法默认为public abstract 的 ,变量默认为public static final //不能有private出现
7.
Float正确赋值方式:
Float a = new Float(1.0)
Float f = 1.0f 若不加f会被识别成double型,double无法向float吟诗转换
8.
标准输入指键盘输入;标准输出指输出到屏幕上。
记住System,out,println()就不会错
一般用 System,in创建inputStream对象,用Symstem,out创建outputStream对象
9.
方法头指:修饰符+返回类型 +方法名(形参列表)
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类方法访问权限。
所以说返回类型可以不同的
10.
intValue()是把Integer对象类型变成int的基础数据类型
parseInt()是把String变成int的基础数据类型
ValueOf()是把String转化为Integer对象类型
11.
执行结果是?
class BaseClass { public BaseClass() {} { System.out.println("I’m BaseClass class"); } static { System.out.println("static BaseClass"); } } public class Base extends BaseClass { public Base() {} { System.out.println("I’m Base class"); } static { System.out.println("static Base"); } public static void main(String[] args) { new Base(); } }
public class Father { static { System.out.println("父类静态代码块"); } { System.out.println("父类非静态代码块"); } public Father(){ System.out.println("父类构造函数"); } } public class Son extends Father{ static { System.out.println("子类静态代码块"); } { System.out.println("子类非静态代码块"); } public Son(){ System.out.println("子类构造函数"); } public static void main(String[] args) { Son son = new Son(); } } /*结果为: 父类静态代码块 子类静态代码块 父类非静态代码块 父类构造函数 子类非静态代码块 子类构造函数
父类静态代码块->子态静态代码块->父类非静态代码块->父类构造函数->子类非静态代码块->子类构造函数
12.
输出结果?
public class EqualsMethod { public static void main(String[] args) { Integer n1 = new Integer(47); Integer n2 = new Integer(47); System.out.print(n1 == n2); System.out.print(","); System.out.println(n1 != n2); } }
使用Integer a = 1;或Integer a = Integer.valueOf(1); 在值介于-128至127直接时,作为基本类型。
使用Integer a = new Integer(1); 时,无论值是多少,都作为对象。
13.
public class Test { private static int j = 0; private static Boolean methodB(int k) { j += k; return true; } public static void methodA(int i) { boolean b; b = i < 10 | methodB(4); b = i < 10 || methodB(8); } public static void main(String args[]) { methodA(0); System.out.println(j); } }
这道题主要考的是"|"与"||"的区别
用法:condition 1 | condition 2、condition 1 || condition 2
"|"是按位或:先判断条件1,不管条件1是否可以决定结果(这里决定结果为true),都会执行条件2
"||"是逻辑或:先判断条件1,如果条件1可以决定结果(这里决定结果为true),那么就不会执行条件2
14.
public static void main(String[] args) { Object o1 = true ? new Integer(1) : new Double(2.0); Object o2; if (true) { o2 = new Integer(1); } else { o2 = new Double(2.0); } System.out.print(o1); System.out.print(" "); System.out.print(o2); }
三元操作符如果遇到可以转换为数字的类型,会做自动类型提升。
1.0 1
R:
1.程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的信号只是其,每个线程都需要一个独立的程序计数器
2.方法区是各个线程共享的内存区域,它用于存储已经被虚拟机加载的常量、即时编译器编译后的代码、静态变量等数据
3.java虚拟机栈描述的是java方法执行的内存哦行,每个方法被执行的时候都会创建一个栈帧,用于存储 局部变量表、动态链接等信息
4.java堆:对于绝大多数应用来说,这块区域是JVM所管理的内存中最大的一块
5.JDBC:Java Database Connectivity,是标准的javaAPI,是一套客户端程序与数据库交互的规范