9.25 day 2

1.

简述方法重写与方法重载的意义与区别:

方法重写:

1.参数列表必须完全与被重写方法相同

//参数列表(分为四种):

(1)无参无返回值方法;

(2)有参无返回值方法;

(3)无参有返回值方法;

(4)有参有返回值方法;

2.返回类类型必须完全与被重写方法的返回类型相同

3.方法名相同

访问权限不能比父类被重写发方法的访问权限更低,此为一大

父类的成员方法只能被它的子类重写

声明为final的不能被重写

声明为static的方法不能被重写

子类和父类在同一包中,那么子类可以重写父类的所有方法,除了声明为private和final的方法

子类和父类不在同一个包中,那么子类只能够重写父类声明为public和protected的非final方法

重写的方法能够抛出任何非强制性异常,无论重写

强制性异常:所谓强制性异常就是在编写程序的过程中必需在抛出异常的部分try catch 或者向上throws异常。

9.25 day 2_第1张图片

** 非强制性异常**:所谓非强制性异常就和上面相反了

9.25 day 2_第2张图片

构造方法不能被重写

如果不能继承一个方法,则不能重写

方法重载:

被重载的方法必须改变参数列表(参数个数或类型或顺序不一样)

被重载的方法可以改变返回类型

可以改变访问修饰符

可以声明新的或更广的检查异常

无法以返回值类型作为重载函数的区分标准

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 移动的位数。

9.25 day 2_第3张图片

扩展资料

“>>”和“>>>”等移位运算符的运算规则:

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.

方法头指:修饰符+返回类型 +方法名(形参列表)

方法名相同,参数类型相同

子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类方法访问权限。

所以说返回类型可以不同的

9.25 day 2_第4张图片

10.

9.25 day 2_第5张图片

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,是一套客户端程序与数据库交互的规范

你可能感兴趣的:(java,开发语言)