Java基础知识汇总
|
Java基础知识 1、Java语言的优点: 1)Java是纯面向对象语言 2)与平台无关性,一次编译到处运行 3)Java提供了狠多内置类库 4)提供了对web应用的支持 5)具有较好的安全性(数组边界检测、Bytecode检测)和健壮性(强制型机制、垃圾回收器、异常处理) 6)去除c++难以理解的一些特性(头文件 指针 运算符重载 多重继承) 2、java与c++的异同: 1)Java为解释型语言,c++为编译型语言,java会慢但是跨平台 2)Jave为纯面向对象,c++既面向对象又能面向过程。Jave无全局变量和全局函数 3)Java没有指针,更安全 4)Java不支持多继承但是有接口概念 5)Java不需人工分配管理内存(申请 释放),提供垃圾回收器自动回收。当堆栈或静态存储区没有对这个对象的引用时,就会被回收。没有析构函数,但是有finalize()方法。 6)Java没有运算符重载,没有预处理功能。 3、public static void main(String [] args)是程序的入口。 4、java可有多个main()文件,但只有与文件名相同的用public修饰的类的main()才能作为程序的入口。注:有且仅有一个类被public修饰并与文件同名。 5、静态快在main函数之前执行。初始化执行顺序:父静态变量 父静态代码块 子静态代码变量 子静态代码块 父非静态变量 父非静态代码块 父类构造函数 子非静态变量 子非静态代码块 子类构造函数 6、构造函数: 1)与类同名,无返回值 2)可以有多个,根据参数不同 3)总是伴随new操作一起调用 4)主要用来初始化对象 5)不能被继承 6)可用super来显示调用父类构造函数 7、浅复制仅仅复制考虑的对象,不复制它引用的对象。深复制两者都复制 8、面向对象和面向过程有什么不同: 1)面向对象是用符合常规思维的方式去处理客观世界的问题,面向过程是则重以事件为中心,模块化。 2)面向对象是使计算机世界向客观世界靠拢,使问题的处理更清晰。面向过程是清晰准确表达过程的模块,把客观世界的问题抽象成计算机可以处理的过程。 9、面向对象的特征和优点:抽象 继承 封装 多态有较高的开发效率,代码可重用。较高的可维护性,代码更清晰明了。 10、java只支持单根继承,extends继承是 is a 关系,组合是 has a关系。 在java语言中能用到组合的尽量不要用继承。 11、多态: 重载(同个类中有多个同名方法) 水平关系 重写(子类重写父类,方法名和参数列表相同) 垂直关系 12、抽象类和接口的异同: 1)只要包含一个抽象方法都是抽象类,接口的方法全部是抽象方法,称为纯抽象类。 2)抽象类的子类需实现父类的抽象方法。 3)接口中的变量都默认为:static final 必须赋初值。 4)接口实现用implements。一个类可以实现多个接口实现类似多继承的关系。 5)接口被运用于常用的功能,如:添加删除。抽象类用于生活公共类的角色,不适用经常对代码修改的情况 13、this和super的区别: This用来指向当前实例对象 Super用来访问父类的方法和成员变量 子类继承父类时,子类构造函数中super()必须放第一句。 14、break continue return 的区别: Break 用于直接强行跳出当前循环,不执行剩余代码 Continue 用于停止当次循环,回到起始处进行下次循环。 Return 跳转 用来表示从一个方法中返回。 Break out跳出多重循环 15、static的作用: a 为对象分配单一的存储空间,与创建对象个数无关 b 实现某个方法或属性和类而不是与对象关联在一起 C 变量可达到全局的效果,在内存中只有一个复制 16、不可变类的实现: 类中的所有成员变量被private修饰 没有写set方法 类定义final 17、值传递和引用传递的区别: 值传递:实参会把它的值传递给形参 引用传递:传递的是对象,形参和实参指向同个存储单元。 18、有八种基本数据类型,类型转换的优先级:byte不能与booleam互换。 19、round 表示四舍五入 ceil表示向上取整 floor表示向下取整,i++表示先执行后加 一,++i表示先加一后执行。 20、String s1=”abc”是存放在常量区 String s2=”abc”s2应用常量区的对象,不会创建新的对象。 String s3=new String(“abc”)是在堆中创建对象, String s4=new String(“abc”)又必须在堆中创建新对象。 21、“==”与“equals” “==”用来比较两个变量的值是否相等,如果一个变量指向饿数据是对象(引用类型),就有两块内存。对象本身占用一块内存(堆内存),变量也占用一块内存。String s4 = new String(“abc”)。变量s所对应的内存中存储的数值就是对象占用那块内存的首地址。如果想看两个变量是否指向同一个对象,即要看他们对应内存中的数值(首地址)是否相同。 equals比较的不是引用,而是数值内容,即比较的是abc。 22、数组也是对象。数组提供length属性来获取数组的长度,而String是通过length()计算。 23、异常处理 1)try catch finally模式 2)Finally块中的代码一定会被执行,除非这两种情况:当程序在try之前就遇到异常或者在try中通过exit()强制退出。 3)jvm将错误表示为一个异常并抛出,通过catch来捕获,然后进行处理。安全性和鲁棒性。 4)异常分为两大类:错误(error)和异常(Excetion) 异常分为:检查异常和运行异常。 检查异常又称为编译异常。 比如:IO异常、SQL异常 运行异常为:空指针异常、类型转换异常、算术异常、数组越界异常、数组存储异常、缓存区溢出异常。 先捕获子类后捕获父类,尽早抛出异常,能处理就处理,不处理就抛出,运行时异常实际不必处理,直接抛出。 24、Java IO:字节流(8位)不会用到缓存 字符流(16位)用到缓存 25、Socket称为套接字。用来实现不同虚拟机或不同计算机之间的通信。 分为两种类型:面向连接的TCP,可靠。无面向连接的UDP,不可靠。 任何一个Socket都是由一个IP地址和端口号唯一确定。 26、java平台独立性是指一个平台上编写和编译程序,而在其他平台上运行。有JVM和java API。 Java语言是一种动态解释型语言,类class只有被加载到JVM上才能运行。不会一次加载全部类后执行,而是先加载基类,其他类是需要时再加载。 27、垃圾回收GC:回收不会再使用的内存。三个任务:分配内存;确保被引用的内存不被错误地回收;回收不再被引用的对象的内存。 28、java中内存泄露问题: 两种情况: 1)在堆中申请的空间没有得到释放 2)对象不再被使用,但是仍在内存中保留着 原因:静态集合类、各种连接、监听器、变量不合理的作用域 29、java中堆和栈的区别: 分配在栈:基本数据类型的变量、对象的引用变量 变量出了作用域就会被自动释放 分配在堆:引用类型变量、需要通过new创建的变量。主要为运行时创建的对象 JVM是基于堆栈的虚拟机,每个java程序都运行在一个单独的JVM实例上,所以一个java程序中的对个线程运行在,每个实例又唯一对应一个堆,所以这些线程之间会共享堆内存。 只需要申请堆空间,不需要考虑释放问题。 使用栈中的引用变量来访问堆中的数组和对象。 堆只要是用来存放对象的,栈主要是用来放执行程序的。 栈的速度快,但大小和生存期确定,缺乏灵活性。堆是动态分配内存,灵活性强但速度慢。 30、容器:java Collections框架:list 、Queue 、set 、stack 、map 1)List是有序的Collection。按对象的进入顺序保存对象,可保存重复对象。 2)Set是集合的概念,集合中不能有重复的元素。 3)map是键映射到值得数据结构。值可以重复,但是键是唯一的,不能重复。 31、迭代器:是一个对象,一种访问一个容器对象的各个元素,而又不必暴露该对象内部的细节方法。 1)使用容器的iterator()方法返回一个Iterator,然后通过Iterator的next()方法返回一个元素。 2)使用Iterator的hasNext()方法判断容器中是否还有元素,如果有可以使用next()获取下一个元素。 3)通过remove()来删除迭代器返回的元素。 32、collection和collections的区别: Collection:是一个集合接口,为各个具体集合提供最大化的统一操作。 Collections:是针对集合类的一个包装类。不能实例化,相当于一个工具类,服务于Collection框架。 33、多线程: 线程:执行代码的一个执行单元。 进程:一个正在执行的程序 各线程共享程序的内存空间(代码段、数据、堆空间)有独立的栈空间。 线程优点: 1)减少程序的响应时间 2)相比进程,创建个切换开销小 3)多CPU和多核本身就具有多线程能力 4)简化程序结构,便于理解和维护。 34、如何实现java多线程: 1)继承Thread类,重写run()方法 2)实现Runnable接口,并实现接口的run()方法。 3)实现Callable接口,重写call()方法。 35、同步 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
