您好,欢迎访问三七文档
1、面向对象的基本特征。1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。3.封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。4.多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,2、Java的基本数据类型都有什么?String是基本数据类型吗?基本数据类型包括int、short、byte、double、boolean、char、long、floatString不是基本数据类型,是引用数据类型。3、基本数据类型和引用数据类型有什么区别?基本数据类型在被创建时,在栈上给其划分一块内存,将数值直接存储在栈上;引用数据类型在被创建时,首先要在栈上给其引用(句柄)分配一块内存,而对象的具体信息都存储在堆内存上,然后由栈上面的引用指向堆中对象的地址。4、int和Integer有什么区别?1、int是java的基本数据类型之一,而Integer是java为int提供的封装类,它是引用类型2、int类型作为成员变量时的默认值为0,而Integer为null3、内存分配的位置不同5、String和StringBuffer有什么区别?String类提供了数值不可改变的字符串,而StringBuffer类提供的字符串可以进行修改,所以使用StringBuffer来动态构造字符数据。String覆盖了equals方法和hashCode方法,而StringBuffer没有覆盖equals方法和hashCode方法,所以,将StringBuffer对象存储进Java集合类中时会出现问题。6、运行时异常和一般异常有什么区别?异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。7、Error和Exception有什么区别?error是不能通过人为手段处理而使其得到改善的问题。如内存溢出后,我们是没办法让程序处理的。exception是由于程序的设计或执行环境配置不正确而产生的不正常情况。如程序方法有误,我们是可以通过一定的技术手段解决掉的。error是不能通过人为手段处理而使其得到改善的问题。如内存溢出后,我们是没办法让程序处理的。exception是由于程序的设计或执行环境配置不正确而产生的不正常情况。如程序方法有误,我们是可以通过一定的技术手段解决掉的。8、简述ArrayList、Vector和LinkedList的存储性能和特性。ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。LinkedList也是线程不安全的,LinkedList提供了一些方法,使得LinkedList可以被当作堆栈和队列来使用。9、Collection和Collections有什么区别?Collection是集合类的上级接口,继承于他的接口主要有Set和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。10、&和&&有什么区别?&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。&&具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式;&可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作。11、HashMap和HashTable有什么区别?就HashMap与HashTable主要从三方面来说。一.历史原因:Hashtable是基于的Dictionary类的,HashMap是Map接口的一个实现二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的三.值:HashMap允许一个空值的key和可以有多个空值的value,HashTable是不允许空值的12、final可以修饰什么,不可以修饰什么?为什么?final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。将方法声明为final,那就说明你已经知道这个方法提供的功能已经满足你要求,不需要进行扩展,并且也不允许任何从此类继承的类来覆写这个方法,但是继承仍然可以继承这个方法,也就是说可以直接使用。内部类要访问局部变量,局部变量必须定义成final类型Final不能修饰抽象方法,抽象类和接口,因为这些都是为了给其他类扩展和实现的,用final修饰这些就不能被扩展了13、Sleep和wait有什么区别?sleep是线程类(Thread)的方法,让该线程暂停执行指定时间,把执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。14、重载和重写有什么区别?重载overloading重载是指在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数个数或者参数类型却不相同。重写overriding重写是对父类的方法内容的重新定义,要求方法名和参数都相同,和父类方法写的一模一样也没关系。在实现接口时必须重写接口中的方法;抽象类中含有抽象方法时,继承的类必须重写其抽象方法。15、你是怎么理解同步和异步的?同步:发送一个请求,等待返回,然后再发送下一个请求。异步:发送一个请求,不需等待返回,随时可以再发送下一个请求。同步和异步最大的区别就在于同步需要等待,异步不需要等待。如果数据在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。同步可以避免出现死锁,读脏数据的发生。当程序调用了一个需要花费很长时间来执行的方法,并且程序不需要等待该方法的返回时,就可以使用异步编程,可以提高程序效率。16、抽象类和接口有什么区别?相同点:1、都不能实例化。2、都可以定义抽象方法,抽象方法都不能定义为Final。3、派生类必须实现抽象方法,除非该类是抽象类。不同点:1、接口中的域全部是常量,而抽象类中可以定义属性(非常量)。2、接口中的方法全部是抽象方法,而抽象类中可以定义非抽象的方法。3、接口可以多继承多实现,抽象类不能多继承。17、抽象方法为什么只能声明在抽象类或者接口中?(1)因为普通类如果包含抽象方法,实例化之后可以直接调用其中的抽象方法,而抽象方法是以abstract修饰的方法,是没有方法体的,直接调用会报错;(2)抽象类和接口不能被实例化,就不能直接调用抽象类和接口中的方法,满足条件;所以抽象方法只能声明在抽象类或者接口。18、抽象类和接口为什么不能实例化?抽象类:(1)抽象类中的抽象方法没有方法体,只有一个方法名,实例化没有任何意义;(2)程序中都有一个代码段,在内存中需要占据一定的内存空间。抽象类没有具体的实现方法,无法具体的给它分配内存空间。所以,为了安全,java不允许抽象类直接实例化(编译器强制规定不允许抽象类产生对象)。接口:接口是特殊的抽象类,接口中的方法都是抽象方法,抽象类不能被实例化。19、接口中能不能声明静态方法?为什么?不能,因为静态方法是不能被子类重写(也叫覆盖)的.接口中是不能有被实现的方法的,否则它就不是接口而是抽象类.一个类要实现接口中的方法,其实就是对接口方法的重写。而要实现静态方法,就必须重写接口中的静态方法,这和静态方法是不能被子类重写(也叫覆盖)的要求产生冲突。20、抽象类中能不能声明私有方法和私有属性?为什么?抽象类里面可以声明私有方法和属性;(1)抽象类不能实例化,无法直接调用私有方法和属性;(2)继承它的子类也没办法调用那个方法;相当于那个方法是个无用的方法,永远用不上,写这个方法跟没写毫无区别。所以抽象类中可以声明私有方法和私有属性,但是没意义的。21、抽象方法能不能声明为静态的?为什么?抽象方法不能声明成静态的原因:由于静态方法是可以通过类名调用,但是抽象方法是没有方法体的,不能直接调用,所以抽象方法不能定义为静态的。22、重定向和转发有什么区别?1.重定向:向服务器请求两次。转发:向服务器请求一次。2.重定向:浏览器地址栏中显示第二次请求的地址。转发:向服务器请求一次。服务器内部跳转。显示当前请求的地址。3.重定向语句response.sendRedirect(reg.jsp);转发语句request.getRequestDispatcher(login.jsp).forward(request,response);23、什么是GC?GC是垃圾收集的意思(GabageCollection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法24、如何创建一个线程类?1.通过扩展/继承Thread()方法来创建线程类,并且重写Thread类中的run()方法。2、通过实现java.lang.Runnable接口来创建线程类,并且实现Runnable接口中的run()方法。例如Threads实现runnable接口,那么启动线程Threads必须实现ThreadsC=newThreads();TrheadA=newthread(C);A.start();25、如何启动一个线程?线程的启动有两种方法:1.继承Thread类。Thread的继承类可以通过自己的对象调用start()方法2.实现Runnable接口。Runnable是接口,其方法都是抽象方法所以Runnable的实现类RunnableTest不能用自己的对象“rt”调用start()方法来启动线程。RunnableTest类启动线程的方法是Threadtt=newThread(rt);然后Thread对象tt调用start()方法。26、什么是数据库连接池?数据库连接时一种关键的有限的资源,对数据库的管理能显著影响到整个应用程序的伸缩性和健壮性影响到系统的性能指标。数据库连接池正是针对这个问题提出来的,数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个数据库连接,而不是重新建立一个。数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,
本文标题:java基础概念
链接地址:https://www.777doc.com/doc-2880813 .html