Java基础部分
-
Java的基本数据类型有哪些?String是基本数据类型?
共八种:
byte
(8位),short(16位),int(32位) 默认值 0
long
(64位) 默认值 0L
float
(32位) 默认值 0.0f
double
(64位) 默认值 0.0d
boolean
(1位) 默认值 false
char
(16位) 单一的Unicode字符
String
不是基本类型,引用类型的对象。
-
一个“.java”源文件中是否可包含多个类?有什么限制?
一个java文件中可包含多个类,但只能有一个public类,且其类名与文件名相同。
-
&和&&的异同
同:&和&&和都可以作逻辑与运算符
异:
&&作逻辑与运算符时具有短路功能
&可用作位的与运算符
// 若str为null时,不会抛出异常,因短路,equals不执行
if(str != null && !str.equals(""))
// 若若str为null时,抛出NullPointerException异常,equals执行
if(str != null & !str.equals(""))
-
switch语句能否作用在byte上,能否用在long,String上?
switch(expr)
中变量类型可以是byte
,short
,int
,char
及对应的包装类
从JavaSE 5 后可以是枚举类型
从JavaSE 7后可以支持String
不可用作long
,double
,float
,boolean
及其包装类上
-
short s1 = 1;s1 = s1+1;有什么错?short s1 = 1;s1+=1;呢?
前者会报需要强制转换类型的错,因:
short s1 = 1;
// s1 + 1运算时结果会转化为int类型
// int无法自得转为short
s1 = s1 + 1;
后者编译通过,因:
在Java中编译器会对s1 += 1
作特殊处理
该(Tyep) a + = b
操作等于(Type) a = (Type)(a + b)
所以已经转型过了,无错误。
-
使用final关键字修饰一个变量时,时引用不能变,还是引用对象不能变?
final
修饰的变量,引用不能变,但引用的对象能变
https://www.cnblogs.com/guweiwei/p/6594552.html
补充: final关键字
-
“==”和equals方法的区别?
操作符专门用来比较两个变量的值是否相等, 也就是用于比较变量所对应的内存中所存
储的数值是否相同, 要比较两个基本类型的数据或两个引用变量是否相等, 只能用操作
符。
如果一个变量指向的数据是对象类型的, 那么, 这时候涉及了两块内存, 对象本身占用一块
内存(堆内存) , 变量也占用一块内存, 例如 Objet obj = new Object();变量 obj 是一个内存,
new Object()是另一个内存, 此时, 变量 obj 所对应的内存中存储的数值就是对象占用的那块
内存的首地址。 对于指向对象类型的变量, 如果要比较两个变量是否指向同一个对象, 即要
看这两个变量所对应的内存中的数值是否相等, 这时候就需要用操作符进行比较。
equals 方法是用于比较两个独立对象的内容是否相同, 就好比去比较两个人的长相是否相
同, 它比较的两个对象是独立的。 例如, 对于下面的代码:
String a=new String("foo");
String b=new String("foo");
两条 new 语句创建了两个对象, 然后用 a,b 这两个变量分别指向了其中一个对象, 这是两个
不同的对象, 它们的首地址是不同的, 即 a 和 b 中存储的数值是不相同的, 所以, 表达式
ab 将返回 false, 而这两个对象中的内容是相同的, 所以, 表达式 a.equals(b)将返回 true。
-
静态变量和实例变量的区别?
语法定义上的区别:静态变量要用static
修饰,实例变量不用;
程序运行时的区别:静态变量在加载字节码文件时就会分配到空间,而实例变量要创建对象后才分配空间。
使用时的区别:静态变量通过类名.变量
调用,实例变量对象.变量
调用。
-
是否可从一个static方法内发出对非static方法的调用?
不可以,要调用非static方法必须要有对象,但调用static方法时可能还没有产生对象。
-
Integer与int的区别?
Integer
时int
的封装类,Integer
的默认值为null,int
的默认值为0
Integer
可区分0和null的情况,int
则不行
Integer
中还提供了多个与整数相关的方法。
-
Overload和Override的区别,Overloaded的方法是否可以改变返回值的类型?
Overload是方法重载,指同一类中可以有多个相同名称的方法,但参数不同,返回值可相同也可不同。
Override是方法重写,指子类在继承父类时,重写父类中的同名同参的方法,相当于将其方法内容覆盖。但子类只能抛出比父类更少的异常,或者父类的子异常。
-
Servlet的生命周期?
Servlet 被服务器实例化后,容器运行其 init 方法, 请求到达时运行其 service 方法, service方法自动派遣运行与请求对应的 doXXX 方法(doGet, doPost) 等, 当服务器决定将实例销毁时候调用其 destroy方法。
-
面向对象编程的特性?
抽象,封装,继承,多态
-
接口和抽象类的区别?
1.接口中所有的方法都是抽象的,而抽象类里既可以有抽象方法,也可有非抽象方法;
2.类可以实现多个接口,但只能继承一个抽象类;
3.抽象类可以在不提供接口方法的情况下实现接口;
4.接口中声明的变是默认是final的,抽象类可包含非final的变量;
5.接口和抽象类都不可以被实例化,但抽象类中若有main
方法的话是可被调用的。
-
创建线程有几种不同的方式
1.继承Thread类;
2.实现Runnable接口;
3.可使用Executor框架来创建线程池
Spring相关
-
Spring的工作原理?
1.spring mvc的请求会提交到DispatcherServlet,它会委托应用系统的其它模块对请求进行真正的处理;
2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controler;
3.DispatcherServlet的请求到到达目标Controller;
4.Controller进行业务逻辑的处理后返回一个ModelAndView;
5.Dispatcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图;
6.视图对象负责渲并返回个客户端。 -
解释下DI和IOC
1.IOC即控制反转,也就是说对象的创建的控制不是角由对象内容部控制,而是交给容器去控制。比如对象的创建部是通过new
进行创建,而是通过交给IOC容器创建。
优点:有IOC容器后查找和创建依赖对象的控制权都了容器方,使对象间松散耦合,方便测试,利于功能复用。
3.DI即依赖注入,是容器动态的将某依赖关系注入到组件中。具体的说就是IOC容器将对象注入到程序中。
- 什么是AOP,AOP的作用是什么?
AOP是切面编程,能够在不影响原有功能的前提下,为软件拓展功能。
-
Spring框架有哪些不同的模块?
1.核心容器模块
2.应用上下文模块(ApplicationContext)
3.AOP模块
4.JDBC抽象和DAO模块
5.WEB模块
6.MVC模块 -
Spring里如何配置数据库驱动?
<bean id=”dataSource”>
<property name=”driverClassName”>
<value>org.hsqldb.jdbcDriver</value>
</property>
<property name=”url”>
<value>jdbc:hsqldb:db/appfuse</value>
</property>
<property name=”username”><value>sa</value></property>
<property name=”password”><value></value></property>
</bean>
- 解释下Bean的生命周期?
1.Spring对bean进行实例化,默认bean是单例;
2.Spring对bean进行依赖注入;
3.如果bean实现了BeanNameAware接口,spring将bean的id传给setBeanName()方法;
4.如果bean实现了BeanFactoryAware接口,spring将调用setBeanFactory方法,将BeanFactory实例传进来;
5.如果bean实现了ApplicationContextAware接口,它的setApplicationContext()方法将被调用,将应用上下文的引用传入到bean中;
6.如果bean实现了BeanPostProcessor接口,它的postProcessBeforeInitialization方法将被调用;
7.如果bean实现了InitializingBean接口,spring将调用它的afterPropertiesSet接口方法,类似的如果bean使用了init-method属性声明了初始化方法,该方法也会被调用;
8.如果bean实现了BeanPostProcessor接口,它的postProcessAfterInitialization接口方法将被调用;
9.此时bean已经准备就绪,可以被应用程序使用了,他们将一直驻留在应用上下文中,直到该应用上下文被销毁;
10.若bean实现了DisposableBean接口,spring将调用它的distroy()接口方法。同样的,如果bean使用了destroy-method属性声明了销毁方法,则该方法被调用;
- JavaBean和SpringBean的区别?
JavaBean是一种JAVA语言写的可重用组件。JavaBean符合一定规范写的Java类,是一种规范。它的方法命名,构造以及行为必须符合特定的要求:
1.所有属性为private
2.这个类必须具有一个公共的(public)无参构造函数
3.private属性必须提供public的getter和setter来给外部访问,并且方法的命名也必须遵循一定的命名规范
4.这个类是可序列化的,要实现serializable接口
SpringBean是受Spring管理的对象 所有能受Spring容器管理的对象都可以成为SpringBean.