疯狂java


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

Java基础面试题


 

   

  1.java的三种技术架构?

  a.J2EE(Java 2 Platform Enterprise Edition) 企业版

  是为开发企业环境下的应用程序提供的一套解决方案。

  该技术体系中包括 servlet jsp等,主要针对于web应用程序开发。

  b.J2SE(Java 2 Platform Standard Edition) 标准版

  是为开发普通桌面和商务应用程序提供的解决方案。

  该技术体系是其他两者的基础,可以完成一些桌面应用程序的开发。

  c.J2ME(Java 2 Platform Micro Edition) 小型版

  是为开发电子消费产品和嵌入式设备提供的解决方案。

  该技术体系主要用于小型电子消费类产品,如手机中的应用程序等。

  2. Jdk和Jre的区别?

  jdk(java development kit),是java的开发工具集。

  jre(java runtime environment),是java程序的运行环境。

  所以jdk和jre的区别就是一个用于开发,一个用于运行,联系就是他们都是java开发者所必备的

  3. Javac和Java命令做什么事情呢?

  要知道java是分两部分的:一个是编译,一个是运行。

  javac:负责的是编译的部分,当执行javac时,会启动java的编译器程序。对指定扩展名的.java文件进行编译。 生成了jvm可以识别的字节码文件。也就是class文件,也就java的运行程序。

  java:负责运行的部分.会启动jvm.加载运行时所需的类库,并对class文件进行执行.文件要被执行,必须要有一个执行的起始点,这个起始点就是main函数.

  4. Java的数据类型。

  Java的数据类型有两种:

  (1)基本数据类型(八大基本数据类型)

  整型

  a. byte字节型 1字节 8bit 最大存储数据量是255,存放的数据范围是-128~127之间

  b. short短整型 2字节 16bit 最大数据存储量是65536,数据范围是-32768~32767之间

  c. int整型 4字节 32bit 最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1

  d. long长整型 8字节 64bit 最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1

  浮点型

  e. float单精度 4字节 32bit 数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F

  f. double双精度 8字节 64bit 数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加

  字符类型

  g. char字符型 用单引号

  布尔类型

  h. boolean布尔型 true/false(只有真假两种结果)

  (2)引用数据类型

  JAVA中,非简单数据类型的类型都是引用数据类型。

  5. &和&&的区别?

  &和&&都是逻辑运算符,都是判断两边同时真则为真,否则为假;但是&&当第一个条件不成之后,后面的条件都不执行了,而&则还是继续执行,直到整个条件语句执行完为止。

  6. |和||的区别?

  ||和|都是表示“或”,区别是||只要满足第一个条件,后面的条件就不再判断,而|要对所有的条件进行判断。

  7. 栈和堆。

  JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)堆区:1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)。2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身。栈区:1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中。2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。方法区:1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

  在Java语言里堆(heap)和栈(stack)里的区别:

  1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。

  2. 栈中存放局部变量(基本类型的变量)和对象的reference。栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈是跟随线程的,有线程就有栈。

  3. 堆中存放对象,包括对象变量以及对象方法。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。堆是跟随JVM的,有JVM就有堆内存。

  8. 面向对象。

  面向对象主要特征:

  封装性:封装是一种信息隐蔽技术,它体现于类的说明,使数据更安全.是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。

  继承性:继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个类直接继承其它类的全部描述,同时可修改和扩充。

  继承具有传递性和单根性.如果B类继承了A类,而C类又继承了B类,则可以说,C类在继承了B类的同时,也继承了A类,C类中的对象,可以实现A类中的方法.一个类,只能够同时继承另外一个类,而不能同时继承多个类,通常所说的多继承是指一个类在继承其父类的同时,实现其他接口.类的对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复。继承支持系统的可重用性,从而达到减少代码量的作用,而且还促进系统的可扩充性。

  多态性:对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。例如:Print消息被发送给一图或表时调用的打印方法与将同样的Print消息发送给一正文文件而调用的打印方法会完全不同。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。在OOPL中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。

  综上可知,在OO方法中,对象和传递消息分别表现事物及事物间相互联系的概念。类和继承是是适应人们一般思维方式的描述范式。方法是允许作用于该类对象上的各种操作。这种对象、类、消息和方法的程序设计范式的基本点在于对象的封装性和类的继承性。通过封装能将对象的定义和对象的实现分开,通过继承能体现类与类之间的关系,以及由此带来的动态联编和实体的多态性,从而构成了面向对象的基本特征。

  面向对象的要素

  (1)抽象。

  抽象是指强调实体的本质、内在的属性。在系统开发中,抽象指的是在决定如何实现对象之前的对象的意义和行为。使用抽象可以尽可能避免过早考虑一些细节。

  类实现了对象的数据(即状态)和行为的抽象。

  (2)封装性(信息隐藏)。

  封装性是保证软件部件具有优良的模块性的基础。

  面向对象的类是封装良好的模块,类定义将其说明(用户可见的外部接口)与实现(用户不可见的内部实现)显式地分开,其内部实现按其具体定义的作用域提供保护。

  对象是封装的最基本单位。封装防止了程序相互依赖性而带来的变动影响。面向对象的封装比传统语言的封装更为清晰、更为有力。

  (3)共享性

  面向对象技术在不同级别上促进了共享

  同一类中的共享。同一类中的对象有着相同数据结构。这些对象之间是结构、行为特征的共享关系。

  在同一应用中共享。在同一应用的类层次结构中,存在继承关系的各相似子类中,存在数据结构和行为的继承,使各相似子类共享共同的结构和行为。使用继承来实现代码的共享,这也是面向对象的主要优点之一。

  在不同应用中共享。面向对象不仅允许在同一应用中共享信息,而且为未来目标的可重用设计准备了条件。通过类库这种机制和结构来实现不同应用中的信息共享。

  9. 成员变量和局部变量的区别?

  成员变量:在这个类里定义的私有变量,属于这个类。

  局部变量:在方法体里创建,在方法体外访问不到这个变量。局部变量的创建与使用(局部变量必须赋值,成员变量可以不赋值)

  区别:

  局部变量描述的是这个方法体内的属性,而成员变量描述的是这个对象里的属性。

  成员变量可以被public、protected、default、private、static、final修饰符修饰,局部变量只能被final修饰符修饰。

  成员变量在堆里进行创建,局部变量在栈里进行创建。

  局部变量是系统默认值,局部变量没有系统默认值,必须手动赋值

  10. 构造函数和一般函数有什么区别?

  a:两个函数定义格式不同。

  b:构造函数是在对象创建时,就被调用,用于初始化,而且初始化动作只执行一次。

  一般函数,是对象创建后,需要调用才执行,可以被调用多次。

  11. 构造代码块和构造函数有什么区别?

  构造代码块:是给所有的对象进行初始化,也就是说,所有的对象都会调用一个代码块。只要对象一建立。就会调用这个代码块。

  构造函数:是给与之对应的对象进行初始化。它具有针对性。