java基础
接口和抽象类有什么区别
1.接口是公开的,里面不能有私有的方法或变量,而抽象类是可以有私有方法或私有变量的,
2.另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类只需要重写里面的抽象方法(全部),
3.接口之间可以实现多重继承(接口与类之间多重实现),而一个类只能继承一个超类,
4.接口不能有构造函数,抽象类可以有构造函数。
Integer
是java的一个类。也就是int的包装类。int是基本数据类型,integer是引用类型,包含很多属性和方法,而int只是一个值,没有其他的任何方法和属性了
int的默认值为0,integer的默认值为null
Java中的泛型是什么 ? 使用泛型的好处是什么?
泛型赋予了类型参数式多态的能力
1.是编译时的严格类型检查。有效的避免了运行期的ClassCastException,提高了程序的安全性和健壮性。
2.泛型消除了绝大多数的类型转换。如果没有泛型,当你使用集合框架时,你不得不进行类型转换。
3.泛型简化了代码,应用泛型的程序提高程序的可读性,更利于团队的合作开发。
使用泛型后,规定该集合只能放羊,老虎就进不来了.
使用泛型后,不需要强制类型转换了
一个类被声明为private的时候,它当然是内部类,内部类是可以被它的外部类访问到的,所以,可以继承,private和abstract不冲突。
一个java源文件最多只能有一个public类,而且这个源文件的名字必须和这个public类相同。
但可以没有public类,命名时和此源文件中任何一个类名相同都可以。
静态内部类与非静态内部类的区别:
1.静态内部类可以有静态成员,非静态内部类不可以有静态成员;
2.静态内部类只能访问外部类的静态成员(方法、属性),非静态内部类能访问外部类的所有成员;
3.两种生成对象的方式不同,非静态内部类得先生成外部类对象;
4.调用静态内部类得成员,可以直接通过类名调用。
String s=new String("xyz")究竟创建String Object分为两种情况:
1.如果String常理池中,已经创建"xyz",则不会继续创建,此时只创建了一个对象new String("xyz");
2.如果String常理池中,没有创建"xyz",则会创建两个对象,一个对象的值是"xyz",一个对象new String("xyz")。
构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload。
抽象类与普通类的唯一区别:就是不能创建实例对象和抽象类允许有abstract方法。
abstract的method是否可同时是static:不可以
声明static说明可以直接用类名调用该方法
声明abstract说明需要子类重写该方法,相互冲突
final不可以修饰接口,但可以修饰接口里面的变量
string stringbuffer stringbuilder的区别:
String 字符串常量,不可变
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
速度上:StringBuilder>StringBuffer>String
下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";
一个对象,因为在编译时相当于直接定义了一个”abcd”的字符串
HashMap和Hashtable的区别:
1.都实现了map接口;
2.HashMap准许空(Null)键值(Key);
3.HashMap非线程安全,Hashtable是线程安全的;
4.速度上,HashMap>Hashtable;
说出一些常用的类,包,接口,请各举5个
常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer Class,List,HashMap
常用的包:java.lang java.io java.util java.sql,javax.servlet,org.apache.strtuts.action,org.hibernate
常用的接口:List Map ,Servlet,HttpServletRequest,HttpServletResponse,Transaction(Hibernate)、Session(Hibernate),HttpSession
序列化
什么是序列化:保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来
将对象保存到一个文件中或者数据库中,或者用套接字在网络上传送对象的时候;
怎么定义序列化:实现Serializable接口(标注该对象是可被序列化的)
然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
栈内存:一般放局部变量
堆内存:一般放用new创建的对象
当方法中的局部变量使用final修饰后,放在堆中,而不是栈中