2021年09月15日 java1
考点1:依赖注入
下面关于依赖注入(DI)的说法不正确的是()
- A 只有通过Spring才能实现依赖注入(DI)
- B 依赖注入的主要目的是解耦合
- C 常见的依赖注入方式有Setter和构造方法
显示答案/隐藏答案
正确答案: ASpring依赖注入(DI)的三种方式,分别为:
1.接口注入
2.Setter方法注入
3.构造方法注入
属性注入:
创建对象时候,向类里面属性里面设置值
注入的三种方式(java),在Spring框架中只支持前面两种方式
第一种:使用set方法注入
1 | public class User{ |
第二种:有参数构造注入
1 | public class User{ |
第三种:使用接口注入
1 | public interface Dao{ |
sping使用 有参数构造注入属性
1 | <bean id="demo" class="cn.itcast.property.propertyDemo1"> |
1 | public class TestIOC{ |
spring使用set方法注入属性(使用的更多)
1 | <!-- 代表对象已经创建 --> |
1 | public class Book{ |
这篇博文讲到依赖注入。除了spring,还有.net平台一些框架也用到了依赖注入。
http://www.cnblogs.com/yangecnu/p/Introduce-Dependency-Injection.html
考点2:for循环执行流程
下列循环语句序列执行完成后,i的值是()
1 | int i; |
- A 2
- B 10
- C 11
- D 不确定
显示答案/隐藏答案
正确答案: Cfor循环的执行顺序
1 | for(表达式1;表达式2;表达式3) |
- 表达式1执行一次,判断表达式2是否成立,如果成立执行循环体;
- 循环体结束,表达式3执行一次,判断表达式2是否成立,如果成立执行循环体;
- 依次进行2的操作。直到表达式2不成立,退出循环。
这个循环最后一次进入循环体时;i=10了,然后执行表达式3,i=11,最后执行表达式2,判断11大于10,退出循环。
考点3:Servlet
从以下哪一个选项中可以获得Servlet的初始化参数?
- A Servlet
- B ServletContext
- C ServletConfig
- D GenericServlet
显示答案/隐藏答案
正确答案: C通过ServletConfig
接口的getInitParameter(java.lang.String name)
方法。
1)ServletConfig:Servlet的配置对象,容器在初始化Servlet时通过它传递信息给Servlet。
2)ServletContext:上下文对象,提供了一系列方法供Servlet与Web容器交互。
- ServletConfig对象:servlet配置对象,主要把servlet的初始化参数封装到这个对象中。一个网站中可能会存在多个servletConfig对象,一个servletConfig对象就封装了一个servlet的配置信息。可以在web.xml中通过
<init-param></init-param>
标签配置初始化参数,通过getInitParameter(String name)或getInitParameterNames()方法来获取初始化参数。注:初始化参数必须在当前的servlet程序中使用。 - ServletContext对象:servlet上下文对象。一个网站只会创建一个servletContext对象,代表的是整个网站的环境信息。可以在web.xml中通过
<context-param></context-param>
标签配置全局参数,是通过servletConfig对象来获取servletContext对象的,调用的是getServletContext()方法。注:如果某个参数整个网站的程序都要使用,那么可将该参数设置为全局参数,因为可通过servletContext域对象去获取。在servle中有三个域对象,分别为:ServletContext、HttpServletRequest和HttpSession。
考点4:基本数据类型
在 Java 中,属于整数类型变量的是()
- A single
- B double
- C byte
- D char
显示答案/隐藏答案
正确答案: CJava八种基本数据类型
Java中的四类八种基本数据类型
第一类:整数类型 byte short int long
第二类:浮点型 float double
第三类:逻辑型 boolean(它只有两个值可取true false)
第四类:字符型 char
考点5:Byte表示范文 Byte越界 自动拆箱装箱 引用传参
如下代码,执行test()函数后,屏幕打印结果为()
1 | public class Test2 |
- A 127 127
- B 128 127
- C 129 128
- D 以上都不对
显示答案/隐藏答案
正确答案: DByte类型值大小为-128~127之间。并且Byte类型的值首尾相连,越界不会抛出异常
add(++a);这里++a会越界,a的值变为-128
add(b); 前面说了,add不起任何作用,b还是127
add()方法里面的修改值并不会起作用,而add(++a)会使a数值越界成-128,所以输出为-128 127
考点6:main方式是静态方法不能访问非静态成员变量
1 | public class Test |
对于上面这段代码,以下说法正确的是:
- A 程序会打出 “Value is 0”
- B 程序会抛出 NullPointerException
- C 非静态变量不能够被静态方法引用
- D 编译器会抛出 “possible reference before assignment”的错误
显示答案/隐藏答案
正确答案: C非静态成员只能被类的实例化对象引用,因此这里在静态方法中访问x会造成编译出错
当类加载时,static静态方法随着类加载而初始化,此时实例对象还未被创建,但是非静态成员变量需要等到实例对象创建才会被初始化,故无法被引用。
考点7:Java表示符规则
下列不正确的 Java 语言标识符是( )
- A
Sky
- B
$Computer
- C
for
- D
NULL
显示答案/隐藏答案
正确答案: CJava标识符命名规范是:
1)只能包含字母a-zA-Z,数字0-9,下划线_和美元符号$;
2)首字母不能为数字;
3)关键字和保留字不能作为标识符。
中文可以作为变量名
中文可以作为变量名,中文的货币符号也是中文字符,也是可以作为变量名的。
1 | package base; |
运行结果:
1 | 123 |
考点8:基础知识
以下说法中正确的有?
- A StringBuilder是 线程不安全的
- B Java类可以同时用 abstract和final声明
- C HashMap中,使用 get(key)==null可以 判断这个Hasmap是否包含这个key
- D volatile关键字不保证对变量操作的原子性
显示答案/隐藏答案
正确答案: AD考点9:并发
JDK提供的用于并发编程的同步器有哪些?
- A Semaphore
- B CyclicBarrier
- C CountDownLatch
- D Counter
显示答案/隐藏答案
正确答案: ABC答案:ABC
A,Java 并发库 的Semaphore 可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,通过
acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。
B,CyclicBarrier 主要的方法就是一个:await()。await()
方法没被调用一次,计数便会减少1,并阻塞住当前线程。当计数减至0时,阻塞解除,所有在此 CyclicBarrier 上面阻塞的线程开始运行。
C,直译过来就是倒计数(CountDown)门闩(Latch)。倒计数不用说,门闩的意思顾名思义就是阻止前进。在这里就是指
CountDownLatch.await() 方法在倒计数为0之前会阻塞当前线程。
D,Counter不是并发编程的同步器