Java关流对流对象有什么影响_java基础面试题02

1. 值传递和引用传递的区别?1.值传递:在方法调用中,实参会把它的值传给形参,形参只是用实参的值初始化一个临时的存储单元,因此形参与实参虽有相同的值,但却有着不同的存储单元。因此对形参的改变不会影响实参的值。

2.引用传递:在方法调用中,传递的是对象(地址值),这时形参与实参执行同一块存储单元,因此对形参的改变会影响实参的值。

2.什么是不可变类?当创建了这个类的实例后,就不允许修改它的值了。也就是说一个对象一旦被创建出来,在其整个生命周期中,它的成员变量就不能被修改了。

3.Instanceof有什么作用判断一个引用类型的变量所指向的对象是否是一个类的实例。

4.static关键字有哪些作用?1.为特定数据类型或对象分配单一的储存空间,而与创建对象的个数无关;

2.实现某个方法或属性与类(而不是对象)关联在一起。

static主要有4中使用情况:

4.1修饰成员变量。static修饰的变量叫静态变量/类变量/全局变量。随着类的加载而加载到方法区中的静态区,并且在静态区赋予了初始值。静态变量优先于对象加载,通过类名.来调用;

4.2修饰成员方法。static修饰的方法叫静态方法,也叫类方法。也是随着类的加载而加载到方法区中的静态区。通过类名.来调用;

4.3修饰静态代码块。静态代码块在类中是独立于成员变量和成员方法的代码块,它不在任何一个方法体内,jvm在加载类时会执行静态代码块,静态代码块优先于构造代码块执行,在类加载时执行,且只执行一次;

4.4静态内部类。静态内部类可以不依赖于外部类实例对象而被实例化,通常的内部类需要在外部类实例化后才能实例化。静态内部类不能与外部类有相同的名字,不能访问外部类的普通资源,只能访问外部类的静态资源。因为静态只能调用静态的。

5.双亲委派机制双亲委派机制的工作原理是:如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其他父类加载器,则进一步向上委托,依次递归,请求最终达到顶层的类加载器。如果父类的加载器可以完成加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子类加载器才会尝试自己去加载。

6.谈谈jvm的内存结构和内存分配java虚拟机将其管辖的内存大致分为3个逻辑部分:方法区、栈和堆

6.1方法区是静态分配的,编译器将变量绑定在某个存储位置上,而这些绑定不会在运行时改变。常数池,String常量和static变量保存在方法区;

6.2栈:是一个逻辑概念。特点是先进后出,后进先出,就行子弹匣。一个栈的空间可以是连续的也可以是不连续的。最典型的应用就是方法调用,java虚拟机每调用一次方法就创建一个方法帧(frame),退出该方法时则对应的方法帧被弹出。栈中存储的数据是运行时确定的。

6.3堆分配意味着以随意的顺序,在运行时进行储存空间分配和回收的内存管理模型。堆中储存的数据往往是大小、数量和生命周期在编译时无法确定的。java对象的内存总是在堆中分配

java内存分配:

1.基本数据类型直接在栈空间分配;

2.方法的形参直接在栈空间中分配,当方法调用完成后从栈空间回收;

3.引用类型,需要用new来创建,在栈中分配一个地址空间,在堆中分配对象的类变量;

4.方法的引用参数,在栈中分配一个地址空间,并指向堆空间的对象区,当方法调用完后从栈空间回收;

5.局部变量new出来时,在栈和堆中分配空间,局部变量生命周期结束后,栈空间立即被回收,堆空间区域等待GC回收;

6.数组在栈空间分配数组名称,在堆空间分配数组的实际大小。

7.如何通过反射创建对象1.通过类对象调用newInstance()方法,例如String.class.newInstance()

2.通过类对象的getConstructor()或getDeclaredConstructor()方法获得构造器对象并调用其newInstance()方法创建对象。

8.java如何实现序列化,有何意义8.1序列化是一种用来处理对象流的机制。对象流就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可以将流化后的对象传输于网络之间。

8.2要实现序列化,需要让类实现Serializable接口,该接口是一个标识性接口,标注该类对象是可以序列化的。然后用一个输出流来构造一个对象输出流并通过writeObject()方法就可以实现对象的写出;

如果需要反序列化,就用一个输入流来建立一个对象输入流,然后通过readObject方法从流中读取对象。

8.3序列化解决了对象流读写操作时引发的乱序问题。

序列化除了实现对象的持久化之外,还能够用于对象的深度克隆。

9请说出与线程同步以及线程调度相关的方法wait():使一个线程处于等待(阻塞)状态,并释放所持有的对象的锁;

sleep():使一个正在运行的线程处于休眠状态,是一个静态方法,调用此方法要处理InterruptedException异常;

notify():唤醒一个处于等待状态的线程,在调用此方法时,并不能确切的唤醒某一个等待状态的线程,而是有JVM确定唤醒那个线程,而且与优先级无关;

notityAll():唤醒所用处于等待状态的线程,调用该方法并不是将对象的锁给所用线程,而是让他们竞争,只有获得锁的线程才能进入就绪状态。

线程的5个状态:新建状态-可运行状态-运行状态-阻塞状态-终止状态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值