JavaSe阶段一复习与面试(上)

JavaSe阶段一复习(上)

第一部分

1.0 局部变量和成员变量

  • 局部变量存在方法中,成员变量存在于方法外
  • 局部变量定义时没有默认值,成员变量有默认值
  • 局部变量存在于栈中,成员变量存在堆中。
  • 局部变量在方法进栈时诞生,随着方法出栈时消亡。成员变量在堆中与new出来的对象生命周期一致,随着Java虚拟机的垃圾回收而消亡。

1.1 This和构造方法

This:是关键字,表示当前调用的对象,即 谁调用,谁就是this

构造方法:

​ 构造方法就是用来创建对象的方法。

构造方法注意事项:构造方法的名称需要和类名称完全一致、构造方法不需要任何返回值,连void也是无需写的、如果没有编写构造方法,编译器会自动生成一个无参的构造方法,里面什么事情都不干。

1.2 引用类型的的使用

除了基本类型,其他的类型都是引用类型;使用步骤如下:

1.导包

导包使用关键字import

如果需要使用的引用类型是与当前类的路径相同,则不用导包

在Java中的java.lang包是不用导包的,如java.lang.String

2.创建对象

如 Scanner sc = new Scanner(System.in);

3.根据对象.成员方法();

如,int num = sc.nextInt(); String str = sc.next();

需要注意的是,从键盘输入的任何信息都为字符串,因此调用sc.nextInt()方法,是将字符串转换为int型的

1.3 匿名对象

在正常创建一个对象时的格式:

//已知一个Person类,里面有成员变量 String name; 成员方法 void showName();
//类名 对象名 = new 类名();
Person person = new Person();
//使用时用对象.成员方法
person.showName();

但是匿名对象的使用格式。

//匿名对象的使用:
new Person().showName();

匿名对象仅可使用一次,当需要再次使用的时候,就不得不重新new一个对象。

因此,匿名对象适用于只需要使用一次的情况

1.4 包装类

从JDK1.5之后,程序会自动装箱和自动拆箱.

自动装箱:指的是基本类型转变为包装类型

自动拆箱:指的是包装类型转变为基本类型

此处包装可理解为基本类型在一个箱子里包装好来 => 变成了包装类。

1.5 String类

 String三大特点:

 1.当String被创建时,其内容是不可以改变的

 2.String可以使用char[]来创建,也可以使用byte[]来创建,其底层是byte[]

 在基本类型当中,使用 == 是进行数值的比较

 在引用类型当中,使用 == 是进行地址值的比较

String 是否可以被继承:由于String类被final修饰,因此不能String不能被继承

String一但创建,String的值能否改变:不可以,因为String的value是被final修饰的常量

当直接使用 = 创建的字符串,是放在字符串常量池当中,而使用char[]或byte[]创建的,是不放在字符串常量池的。

源码部分:

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];
}

1.6 重载和重写的区别

重载发生在一个类中,同名的方法如果有不同的参数列表则视为重载。

重写发发生在子类和父类之间,重写要求子类的重写方法与父类的方法有相同的方法名、参数列表。

注意:

  • 重载与方法的返回值无关,存在于父类和子类以及同一个类中
  • 在父子类中,构造方法不能被重写,被final、static修饰的类不能重写

1.7 &和&&的区别

&和&&都能够进行逻辑与运算

&和&&的使用:

if(a==b && a>0) //当左边a==b的结果为false时,会直接短路掉右边,因此右边的a>0是不会继续执行的
if(a==b & a>0)  //当左边a==b的结果为false时,不会短路掉右边,因此右边的a>0会继续执行的

1.8 ==和equals的区别

==是运算符,equals是Object的一个方法。

在基本类型使用中,==是判断数值是否相等。

如果是引用类型,则比较引用类型的地址值是否相等

int a = 5, b = 5;
//如判断a和b是否数值上相等,相等时返回true
Student stu1 = new Student();
Student stu2 = new Student();
if(stu1 == stu2){...}
//如果是引用类型,则比较引用类型的地址值是否相等,此处stu1和stu2都是通过new出来的两个对象,它们在堆内存中是两个地址不一样。

equals():是用来比较两个对象的内容是否相等。但翻看Object的源码时,可以查看到底层也是使用 == 来判断的

   public boolean equals(Object obj) {
        return (this == obj);
    }

因此一般使用,都需要对equals进行重写,如String类就对其进行重写。

  public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

##1.9 异常机制中finally的返回值

返回值是:

 public int demo() {
        try {
            int a = 5/0;
            return 1;

        }catch (Exception e){
            return 2;
        }finally {
            return 3;
        }
    }

结果为3

面向对象三大特性

1.1 封装性

封装性:封装简单的说就是将细节隐藏起来,外界只管调用,无需在意细节,这也提高了程序的安全性;在Java当中最常见的两个封装就是定义方法、private关键字,其中定义一个类,也是封装。

1.2 继承性

继承就是从已有的类中得到继承关系的过程。通过继承,能够使得代码在保持原有基础上,能得到更多拓展。通常将对象的共有特征进行抽取得到父类。

注意:

  • 父类和子类的关系:子类也是父类。如,讲师、助教也是属于员工的范畴。
  • this代指当前的对象,而super代指父类对象(超类)

1.3 多态性

多态是指运行不同子类型的对象对同一消息作出不同的响应。

讲师和助教都属于员工,他们都有共同的行为,如:工作。但是讲师的工作是上课,助教的工作是帮助教学,虽然他们都是工作,但是工作内容是不一样的

多态的格式:超类型的引用指向派生类 或 父类型的引用指向子类

//类: 父类 对象名 = new 子类()
Employee one = new Teacher(); //此时将教师向上转型为员工
//接口: 接口 接口名 =new 接口的实现类()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值