Java访问修饰符
- default: 默认访问修饰符,在同一包内可见
- private: 在同一类内可见,不能修饰类
- protected : 对同一包内的类和所有子类可见,不能修饰类
- public: 对所有类可见
什么是Java程序的主类?应用程序和小程序的主类有何不同?
一个程序中可以有多个类,但只能有一个类是主类。在Java应用程序中,这个主类是指包含main()方法的类。而在Java小程序中,这个主类是一个继承自系统类JApplet或Applet的子类。应用程序的主类不一定要求是public类,但小程序的主类要求必须是public类。主类是Java程序执行的入口点。
Java应用程序与小程序之间有那些差别?
简单说应用程序是从主线程启动(也就是main()方法)。applet小程序没有main方法,主要是嵌在浏览器页面上运行(调用init()线程或者run()来启动),嵌入浏览器这点跟flash的小游戏类似。
什么是值传递和引用传递?
值传递,是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。
引用传递,一般是对于对象型变量而言的,传递的是该对象地址的一个副本,并不是原对象本身。
一般认为,Java 内的传递都是值传递,Java 中实例对象的传递是引用传递。(指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。传递的是值的引用,也就是说传递前和传递后都指向同一个引用)
接口的意义
规范,扩展,回调。
父类的静态方法能否被子类重写
不能。重写只适用于实例方法,不能用于静态方法,而子类当中含有和父类相同签名的静态方法,我们一般称之为隐藏。
什么是不可变对象
float f=3.4;是否正确
不正确。3.4 是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成 float f =3.4F。
short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗
如何将byte转为String
可以使用 String 接收 byte[] 参数的构造器来进行转换,需要注意的点是要使用的正确的编码,否则会使用平台默认编码,这个编码可能跟原来的编码相同,也可能不同。
Java支持多继承么?
Java中类不支持多继承,只支持单继承(即一个类只有一个父类)。 但是java中的接口支持多继承,即一个子接口可以有多个父接口。(接口的作用是用来扩展对象的功能,一个子接口继承多个父接口,说明子接口扩展了多个功能,当类实现接口时,类就扩展了相应的功能)。
String s = new String(“xyz”);创建了几个字符串对象
执行 会创建一个 对象。此外,字符串字面量 会被存储在字符串常量池中(如果之前不存在的话)。所以,这里总共涉及到两个字符串实体,但实际用 创建的新对象只有一个。
集合
collection相关
hashmap
jdk1.8的新特性
Lamdba表达式
Stream流
方法引用(::)
函数式接口(@FunctionalInterface)
接口允许default方法和static方法
Optional类
字符串拼接利器-StringJoiner
CompletableFuture类
LocalDateTime类
Collection和Collections区别
https://blog.csdn.net/xiaowanzi_zj/article/details/
finally和return的执行顺序
https://blog.csdn.net/xiaowanzi_zj/article/details/
形参和实参
实际参数是调用有参方法的时候真正传递的内容,而形式参数是用于接收实参内容的参数。
Java有什么特点
简单易学(Java语言的语法与C语言和C++语言很接近)
面向对象(封装,继承,多态)
平台无关性(Java虚拟机实现平台无关性)
支持网络编程并且很方便(Java语言诞生本身就是为简化网络编程设计的)
支持多线程(多线程机制使应用程序在同一时间并行执行多项任)
健壮性(Java语言的强类型机制、异常处理、垃圾的自动收集等)
安全性
switch是否能作用在 byte 上,是否能作用在 long 上,是否能作用在String上
在 Java 5 以前,switch(expr)中,expr 只能是 byte、short、char、int。从 Java5 开始,Java 中引入了枚举类型,expr也可以是 enum 类型,从Java7开始,expr 还可以是字符串(String),但是长整型(long)在目前所有的版 本中都是不可以的。
用最有效率的方法计算 2 乘以 8
2 << 3(左移 3 位相当于乘以 2 的 3 次方,右移 3 位相当于除以 2 的 3 次 方)
Java语言采用何种编码方案?有何特点?
Java语言采用Unicode编码标准,Unicode(标准码),它为每个字符制订了一 个唯一的数值,因此在任何的语言,平台,程序都可以放心的使用。
Java注释
单行注释 格式: // 注释文字
多行注释 格式: /* 注释文字 */
文档注释 格式:/ 注释文字 */
Java中的多态是什么
就是同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。
Java中多态其实是一种运行期的状态。为了实现运行期的多态,或者说是动态绑定。
需要满足三个条件:
- 有类继承或者接口实现
- 子类要重写父类的方法
- 父类的引用指向子类的对象
封装继承多态之间的区别
封装:
所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
面向对象和面向过程区别
面向过程:
把需要解决的问题分解成一个一个步骤,每个步骤用函数实现,依次调用即可。
面向对象:
把需要解决的问题分解成一个一个步骤,对每个步骤进行相应的抽象,形成对象,通过不同对象之间的调用,组合解决问题。
面向对象的五大基本原则
https://blog.csdn.net/xiaowanzi_zj/article/details/
单一职责原则
接口隔离原则
依赖倒置原则
开放封闭原则
里氏替换原则
过滤器和拦截器区别
https://blog.csdn.net/xiaowanzi_zj/article/details/
Java8中foreach()不能break,怎么办
https://blog.csdn.net/xiaowanzi_zj/article/details/
throw和throws的区别
https://blog.csdn.net/xiaowanzi_zj/article/details/
拆箱和装箱
https://blog.csdn.net/xiaowanzi_zj/article/details/
==和equals的区别
抽象类能使用final修饰吗?
不能,定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,所以 final 不能修饰抽象类。
如何实现数组和 List 之间的转换
https://blog.csdn.net/xiaowanzi_zj/article/details/
想学java基础
String str="i"与 String str=new String("i")一样吗
不一样,因为内存的分配方式不一样。String str="i"的方式,java 虚拟机会将其分配到常量池中;而 String str=new String("i") 则会被分到堆内存中。
创建一个对象用什么关键字?对象实例与对象引用有何不同?
new关键字,new创建对象实例(对象实例在堆内存中),对象引用指向对象实 例(对象引用存放在栈内存中)。一个对象引用可以指向0个或1个对象(一根 绳子可以不系气球,也可以系一个气球);一个对象可以有n个引用指向它(可以 用n条绳子系住一个气球)
java 中 IO 流分为几种
按功能来分:输入流(input)、输出流(output)
按类型来分:字节流和字符流
字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数据。
五个类一个接口:File、OutPutStream、InputStream、Writer、Reader;接口是Serializable
数组
运算符
https://blog.csdn.net/xiaowanzi_zj/article/details/
运算符优先级
https://blog.csdn.net/xiaowanzi_zj/article/details/
类的加载顺序
https://blog.csdn.net/xiaowanzi_zj/article/details/
面向对象的思想
做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情
函数式编程思想
只要能获取到结果,谁去做的,怎么做的都不重要,重视的结果,不重视过程
如何判断链表出现死循环
https://blog.csdn.net/xiaowanzi_zj/article/details/
静态变量和实例变量的区别
静态变量存储在方法区,属于类所有。实例变量存储在堆当中,其引用存在当前线程栈。
代码中如何实现多态
接口实现、继承父类重写方法、同一类中进行方法重载
重写和重载的区别
重载: 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时,属于编译时多态。
重写: 发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;父类方法访问修饰符为private则子类就不能重写该方法。属于运行时多态。
重载
重写
验证访问修饰符
异常类型
final finally finalize区别
final可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、修 饰变量表示该变量是一个常量不能被重新赋值。
finally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法 finally代码块中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代 码。
finalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾 回收器来调用,当我们调用System.gc() 方法的时候,由垃圾回收器调用finalize(),回收垃圾,一 个对象是否可回收的最后判断。
接口和抽象类的区别
this与super的区别
super()和this()均需放在构造方法内第一行。
尽管可以用this调用一个构造器,但却不能调用两个。
this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造
函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意
义,编译器也不会通过。
从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。
static
1、修饰成员变量
2、修饰成员方法
3、静态代码块
4、修饰类【只能修饰内部类也就是静态内部类】
5、静态导包static注意事项(1、静态只能访问静态。 2、非静态既可以访问非静态的,也可以访问静态的.)
接口
抽象类
成员变量与局部变量区别
1.成员变量是属于类的,局部变量是属于方法的
2.从变量在内存中的存储方式来看,成员变量是对象的一部分,而对象存在于堆内存,局部变量存在于栈内存
3.从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动消失。
4.成员变量可以被public,private,static等修饰符所修饰,而局部变量不能被访问控制修饰符及static所修饰
5.成员变量和局部变量都能被final所修饰;
6.成员变量没有初始值可以自动赋初始值(被final修饰但没有被static修饰的成员变量必须显示地赋值),局部变量不会自动赋值
静态变量和实例变量区别
静态变量与普通变量区别
静态方法和实例方法有何不同?
静态方法和实例方法的区别主要体现在两个方面:
1. 在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使 用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调 用静态方法可以无需创建对象。
2. 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量 和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此 限制
对象的相等与指向他们的引用相等,两者有什么不同?
对象的相等比的是内存中存放的内容是否相等而引用相等比较的是他们指向的内存地址是否相等。
在Java中,如何跳出当前的多重嵌套循环
数据类型
基本数据类型(数值型(整数类型/浮点类型)/字符型/布尔型)/引用数据类型
引用数据类型:类、接口、数组
字符型常量和字符串常量的区别
1. 形式上: 字符常量是单引号引起的一个字符 字符串常量是双引号引起的若干个字符
2. 含义上: 字符常量相当于一个整形值(ASCII值),可以参加表达式运算 字符串常量代表一个地址值(该字符串在内存中存放位置)
3. 占内存大小 字符常量只占一个字节 字符串常量占若干个字节(至少一个字符结束标志)
什么是字符串常量池
Jdk1.6及之前: 有永久代, 运行时常量池在永久代,运行时常量池包含字符串常量池
Jdk1.7:有永久代,但已经逐步“去永久代”,字符串常量池从永久代里的运行时常量池分离到堆里
Jdk1.8及之后: 无永久代,运行时常量池在元空间,字符串常量池里依然在堆里
String真的是不可变的吗?
我觉得如果别人问这个问题的话,回答不可变就可以了。 下面只是给大家看两个有代表性的例子:
1) String不可变但不代表引用不可以变
结果:
2) 通过反射是可以修改所谓的“不可变”对象
结果:
数组有没有length()方法?String有没有length()方法
数组没有 length()方法 ,有 length 的属性。String 有 length()方法。 JavaScript中,获得字符串的长度是通过 length 属性得到的,这一点容易和 Java 混淆。
在使用HashMap的时候,用String做key有什么好处?
HashMap 内部实现是通过 key 的 hashcode 来确定 value 的存储位置,因为字符串是不可变的,所以当创建字符串时,它的 hashcode 被缓存下来,不需要再次计算,所以相比于其他对象更快。
Integer a= 127 与 Integer b = 127相等吗
a=a+b与a+=b有什么区别
+=操作符会进行隐式自动类型转换,此处a+=b隐式的将加操作的结果类型强制转换为持有结果的类型,而a=a+b则不会自动进行类型转换
3*0.1==0.3返回值是什么
false,因为有些浮点数不能完全精确的表示出来。
验证实验
&和&&的区别
&运算符有两种用法:(1)按位与;(2)逻辑与。&&运算符是短路与运算。逻辑或运算符(|)和短路或运算符(||)的差别也是如此。
Switch中兼容的数据类型
java支持的数据类型有5种,分别是byte,int,short,char,enum,JDK1.7中新增了String
Object类常用的方法
equals()/Hashcode()/toString()/wait()/notify()/clone()/getClass()/notifyAll()/finalize()
String类的常用方法
split()/subString()/equals()/hashCode()/indexOf()/lastIndexOf()/startsWith()/endsWith()/concat()/replace()/contains()/toLowerCase()/toUpperCase()/toString()/valueOf()/copyValueOf()/format()/trim()
获取反射的机制
1.通过Object类的getClass方法
2.通过对象实例方法获取对象
3.通过Class.forName方式
核心类:Class、Filed、Method、Constructor
创建对象的方式
1.使用new关键字
2.使用Class类的newInstance()方法
3.使用clone方法
4.使用Constructor类的newInstance()方法
5.使用序列化
6.FactoryBean的getObject()方法
String和StringBuffer和StringBuilder
Servlet的声明周期
init()/service/destory()
Java中XML解析方式
DOM/SAX/JDOM/DOM4J
九大内置对象
request/response/session/config/application/page/pagecontext/exception/out
异常
https://blog.csdn.net/xiaowanzi_zj/article/details/
基本类型和引用类型区别
基本数据类型:byte、short、int、long、float、double、char、boolean
引用类型:类(class)、接口(interface)、数组(array)
基本类型保存的值,引用类型保存了是对象的地址,所有基本类型赋值是按值传递(拷贝赋值)引用类型赋值是按引用传递。对比于C++就是&符号。
基本类型和包装类的区别
包装类是一个类可以调用类的方法
基本数据类型和对应封装类如果你只是想使用他们具体的赋值,他们之间本质上是没有区别的.如果你不单单想用一个赋值,是想用里面的方法解决许多繁琐的问题.那就使用封装类吧.因为封装类就是在基本类型不够用的的基础上一出来的.封装类提供了许多的方法供君选择.它可以简化程序员的敲代码的量
Integer取值范围
Integer类取值和int类型取值一致,取值范围是从-至(-231至 231-1),包括-和 。但是对于Integer类java为了提高效率,初始化了-128--127之间的整数对象,因此Integer类取值-128--127的时候效率最高。
注解
https://blog.csdn.net/xiaowanzi_zj/article/details/#
为什么JDK动态代理中要求目标类实现的接口数量不能超过65535个
https://blog.csdn.net/xiaowanzi_zj/article/details/
isAssignableFrom和instanceof的区别
https://blog.csdn.net/xiaowanzi_zj/article/details/
Java的内部类
https://blog.csdn.net/xiaowanzi_zj/article/details/
Integer和int的区别,Java为什么要设计封装类
Integer和int的区别有很多,我简单说3个方面
- Integer的初始值是null,int的初始值是0
- Integer存储在堆内存,int类型是直接存储在栈空间
- Integer是对象类型,它封装了很多的方法和属性,我们在使用的时候更加灵活。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/2228.html