多态、GC、Java数据类型

时间:2023-02-06 18:01:02

多态

一、java中实现多态的机制是什么?

靠的是: 父类定义的引用变量可以指向子类的实例对象,或者接口定义的引用变量可以指向具体实现类的实例对象

而程序调用的方法,在运行期才动态绑定,

它就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,

而不是引用变量的类型中定义的方法。

二、抽象类(abstract class)和接口(interface)的区别。

抽象类可以有定义和实现                           接口只有定义,  所有方法必须都是抽象的
抽象类字段默认是"friendly"(本包可见)         接口的字段定义默认为:public static final,

一个类可以实现多个接口,但只能继承一个抽象类。

当功能需要累积时用抽象类,不需要累积时用接口。

接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。

4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然eclipse下不报错,但应该也不行),

但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。

6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。

附:

接口可以继承接口。

抽象类可以实现(implements)接口

抽象类中可以有静态的main方法。

抽象类与普通类的唯一区别,就是不能创建实例对象和允许有abstract方法。

三、Overload(重载)和Override(重写或覆盖)的区别。

Override:  子类覆盖父类的方法。将子类传与父类的引用,调用的还是子类的方法。

Overload: 在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型。这些方法的返回值类型也可以不同。

两者都是Java多态性的不同表现。

-----------------------------------------------------------------------

GC

垃圾回收机制:

GC(Gabage Collection),垃圾收集是将分配给对象但不再使用的内存回收或释放的过程。
如果一个对象没有指向它的引用或者其赋值为null,则该对象适合进行垃圾回收。

为什么要有GC?

内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。

垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。

79、垃圾回收器的基本原理是什么?
垃圾回收器可以马上回收内存吗?
有什么办法主动通知虚拟机进行垃圾回收?

对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。

---------------------------------------------------------------------

Java数据类型

一、简单介绍一下java数据类型的划分?

8个基本数据类型
数值型:
  整型:  byte, short, int, long; 默认值是0
  浮点型:float, double; 默认值是0.0
字符型:char; 默认值是空字符'\u0000'
布尔型:boolean; 默认值是false

引用数据类型:数组、接口、类;默认值是null

二、Integer 与 int的区别

int 是 java 提供的8种原始数据类型之一。Integer是java为int提供的封装类。

int的默认值为0,而Integer的默认值为null,int则无法表达出未赋值的情况。

例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer。

另外,Integer提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,Integer中还定义了表示整数的最大值和最小值的常量。

三、char 型变量中能不能存贮一个中文汉字? 为什么?

char 型变量是用来存储 Unicode 编码的字符的,unicode 编码字符集中包含了汉字,所以char型变量中当然可以存储汉字啦。
不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,
那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以 char 类型的变量也是占用两个字节。