疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

对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
list 、Queue 、set 、stack都继承Collection接口。
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、同步
要想实现同步操作,必须获得每个线程对象的锁,获得它可以保证同一时刻只有一个线程能够进入临界区,并且在这个锁被释放之前,其他线程就能再进入临界区,如果还有其他线程想要获得该对象的锁,只能进入等待队列等待。
36、多进程同步的实现方法:
1)synchronized关键字
2)Wait()方法与notify()方法
3)Lock
37、终止线程的方法:stop()方法与suspeng()方法。
Java提供两种线程:守护线程(服务进程)、用户进程。
38、如何通过JDBC来访问数据库:
1)加载JDBC驱动器,将JDBC驱动 jar包复制到lib下
2)加载JDBC驱动
3)创建数据库连接
4)建立Statement对象或是PrepareStatement对象。用于对数据库操作
5)执行SQL语句
6)访问结果集ReaultSet对象
7)依次关闭ReaultSet Statement Connection。
39、Class.forName()方法的作用是把类加载到JVM中。
在使用JDBC连接数据库之前,一般会调用Class.forName(“com.mysql.jdbc.Driver”)方法来加载驱动。
Statement用于执行不带参数的简单SQL语句,并返回它所生成结果的对象。每次执行SQL,数据库都会编译该SQL语句。
PrepareStatement可执行带参数的。效率更高,可读性,可维护性更高,安全性更好
40、JDBC提供了getString()、getInt()、getIData()等方法从ResultSet中获取数据。
41、在JDBC连接时连接池数目有限,所以一定要保证释放不再使用的连接。
createStatement和prepareStatement最好放在循环外面,而且使用statement后需要及时关闭。最好是执行一次executeQuery后马上关闭statement。
42、Hibernate是JDBC的封装。采用配置文件的形式将数据库的连接参数写到XML中,但
是最后对数据库的访问还是要通过JDBC来完成。
43、Hibernate是个持久层框架,它将表中的信息映射到XML中,再从XML文件映射到相应的持久化类中。
采用SSH框架,不仅能实现视图、控制器与模型的彻底分离,而且还能实现业务逻辑与数据持久层的分离