1,你是怎样理解面向对象的
面向对象是利于语言对现实事物进行抽象。面向对象具有以下四大特征:
(1)继承:继承是从已有类得到继承信息创建新类的过程
(2)封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。
(3)多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。
(4)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。
自己的话描述:
封装:就是把属性和get set 方法绑定起来,对数据的访问只能通过get set 方法。
继承:就是继承父类的方法和属性并且创建不同于父类的类
多态:父类引用指向子类对象,不同的子类,对相同的方法,做出不同的响应。
抽象:抽象是将一类对象的共同特征总结出来,构造类的过程。
2、你是怎样理解多态的?什么地方用过?
自己的话
同一个行为具有多个表现形式
3、举例说明封装和继承是怎么回事?
封装比如说将 name 和 age 属性设置为私有的对信息进行了隐藏提供对外的公共方法访问,用于对私有属性的访问。
public class Person{
private String name;
private int age;
public int getAge(){ return age; }
public String getName(){ return name; }
public void setAge(int age){ this.age = age; }
public void setName(String name){ this.name = name; }
}
4、char型变量能不能储存一个中文汉字,为什么?
char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。
5、什么是自动拆装箱? int和Integer有什么区别?以及以下程序运行结果。
八种基本数据类型分别是:
4种整数类型(byte、short、int、long);
2种浮点类型(float、double);
1种字符类型“char”
1种布尔类型“boolean”。
基本数据类型,如**int,float,double,boolean,char,byte,**不具备对象的特征,不能调用方法。
装箱:将基本类型转换成包装类对象
拆箱:将包装类对象转换成基本类型的值
java为什么要引入自动装箱和拆箱的功能?主要是用于java集合中,List list=new ArrayList();
list集合如果要放整数的话,只能放对象,不能放基本类型,因此需要将整数自动装箱成对象。
实现原理:javac编译器的语法糖
区别:
(1)Integer是int的包装类,int则是java的一种基本数据类型
(2)Integer变量必须实例化后才能使用,而int变量不需要
(3)Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
(4)Integer的默认值是null,int的默认值是0
常量池在java中用于保存编译期已经确定的,它包括了关于类,方法,接口中的常量,也包括字符串常量。例如
String s = “Java” 这种声明的方式。产生的这种"常量"就会被放到常量池,常量池是JVM的一块特殊的内存空间。
使用Java常量池技术,是为了方便快捷地创建某些对象,当你需要一个对象时候,就去这个池子里面找,找不到就在池子里面创建一个。但是必须注意 如果对象是用new 创建的。那么不管是什么对像,它是不会放到池子里的,而是向堆申请新的空间存储。
java中基本类型的包装类的大部分都实现了常量池技术,这些类是Byte,Short,Integer,Long,Character,Boolean,另外两种浮点数类型的包装类则没有实现。另外Byte,Short,Integer,Long,Character这5种整型的包装类也只是在对应值小于等于127时才可使用对象池。超过了就要申请空间创建对象了
”==“ 我们知道比较的是引用的地址(其实java不要允许用户直接对内存进行操作的的)。
当我们使用Integer a = 127 的时候 实际上调用的是下面这个方法:
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
因为java 默认大于等于128 会重新开辟一个地址
1. package com.atguigu.interview.chapter03;
2. public class Test01 {
3. public static void main(String[] args){
4. Integer a = 127;
5. Integer b = 127;
6. Integer c = 128;
7. Integer d = 128;
8. System.out.println(a==b); //true
9. System.out.println(c==d); //false
10. }
11. }
Java常量池 即如果 数在 -128到127之间 就返回池子中的对象。没有的话就创建