1.final关键字的特点

final修饰变量时,在堆内存中的地址是不变的,但对象的内容是可变的。//思考,找例子

2.静态变量的特点

实例变量是用对象引用,要先实例化对象,而静态变量属于类,只要类加载了,就可通过类名

直接调用。

3.静态方法(一块内存,且内存共享)是否可以调用非静态方法?

不可以,会报错,而非static方法是可以访问静态方法的。

//写个例子,一个main方法一个普通方法一个静态方法

4.equals与==的区别

equals是判断两对象内容相等,==是判断值是否相等,

如果判断引用类型(比如String或其它引用类型)则判断内存地址是否相同。

//看以往的笔记或找例子

/*字符串比较*/

public class StringCompareTest {

    public static void main(String[] args) {

        String s1 = "abc中文";

        String s2 = "abc中文";

        String s3 = new String("abc中文");

        System.out.println(s1 == s2);//true,在常量池中有同一块空间,因为内容相等,所以不会再申请

        System.out.println(s1.equals(s2));//true

        System.out.println("----------");

        System.out.println(s1 == s3);//false

        System.out.println(s1.equals(s3));//true

    }

}

5.equals与hashCode的区别与关系。

比如为什么它们之间存在着充分不必要关系?另外,…

6.int和Integer的区别?

Integer是引用类型,默认值是null,而int是值类型,默认值为0,Integer是

int的包装类型。

7.private变量是否可以被继承?父类的private方法是否可以被子类调用?

//写个例子

public class Father {

private String name;//私有属性

private char sex;

public void tell(){

System.out.println(name+sex);

}

private void speak(){

System.out.println(name+"is speaking!");

}

public class Child extends Father {

}

/**

* 定义测试类

* @author CBS

*/

public class Test {

public static void main(String[] args) {

Child c=new Child();

c.tell();//tell方法是可以用的

//c.speak();//报错,父类的私有方法不可见

}

}

//子类不能继承父类的私有属性,但是如果子类中公有的方法影响到了父类私有属性,那么私有属性是能够被子类使用的,父类的私有方法不可以直接被使用。

9.private/public/default/protected的区别?

private的权限最小,可以理解为当前类权限。‘4’

public的权限最大,跨类甚至跨包访问。‘1’

protected不可以跨包访问,所以也近似包权限,但可以访问不同的子孙‘2’

default(有的也用friendly表示),可以理解为包权限。‘3’

10.重写和重载的区别?

重载是同一个类中,方法名相同,但参数类型或个数不同,与返回值无关。

重写是多个类中,产生继承的关系,父类与子类的方法相同,一般情况下

子类的访问权限大于等于父类的权限。

//以前书上看过重载是编译时多态,重写是运行时多态.正确.

11.接口和抽象类的区别?

区别:定义接口的关键字是interface  定义抽象类的关键字是abstract

接口中的成员不能私有,抽象类可以。

接口中定义的成员,是final public static类型,抽象类没有。

接口中不能有普通方法,抽象类可以有。

抽象类不可以修饰属性和构造方法。

public abstract class Person{

 private String name;

 private int age;

 private char gender;//不能用abstract来修饰属性

 public Person(){//不能用abstract来修饰它

 }

 public String getName(){

  return name;

 }

 public void setName(String name){

  this.name=name;

 }

 public void print(){

  System.out.print(...);

 }

 public abstract void learn();//无方法体,不能有大括号

}

public interface USB{

 void init();

}//写一个接口

public class Udisc implements USB{

 //重写init方法,用implements来实现接口的方法体

 @override

 public void init(){

          System.out.print("U盘初始化");

 }

}

public class Test{

 public static void main(String[] args) {

  Udisc a=new Udisc();

  a.init();

 }

}

相同:

两个都不new但接口与抽象是面向对象的必备知识,设计模式、重构

代码有必然作用。

final, finally, finalize的区别

final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,

类不可继承,内部类要访问局部变量,局部变量必须定义成fianl类型

finally是异常处理的一部分,总是执行。

finalize是Object类中的一个方法,在垃圾回收器执行的时候回调用被

回收对象的此方法,可以覆盖此方法提供垃圾的其他资源回收,例如

关闭文件等。JVM不保证此方法总被调用。

String、StringBuffer与StringBuilder区别

1.String字符串常量,速度最慢

2.StringBuffer字符串变量(线程安全),速度次之

3.StringBuilder字符串变量(非线程安全),速度最快

所有的类都继承与object类的直接子类有哪些?object类常用的方法

有哪些?

1.clone方法

保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用

该方法,否则抛出CloneNotSupportedException异常。

2.getClass方法(复习一下几种获得Class的方法

final方法,获得运行时类型。

1)调用Object中的getClass()

Class c1=x.getClass();

2)用Class类的forName()静态方法获得与字符串对应的Class对象

Class c2=Class.forName(“java.lang.String”);

3)用“类型名.class”获取该类型的Class对象。例如:

Class c1=Manage.class;

Class c2=int.class;

3.toString方法

该方法用得比较多,一般子类都有覆盖。

4.finalize方法

该方法用于释放内存资源,因为无法确定该方法什么时候被调用,很少

使用。

5.equals、hashCode方法

6.toString方法

7.notify、notifyAll、wait方法

8.数组有没有length()方法?String有没有length()方法?

数组无length()方法,有length属性,String有length()方法

String[] aaa=new String[]{“sa”};

aaa.length;

String str=“aaaa”;

str.length();

7.hashCode方法

该方法用于hash查找,重写equals方法和hashCode方法,该方法具有

哈希功能的Collection中用到,一般必须满足obj1.equals(obj2)=true;

可以推出obj1.hash()-Code()=obj2.hashCode(),但是hashCode相等

不要满足equals。不过为了提高效率,应该尽量使上面两个条件接近

等价。

8.

1.if(usename. equals(“zxx”)){ }

//如果usename=null时,则会报空指针错误,可以改为zxx.usename??

2.int x=1;

return x==1? true:false;

9.String是类,不是基本数据类型,算是引用数据类型

10.运行时异常和一般异常的区别

运行时异常是运行时出现异常,而一般异常是编译的时候出现异常

11.请你写出5个runtime Exception。

空指针、数组越界、ClassCastException(找不到类)

//查一下

12.什么是多线程?

在一个应用程序中,同时,有多个不同的执行路径(像树的结构)。

13.说一下多线程的好处?

提供程序效率;并发执行,可以给人更真实的感受,比如一个网页既有图片又有

文字,如何同步呢?如果用到线程给人的感官就更真实了。

14.线程和进程有什么区别?

线程是进程的一条执行路径,而进程是线程的集合,另外,程序是静态的可触发的进程。

15.什么是线程同步、异步?

线程同步表示,当前线程执行完后下一个线程接着执行。

线程异步表示,在一个应用程序中,同时,有多个不同的执行。

16.线程之间如何同步?

线程之间同步使用synchronized、wait、notify。

//多做题,多自己动手写代码练习,学习过程一定要有个输入输出的过程。

//找个例子

public class Bank {

    private double[] accounts;

    private int amounts;

    public synchronized void transfer(int from, int to, int amount) throws  InterruptedException{

        while (accounts[from]<amounts){

            wait();

            accounts[from]-=amount;

            accounts[to]+=amount;

            notifyAll();

        }

    }

    public synchronized double getTotalBalance(){

    }

}

17.什么是线程不安全?

就是在多个线程共享同一个数据受到其他线程的干扰,出现访问

错误或死锁。如何解决:使用线程同步技术,用上锁(synchronized),

让一个线程执行完了,再让另个线程执行。

18.如何创建一个线程?

方法一:继承Thread,重写run方法,启动一个线程用start();

方法二:实现Runnable接口,重写run方法,启动一个线程用

start();

//找个例子

public class ThreadTest extends Thread {

    public void run(){

        for (int i=0;i<100;i++){

            Thread a=new ThreadTest();

            System.out.println("ThreadTest"+i);

        }

    }

}

public class MyRunner implements Runnable {

    public void run(){

        for (int i=0;i<100;i++){

            System.out.println("MyRunner"+i);

        }

    }

    public static void main(String[] args) {

        MyRunner mr=new MyRunner();

        Thread thread2=new Thread(mr);

    }    

}

19.是用Runnable接口好?还是继承Thread更好?

是用Runnable接口更好,因为它可以实现多继承,可以共享变量资源。

20.sleep()和wait()有什么区别?

a、sleep是让当前线程指定休眠时间,然后继续工作,不释放

锁。//(Thread.sleep(1000);)

b、让当前线程wait则是等待,直到有线程通知notify()唤醒

它才会重新工作,释放锁。//this.wait();   this.notify();

21.集合的框架结构图

1)它的框图记住没?里面的一些相似概念的区分呢?

ArrayList是查询较快(底层是通过数组实现的,数组的默认长度为10),增删较慢,而LinkList由于内部是双链表,所以插入删除较快,查询效率低。(找个例子,或者看看书)

22.说一下HashMap底层实现方式?

HashMap是由数组+链表组成

23.ArrayList和Vector的异同?

相同点:这两个类都是实现List接口的(List接口继承了Collection接口),

它们都是有序的,相当于是一个动态数组,易于索引,且数据可以重复。

不同点:Vector相对于ArrayList是相对安全的,因为它是同步的,且

它增加了一个可以返回枚举类型的数据的方法(看蓝白书)。还有数据增长....(看宝典)

24.HashMap和HashTable的区别

HashMap和HashTable都属于Map接口下的,

区别同上,HashMap相比HashTable是不安全的。(看之前的博客)

25.Collection和Collections的区别是什么?

Collection是集合类的上级接口,继承于它的接口主要有Set和List,

Collections是针对集合类的一个帮助类它提供了一系列的静态方法

实现了集合的排序,搜索和线程的安全等操作。

26.Set里的元素是不能重复的,那么用什么方法区分重复与否?

用==还是用equals()?它们的区别?

元素是否相当用equals(找例子,看书)

27.HashMap的底层实现是用链表加数组实现的,它的put方法是通过

取模长度来得到这个下标的,一旦下标相同就会使用链表。

28.请说下Iterate的作用

迭代器可以实现Collection接口的方法,所以一个一个地获取集合中的

元素,在遍历集合是,可判断是否还有下一元素。(找个例子)

29.HashSet和TreeSet的区别?什么时候用它们?

HashSet中元素不能重复,无顺序,TreeSet中的元素,但有顺序,

遍历集合中的元素排序是,用TreeSet,一般情况下用HashSet因为

不需要排序,速度比TreeSet块。

30.什么是泛型?怎么使用?有什么好处?

答:定义一个集合时,可以特意定义一个类型,可以强制转换。

31.for—each是强循环,一般用来遍历数组和集合。

32.HashMap和HashTable的区别

HashMap的键值对可以为空

HashTable的键值对不可以为空,线程安全。

33.Collections 的6个方法,并详细解释

34.集合和数组的优缺点

集合可以无限添加,集合什么类型都可以装,数组长度固定,

而且只能装单一类型。

笔试题二(java面向对象、多线程、集合)的更多相关文章

  1. 备战金三银四!一线互联网公司java岗面试题整理:Java基础+多线程+集合+JVM合集!

    前言 回首来看2020年,真的是印象中过的最快的一年了,真的是时间过的飞快,还没反应过来年就夸完了,相信大家也已经开始上班了!俗话说新年新气象,马上就要到了一年之中最重要的金三银四,之前一直有粉丝要求 ...

  2. 【笔试题】Java笔试题知识点

    Java高概率笔试题知识点 Java语法基础部分 [解析]java命令程序执行字节码文件是,不能跟文件的后缀名! 1.包的名字都应该是由小写单词组成,它们全都是小写字母,即便中间的单词亦是如此 2.类 ...

  3. 20155303 实验二 Java面向对象程序设计

    20155303 实验二 Java面向对象程序设计 目录 一.单元测试和TDD 任务一:实现百分制成绩转成"优.良.中.及格.不及格"五级制成绩的功能 任务二:以TDD的方式研究学 ...

  4. 20155234 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步骤 (一)单元测试 ...

  5. 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  6. 20145213《Java程序设计》实验二Java面向对象程序设计实验报告

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

  7. 20145206《Java程序设计》实验二Java面向对象程序设计实验报告

    20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

  8. 20145308刘昊阳 《Java程序设计》实验二 Java面向对象程序设计 实验报告

    20145308刘昊阳 <Java程序设计>实验二 Java面向对象程序设计 实验报告 实验名称 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面相对象三要素:封 ...

  9. 20145113 实验二 Java面向对象程序设计

    20145113 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 1.初 ...

  10. JAVA课程实验报告 实验二 Java面向对象程序设计

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

随机推荐

  1. 2018C语言第二次作业

    一.学习内容总结 1.指针是一种数据类型,同样占有空间,其存储的是内存地址: 2.定义指针变量要在变量名之前加“*”字符表示: 3.“&”是取地址运算符,“*”是间接运算符: (注:声名和使用 ...

  2. 【技术开放日】msup携手HPE揭秘全球测试中心背后的12条技术实践

    保证软件产品质量是软件测试永恒的目标. 以控制为出发点的传统IT时代正在快速的向以激活生产力为目的的移动互联时代转变.这不仅是技术的升级,更是思想意识的巨大变革,也对软件技术的发展带来的更高的要求和更 ...

  3. HDU 4734 - F(x) - [数位DP][memset优化]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4734 Time Limit: 1000/500 MS (Java/Others) Memory Lim ...

  4. Kettle 4.2源码分析第四讲--KettleJob机制与Database插件简介(含讲解PPT)

    1.  Job机制 一个job项代表ETL控制流中的一项逻辑任务.Job项将会顺序执行,每个job项会产生一个结果,能作为别的分支上job项的条件. 图 1 job项示例 1.1. Job类图简介 图 ...

  5. CCCC L2-017. 人以群分 贪心

    https://www.patest.cn/contests/gplt/L2-017 题解:贪心,一点小数学 坑:XJB改下标改错了 #include <iostream> #includ ...

  6. SAPI

    https://en.wikipedia.org/wiki/Server_Application_Programming_Interface In computing, Server Applicat ...

  7. AppFog使用

    cd ‘你的应用目录’ af login(之后输入你的邮箱和密码) af update ‘你的应用名’ 相关文档:https://docs.appfog.com/getting-started/af- ...

  8. git快速入门 push/clone/reset/merge/切换分支全都有

    本文介绍git快速入门,从安装/创建init / 发布push/版本回退reset / branch分支切换/合并分支merge 这些基本的操作都有涉及,方便新人快速入手,有需要的朋友mark一下.首 ...

  9. linux上mysql安装详细教程

    所有平台的MySQL下载地址为: MySQL 下载. 挑选你需要的 MySQL Community Server 版本及对应的平台. MySQL - MySQL服务器.你需要该选项,除非你只想连接运行 ...

  10. 008-插件方式启动web服务tomcat,jetty

    一.pom引入 1.tomcat7 <!-- tomcat7 --> <plugin> <groupId>org.apache.tomcat.maven</g ...