Java基础2

  • Post author:
  • Post category:java




1.接口与抽象类


  • 接口中所有的方法都是抽象的。而抽象类可以包含抽象和非抽象的方法。
  • 类可以实现多个接口,但是只能继承一个抽象类.
  • Java接口中声明的变量默认是final的。抽象类可以包含非final的变量。
  • Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者public
  • 接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果包含main方法的话是可以被调用的。


2.谈谈面向对象的三大特性:封装、继承、多态

  • 封装:把一个属性私有化,同时对外界提供访问该属性的方法;
  • 继承:继承是使用已经存在的类作为基础建立新类的技术;
  • 多态:一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到低是个类中的实现方法,必须由程序运行期间才能决定。



3.重载和重写的区别


方法的重载和重写都是实现多态的方式,方法重载实现的是

编译时

的多态性,方法重写实现的是

运行时

的多态性。

方法重载就是在类中 可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的意义,返回值类型可以相同也可以不同。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法,这就是多态性。

重载

就是在同一个类中多个方法根据不同的传参来执行不同的逻辑处理。

方法重写是子类对父类的允许访问的方法的实现过程进行重新编写。

  • 返回值类型、方法名、参数列表必须相同,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类。
  • 如果父类的方法访问修饰符为private/final/static,则子类就不能重写该方法,但是被static修饰的方法能够再次声明。
  • 构造方法无法被重写

重写

就是子类对父类方法的重新改造,外部样子不能改变,内部逻辑可以改变。




4.成员变量和局部变量的区别


  1. 从语法形式上看

    :成员变量是属于类的,而局部变量是在方法中的定义或是方法的参数;

  2. 从访问修饰符上看

    :成员变量可以被public,private,static等修饰符说修饰,而局部变量不能被访问控制修饰符及static所修饰;成员变量和局部变量都能被final所修饰

  3. 从变量在内存中的存储方式来看

    :如果成员变量是使用static修饰的,那么这个成员变量是属于类的,如果没有则是属于实例。对象存于堆内存,如果局部变量为基本类型,那么存储在栈内存,如果为引用数据类型,那么存放的是指向堆内存对象的引用或者指向常量池中的地址。

  4. 在内存中的生存时间

    :成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动消失。


5.值传递和引用传递

值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。

引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本,并不是原对象本身,所以对引用对象进行操作会同时改变原对象。

Java内的传递都是值传递。也就是说,方法得到的是所有参数值的一个拷贝,方法不能修改传递给它的任何参数变量的内容。


6.数组(Array)和列表(ArrayList)的区别

Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。

Array大小时固定的,ArrayList的大小是动态变化的

ArrayList可以提供更多的方法和特性,比如:addAll(),removeAll(),iterator()


7.在一个静态方法内调用一个非静态成员为什么是非法的

由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问非静态变量成员。

Java中的static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法和类的任何实例都不相关,所以概念上不适用。


8.创建一个对象用什么运算符?对象实体与对象引用的不同。

new运算符,new创建对象实例(对象实例在堆内存中),对象引用指向对象实例(对象引用存放在栈内存汇总)。一个对象引用可以指向0个或1个对象;一个对象可以有n个引用指向它。


9.什么是方法的返回值,返回值在类的方法里的作用是什么

方法的返回值是指我们获取到的某一个方法中的代码执行后的产生的结果

作用:接收出结果,使得它可以用于其他操作。


10. 构造方法有哪些特性

  1. 名字与类型相同
  2. 没有返回值,但不能用void声明构造函数。
  3. 生成类的对象时自动执行,无需调用。


11.静态方法和实例方法有何不同

  1. 在外部调用静态方法,“类名.方法名”和“对象名. 方法名”。而实例方法只有后面两种方式。也就是说,调用静态方法可以无需创建对象。
  2. 静态方法在访问本类的成员时,只允许访问静态成员,而不允许访问实例成员变量和实例方法;实例方法则没有此限制。


12. 对象的相等与指向他们的引用相等,两者有什么不同

对象的相等,比的是内存中存放的内容相等;而引用相等,比较的是他们指向的内存地址是否相等。


13.如何通过反射创建对象?

  1. 通过类对象调用newInstance()方法
  2. 通过类对象的getConstructor()方法获得构造器对象并调用其newInstance()方法创建对象



版权声明:本文为weixin_42082952原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。