面经总结:J2SE

  • 面向对象的特性?

(1.特性;2.优点)

封装、继承、多态;

  封装:封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。优点:1.隐藏对象的属性来保护对象内部状态;2.禁止对象的不良交互提高模块化;

  继承:给对象提供了从基类获取字段和方法的能力。优点:提高代码的重用性;

  多态:指允许不同类的对象对同一消息做出相应。所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。

  实现多态的三个条件:

  1)继承:在多态中必须存在有继承关系的子类和父类。

  2)重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。

  3)向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。

  多态的特点:父类对象引用子类;1.可以调用父类方法;2.子类重写父类则调用子类方法;3.只存在子类的方法不可调用,子类重载父类的方法不可调用(重载的方法父类中不存在!);

  多态的优点:可扩充性,可以方便的增加新的子类不影响已存在类的功能特性。

  • static可以修饰什么?final可以修饰什么?

static 可以修饰什么:成员变量、成员方法、静态块;

final 可以修饰什么:成员变量、成员方法、类;

一、final关键字可以用来修饰类、方法、变量。各有不同。

A、修饰类(class)。 
     1、该类不能被继承。 
     2、类中的方法不会被覆盖,因此默认都是final的。 
     3、用途:设计类时,如果该类不需要有子类,不必要被扩展,类的实现细节不允许被改变,那么就设计成final类

B、修饰方法(method) 
     1、该方法可以被继承,但是不能被覆盖。 
     2、用途:一个类不允许子类覆盖该方法,则用final来修饰 
     3、好处:可以防止继承它的子类修改该方法的意义和实现;更为高效,编译器在遇到调用fianal方法转入内嵌机制,提高了执行效率。 
     4、注意:父类中的private成员方法不能被子类覆盖,因此,private方法默认是final型的(可以查看编译后的class文件)

C、修饰变量(variable) 
     1、用final修饰后变为常量。包括静态变量、实例变量和局部变量这三种。 
     2、特点:可以先声明,不给初值,这种叫做final空白。但是使用前必须被初始化。一旦被赋值,将不能再被改变。

D、修饰参数(arguments) 
     1、用final修饰参数时,可以读取该参数,但是不能对其作出修改

二、final关键字不能用来抽象类和接口。

  • Java修饰符的范围?

成员变量的修饰符:

private:自身可以访问,同包子类不能继承,同包类不能访问;

默认:自身可以访问,同包子类可以继承,同包类可以访问;

protected:自身可以访问,同包子类可以继承,不同包子类可以继承,同包类可以访问,其他类不可以访问;

public:不同包子类可以继承,其他类可以访问;

public > protected > default > private

public 指定该变量为公共的,他可以被任何对象的方法访问。

private 指定该变量只允许自己的类的方法访问,其他任何类(包括子类)中的方法均不能访问。

protected 指定该变量可以被自身和子类访问。在子类中可以覆盖此变量

  • == 和 equals 的区别?

(1.基本类型; 2.基本类型封装;3.String;4.非字符串变量)

equals()是Object类的方法;

(1) 如果是基本类型比较,那么只能用==来比较,用equals会编译错误,因为不是对象。int a = 3;

(2) 对于基本类型的包装类型,比如Boolean、Character、Byte、Shot、Integer、Long、Float、Double等的引用变量,==是比较地址的,而equals是比较内容的。Integer n1 = new Integer(30);

(2.5)对于String a = “a”; Integer b = 1;这种类型的特有对象创建方式,==的时候值是相同的。

(3)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。

“==”比较两个变量本身的值,即两个对象在内存中的首地址。

“equals()”比较字符串中所包含的内容是否相同。

String s1 = "123"; 
String s2 = "123";

String s4 = new String("123"); 
String s5 = new String("123");

s1==s2 true;   s1.equals(s2) true;

s4==s5 false;   s4.equals(s5) true;

s1==s4 false;   s1.equals(s4) true;

s1/s2分别指向字符串常量"123"创建的对象,在常量池里只有一个对象,内容为"123";

s4/s5两个引用对象指向的对象内容相同,但是new操作符创建的,内存中分配两块空间给这两个对象,所以内存地址不同。

(4)对于非字符串变量来说,"=="和"equals"方法的作用是相同的都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。

  • 基本数据类型?

基本类型有八种:

整型4种:byte/short/int/long  字节数:1/2/4/8

字符型1种:char  2

浮点型2种:float/double  4/8

布尔型1种:boolean 1/8

一个字节等于8位,等于256个数,就是-128到127

大写的B表示Bytes=字节;小写的b表示bit=位;1byte=8bit;

自动转换:(小可转大,大转小会失去精度)

byte -> short/char -> int -> long -> float -> double

  • error/exception/runtime exception区别?

Error和Exception都实现了Throwable接口 
Error指的是JVM层面的错误,比如内存不足OutOfMemoryError
Exception 指的是代码逻辑的异常,比如下标越界OutOfIndexException

Exception分为可查异常CheckedException和运行时异常RuntimeException:

可查异常是必须处理的异常,要么try catch住,要么往外抛,谁调用,谁处理,比如 FileNotFoundException、IOException、SQLException等。如果不处理,编译器就不让你通过。

运行时异常 又叫做非可查异常,在编译过程中,不要求必须进行显示捕捉。

常见的Runtime Excepiton?

NullPointerException 空指针异常
ArithmeticException 算术异常,比如除数为零
ClassCastException 类型转换异常
ConcurrentModificationException 同步修改异常,遍历一个集合的时候,删除集合的元素,就会抛出该异常 
IndexOutOfBoundsException 数组下标越界异常
NegativeArraySizeException 为数组分配的空间是负数异常

为什么分两种异常?

Java之所以会设计运行时异常的原因之一,是因为下标越界,空指针这些运行时异常太过于普遍,如果都需要进行捕捉,代码的可读性就会变得很糟糕。

  • object类的方法?

9种;(简要介绍各方法)

  1.对象的复制/获取/String/释放:clone/getClass/toString/finalize;

  2.hash:equals/hashCode;

  3.多线程:wait/notify/notifyAll

clone:实现对象的浅复制;

getClass:获得运行时类对象;

finalize:用于释放资源;

equals:比较对象是否相等;基本类型不可以用equals,对于String类型“equals”和“==”作用不同;

hashcode:用于hash寻找;

wait:使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁;wait()方法一直等待,直到获得锁或者被中断。wait(longtimeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。

调用该方法后当前线程进入睡眠状态,直到以下事件发生:

(1)其他线程调用了该对象的notify方法。

(2)其他线程调用了该对象的notifyAll方法。

(3)其他线程调用了interrupt中断该线程。

(4)时间间隔到了。

此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。

notify:唤醒在该对象上等待的某个线程

  • 反射机制?

反射机制实际上就是动态的加载一些类,这些类在编译时不需要加载,但运行时再调用。

反射是在运行时获取类信息,通过动态的调用来改变程序行为。

  • 抽象类和接口的区别?

(1.变量;2.方法(抽象、public);3.一/多;)

  1)变量:接口的变量默认是final的,而抽象类可以包含非final变量;

  2)方法:接口中的方法默认是public,抽象类方法可以是private/protected/public;接口中只能提供抽象方法,而抽象类中既可以提供抽象方法,也可以提供实现方法;

  3)一个类可以实现很多接口,但只能继承一个抽象类;

  • Class中方法的执行顺序?

static{} > {} > className{} > method(){}

静态代码块>匿名方法块>构造方法>普通方法。

时间: 2024-10-11 12:47:25

面经总结:J2SE的相关文章

杏彩娱乐Java的不同版本:J2SE、J2EE、J2ME的区别

杏彩娱乐1998年12月,SUN公司发布了Java 1.2,开始使用"Java 2" 这一名称,目前我们已经很少使用1.2之前的版本,所以通常所说的Java都是指Java2. Java 有三个版本,分别为 J2SE.J2EE和J2ME,以下是详细介绍. J2SE(Java 2 Platform Standard Edition) 标准版 J2SE是Java的标准版,主要用于开发客户端(桌面应用软件),例如常用的文本编辑器.下载软件.即时通讯工具等,都可以通过J2SE实现. J2SE包含

J2EE J2SE J2ME

今天第一天入职时 ,陈泽鑫经理和我讲了一部分关于 这部分的知识,主要分析了J2EE 和 J2SE,首先J2SE 和 .net都是一些编程的基础知识,类,对象,(前端????) J2EE 是企业级应用的 知识,主要由  1.应用  2:容器 (tomcat weblogic) 3:组件 还讲了一部分知识,其中 线程是怎么使用的,使用线程的几种方式,  懵了   其实这个复习过很多遍 还是需要实践才会有印象,runnable   thred 还有 线程池  进程池   如果考虑的深的话 还需要考虑线

《J2EE,J2SE,J2ME》

J2EE(Java EE)是做企业级应用的.比如,163邮箱,比如某公司的管理系统 J2SE(Java SE)就是Java语言的标准版本,类似于C++,主要做桌面软件,比如Eclipse,MyEclipse由于微软的封杀,java的桌面应用非常少且本身没有太大的优势却劣势很大,不过J2SE应该是学习Java的人首先应该学习的. J2ME就是手机或者嵌入式软件,不是android,是以前那种手机的java应用 作者:武井 链接:http://www.zhihu.com/question/20827

J2SE总结

刚刚学完J2SE,总结一下,不当之处敬请赐教. 基本概念: 刚刚接触Java,突然冒出了好多了名词,一会儿J2SE,一会儿Java,一会儿JDK,蒙圈了,总结一下他们的关系吧. SDK:Software Development Kit,软件开发工具: JDK:Java Development Kit,Java开发工具: J2SDK:Java2 SDK: Java2:自JDK1.2之后Java版本统称为Java2(点击查看JDK各版本): J2SE.J2EE.J2ME是根据Java的应用而开发的不

J2SE基础:1.类和对象基础

什么是对象 在Java语言,所有的人,事物或者模块都是一个对象. 相同的对象具有一些相同的特性. 狗,猫,蛇3个对象(动物的对象) 苹果,梨,桔子3个对象(水果的对象) 什么是类 可以将现实生活中的对象经过抽象 这种抽象数据类型称为类. 动物类(Animal) 水果类(Fruit) 类和对象的关系 类是对象的模板(抽象化表示),对象是类的实例化(具体化的展现) 类的组成结构 Java是纯面向对象(除了8种基本数据类型) 而对象是从类产生的.因此类是组成Java程序最基本也是最核心的 元素. 变量

J2SE 学习记录

1.指法的练习--金山打字通: 2.马士兵教学视频 -- J2SE 3.集合学完,编写学生成绩管理系统 使用分层,面向对象的设计思路,封装学生类,在内存中实现增删改查, 4.熟悉IDE --eclipse的使用(快捷键.常用功能.debug) 5.编写程序的代码规范:注释.命名规则(驼峰表达式).分层 6.学习IO,输入输出流,存储学生信息到文件中保存. 7.学习JDBC,连接SQL server 2008,实现数据库数据存储.

J2SE基本数据结构

1.J2SE中的常用数据结构对象的继承关系如下图 Collection ........|--------List ........|..........|----------ArrayList ........|..........|----------Vector ........|..........|.............|-----Stack ........|..........|----------LinkedList ........|--------Set ........

Oracle SQL Developer: cannot find a j2se sdk

11.2.0 提示 cannot find a j2se sdk 并不是找不到正确的java?将启动developer的快捷方式修改下 需要安装gitbash之类的解释器 Start Menu > Oracle - OraDb11g_home1 > Application Development > SQL Developper -> Properties CHANGE "Target" By : C:\app\ORACLE_HOME\product\11.2.

J2SE与c#比较

最近在学习j2se,经过了大约有二十天,把马士兵老师的J2SE看完了,感觉这个老师太幽默了,听他讲课不会走神,时间的利用率特别高.真心的给马士兵老师点个赞,然后再给让我们学习这个视频的米老师点两个!(世界上不乏美好的事物,缺乏的是发现美好事物的眼睛!). 废话不多说了,看看在这个视频中,到底讲了那些内容.如下图所示, 可能学习过任何一种面向对象语言(我学的c#,c#就是仿照Java,并对java进一步改良)的人,看到这个图的第一感觉,都是这些东西基本上不是都学习过吗,好像只有GUI,JDBC是个

java入门时的一些基本概念的理解(j2ee,j2se,j2me,jdk,sdk,jre,jvm,跨平台)

首先声明,这篇文章是从网上粘贴过来的.原文地址是:http://www.cnblogs.com/wangaohui/archive/2012/11/28/2791999.html.感觉写的很好,所以粘贴过来记录下. 这些日子,在看一些java的东西,由于刚入手,对java不是很了解,结果对java的一些名词没有一个清晰的脉络,现在稍微整理一下 令我纠结的是jdk,sdk,jre,jvm,ide,adt,跨平台性,j2ee,j2se,这些名词弄的我云里雾里的. 首先,什么是SDK呢? Softwa