您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 软件工程师―java笔试题
1一面向对象1作用域public,private,protected,以及不写时的区别答:作用域当前类同一package子孙类其他packagePublic有效有效有效有效Private有效无权限无权限无权限Friendly有权有权无权限无权限不写时默认为friendly2面向对象的特征有哪些方面答:主要有以下四方面:1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要3.封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。4.多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。3Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被屏蔽了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型4abstractclass和interface有什么区别答:声明方法的存在而不去实现它的类被叫做抽象类(abstractclass),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况,一种不可以被实例化的类。抽象类中一般含有抽象方法,当然也可有具体实现。继承类只有实现过所有抽象类的抽象方法后才能被实例化。不能有抽象构造函数或抽象静态方法接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义staticfinal成员变量。一个接口定义一个协定。实现接口的类或结构必须遵守其协定。接口可以从多个基接口继承,而类或结构可以实现多个接口。接口可以包含方法、属性、事件和索引器。接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或接口必2须提供的成员。抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。但接口是一个行为的规范,里面的所有东西都是抽象的!abstract的method是不可同时是static、native、synchronized的5值类型和引用类型的区别?答:基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。与引用类型不同,从值类型不可能派生出新的类型。与引用类型不同,值类型不可能包含null值。然而,可空类型功能允许将null赋给值类型。每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。值类型主要由两类组成:结构、枚举结构分为以下几类:Numeric(数值)类型、整型、浮点型、decimal、bool、用户定义的结构。引用类型的变量又称为对象,可存储对实际数据的引用。声明引用类型的关键字:class、inte***ce、delegate、内置引用类型:object、string6当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递答:是值传递。Java编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的7关键字static的作用是什么?(请至少说明两种)答:【1).在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。2).在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。3).在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。】C语言中的意义static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。static对象可以在它的任何对象创建之前访问,无需引用任何对象。(1)static变量按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。所以一般在需要实现以下两个功能时使用静态变量:在对象之间共享值时方便访问变量时3(2)静态方法静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。(3)static和final一块用表示什么staticfinal用来修饰成员变量和成员方法,可简单理解为“全局常量”!对于变量,表一旦给值就不可修改,并且通过类名可以访问。对于方法,表示不可覆盖,并且可以通过类名直接访问。你可以将方法和变量都声明static成员的最常见的例子是main()。因为在程序开始执行时必须调用main(),所以它被声明为static。8、内部类的实现方式?答:示例代码如下:packagetest;publicclassOuterClass{privateclassInterClass{publicInterClass(){System.out.println(InterClassCreate);}}publicOuterClass(){InterClassic=newInterClass();System.out.println(OuterClassCreate);}publicstaticvoidmain(String[]args){OuterClassoc=newOuterClass();}}输出结果:C:\javatest/OuterClassInterClassCreateOuterClassCreate再一个例题:publicclassOuterClass{privatedoubled1=1.0;//insertcodehere}Youneedtoinsertaninnerclassdeclarationatline3.Whichtwoinnerclassdeclarationsare4valid?(Choosetwo.)A.classInnerOne{publicstaticdoublemethoda(){returnd1;}}B.publicclassInnerOne{staticdoublemethoda(){returnd1;}}C.privateclassInnerOne{doublemethoda(){returnd1;}}D.staticclassInnerOne{protecteddoublemethoda(){returnd1;}}E.abstractclassInnerOne{publicabstractdoublemethoda();}说明如下:一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。故A、B错二.静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;returnd1出错。故D错三.非静态内部类的非静态成员可以访问外部类的非静态变量。故C正确四.答案为C、E9java优缺点先说优点吧,比较显见一点1.指针.任何一个学过C或者C++的人都知道指针的操作对于他们是很重要的,为什么,指针能够支持内存的直接操作,这样的直接操作能够带来的是效率上的提高.但是任何一个东西都是有副作用的,指针给程序员带了的混乱也是无可比拟的.对于一个不是很强劲的C程序员而言,指针是要命的(对我而言也是,我几乎不会写C代码).而JAVA就为我们省去了这样的麻烦,或者说JAVA完整的限制了对内存的直接操作,让程序员能够安心去搞业务逻辑,而不用管自己后院的那堆内存有没有人来收拾.2.垃圾回收其实垃圾回收也是JAVA对于内存操作的限制之一,也大大解放了程序员的手脚.但是也正是这样的一个内存保姆的存在导致JAVA程序员在内存上几乎没有概念...一个纯粹的JAVA程序员对于内存泄露这样的问题是从来没有概念的,因为他从来不用担心,因为大多数情况下即便他大手大脚也不会有什么问题3.平台无关性平台无关性的真正意义在于程序的可移植性高,能够在多个平台平滑迁移。这点就特别适合网络应用。好吧,然后我们再来看看缺点吧:1效率1.1当然首先就是内存操作限制带来安全的同时带来的副面效果了.....51.2其次呢,就是面对对象的一个很重要的特点所带来的——多态导致的。1.3平台无关性带来的。由于需要平台无关,所以JAVA是不能直接调用OS的API的,JAVA需要调用自己的API来隐式地调用OS的API,大家可想而知这样的效果。多一层调用,必然多一层代码需要加载到栈内了。2逆向编译问题由于JAVA程序是动态连接的,从一个类到另外一个类的引用是符号化的。在静态连接的可执行程序中,类之间的只是直接的指针或者偏移量,。相反地,在JAVAclass文件中,指向另一个类的引用通过字符串清楚地标明了所指向的类的名字。如果引用指向一个字段的话,这个字段的名字和描述符会被详细说明。如果引用指向一个成员变量,这个成员变量的名字和描述符(方法的返回类型,方法参数的数量和类型)也会被详细说明。3线程调度问题Java虽然是一个总进程下的多线程,但是线程间的调度没有非常的清晰,由于为了能够支持多种系统的不同的线程支持策略,JAVA只能采取这样笼统而又松散的线程规范。二Java类库之集合类1List,Set,Map是否继承自Collection接口?答:List,Set是,Map不是。1、List接口List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。和Set不同,List允许有相同的元素。除了具有Collection接口必
本文标题:软件工程师―java笔试题
链接地址:https://www.777doc.com/doc-5088003 .html