java基础笔试面试

String s = new String(“abc”); 这句代码创建了几个对象?
程序执行时遇到"abc"时会创建一个String对象并放入常量池,同时new String()又会创建一个,总共两个

说说java序列化
(1)Java序列化是把Java在内存中的对象按照一定的格式以字节流的方式传输到别的地方,如存储到硬盘的文件里,或者通过网络传输到另一台电脑。
(2)Java反序列化和序列化的过程相反。
(3)只有那些实现了Serializable接口的类才可以进行序列化操作,此接口只是一个标记接口,不提供任何方法。
(4)为了解决类修改后反序列化时可能会产生的数据错乱等问题,应该给实现Serializable接口的类声明一个序列号,以标记不同的类版本,如:private static final long serialVersionUID = 1L;,当修改后手动改成2L。

说说java的IO
IO是指数据的输入(Input),输出(Output)操作, 输入指数据从别的地方传输到计算机,输出指数据从计算机传输到别的地方。
字节流:数据以字节数据的方式传输,传输过程不做中间处理。
字符流:字符数据在传输开始时会转换为字节进行传输,传输结束时会从字节转换回字符。
常见的IO类有InputStream、FileInputStream、OutputStream、FileOutputStream、Reader、FileReader、Writer、FileWriter、BufferReader、BufferWriter

一旦执行System.exit(0) 之后JVM会立即停止,这样finally就不执行了

说说servlet工作的原理
(1)服务器启动时解析web.xml,把servlet的虚拟路径管理起来
(2)服务器收到浏览器的请求后,就把请求解析为request对象,同时创建一个response对象
(3)服务器根据请求路径找到匹配的servlet,调用servlet对应的doGet或者doPost方法,同时把request和response传递给该方法
(4)servlet就开始对请求进行处理,处理完成后生成响应发送到浏览器

request.getAttribute()和request.getParameter()有何区别?
request.getAttribute()是获得程序员主动存放在request中的值,此时的request是作为web域对象来用的
request.getParameter()是获得http请求参数的值

jsp有哪些内置对象?作用分别是什么?分别有什么主要方法?
(1)pageContext 页面上下文对象,可以通过该对象获取其他内置对象
(2)request 请求对象,包含所有客户端请求信息
(3)session session对象
(4)application ServletContext对象(前四个是非常重要的web域对象,用来作为数据仓库存储不同生命周期的数据使用)
(5)response 响应对象
(6)out 输出流对象,用来把响应输出到客户端
(7)config ServletConfig对象
(8)page JSP页面本身,即this
(9)exception 异常对象,如果此JSP页面被设置为错误页面,则此对象可用,表示发生的异常

JSP的常用指令元素有哪些?
<%@ 指令名称 属性名称=“值” 属性名称=“值” … %>
page 指令整个jsp页面配置
include 指令 包含目标资源
taglib 指令 标签库使用指令

JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
JSP本质是就是Servlet(JSP会被编译成Servlet)
在MVC的开发模式中:Servlet负责处理业务逻辑,生成处理结果,JSP负责生成页面,把处理结果显示给用户

描述一下MVC模式,MVC的各个部分都有些技术来实现?如何实现?
MVC是Model–View-Controller简写
Model指数据模型,用来携带数据以及操作数据库,但在javaweb中已经弱化了Model
View表示视图,用来把数据展示给用户,在javaweb中使用JSP作为View
Controller表示控制器,控制业务逻辑,在javaweb中使用Servlet作为Controller

说出数据连接池的工作机制是什么?
(1)程序启动时连接池就创建好若干数据库连接并保存起来
(2)当用户需要连接时,直接从连接池中获取连接
(3)当用户本次使用连接完毕后,就把连接归还给连接池
(4)假设在没有空闲连接时用户A来获取连接,如果当前连接数小于最大连接数,则连接池创建新的连接并交给A;如果当前连接数达到最大连接数,则连接池不再创建新的连接,而是等待其他用户归还连接,再把归还的连接交给A

购物车和订单的具体实现?
1:Cookie: 优点: 保存用户浏览器(不用浪费我们公司的服务器) 缺点:Cookie禁用,不提供保存
2:Session:(Redis : 浪费大量服务器内存:实现、禁用Cookie) 速度很快
3:数据库(Mysql、Redis、SOlr) 能持久化的就数据库 速度太慢

成员变量和局部变量的区别
(1)作用域
成员变量:针对整个类有效。
局部变量:只在某个范围内有效。(一般指的就是方法,语句体内)
(2)存储位置
成员变量:随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中。
局部变量:在方法被调用,或者语句被执行的时候存在,存储在栈内存中。
当方法调用完,或者语句结束后,就自动释放。
(3)初始值
成员变量:有默认初始值。
局部变量:没有默认初始值,使用前必须赋值。

匿名对象
(1)匿名对象就是没有名字的对象。是对象的一种简写形式。
(2)应用场景
A:只调用一次类中的方法。
B:可以作为实际参数在方法传递中使用

this关键字
(1)this关键字代表本类对象的一个引用,谁调用this所在的方法,this就代表谁
(2)this的使用场景
A:用于区分同名成员变量和局部变量;
B:在定义函数时,该函数内部要用到调用该函数的对象时,因为此时对象还没建立,故this代表此对象
B:构造函数间调用
**这个时候,this(参数)必须作为第一条语句存在。

Person p = new Person();在内存中做了哪些事情
(1)将Person.class文件加载进内存中。
(2)如果p定义在主方法中,那么,就会在栈空间开辟一个变量空间p。
(3)在堆内存给对象分配空间。
(4)对对象中的成员进行默认初始化。
(5)对对象中的成员进行显示初始化。
(6)调用构造代码块对对象进行初始化。(如果没有就不执行)
(7)调用构造方法对对象进行初始化。对象初始化完毕。
(8)将对象的内存地址赋值给p变量,让p变量指向该对象。

static关键字
(1)静态的意思,用来修饰成员变量和成员函数
(2)静态的特点:
随着类的加载而加载
优先于对象存在
对所有对象共享
可以被类名直接调用
(3)静态的注意事项
A:静态方法只能访问静态成员
为什么:因为静态的内容是随着类的加载而加载,它是先进内存的。
B:静态方法中不能使用this,super关键字
C:主方法是静态的
public static void main(String[] args)
public:公共的意思,是最大权限修饰符。
static:由于jvm调用main方法的时候,没有创建对象。
只能通过类名调用。所以,main必须用static修饰。
void:由于main方法是被jvm调用,不需要返回值。用void修饰。
main:main是主要的意思,所以jvm采用了这个名字。是程序的入口。

                    String[]:字符串数组
                    args:数组名

                    在运行的时候,通过java命令给args数组赋值。
                    格式:java MainTest hello world itcast
    (4)静态变量和成员变量的区别
            A:调用方式
                    静态变量也称为类变量,可以直接通过类名调用。也可以通过对象名调用。
                    这个变量属于类。
                    成员变量也称为实例变量,只能通过对象名调用。这个变量属于对象。
            B:存储位置
                    静态变量存储在方法区长中的静态区。
                    成员变量存储在堆内存。
            C:生命周期
                    静态变量随着类的加载而存在,随着类的消失而消失。生命周期长。
                    成员变量随着对象的创建而存在,随着对象的消失而消失。
            D:与对象的相关性
                    静态变量是所有对象共享的数据。
                    成员变量是每个对象所特有的数据。
    (5)静态的优点和弊端
            优点:
            对对象的共享数据进行单独空间的存储,节省内存,没有必要每个对象都存储一份
            可直接被类名调用
            弊端:
            生命周期过长,随着类的消失而消失
            访问出现权限,即静态虽好但只能访问静态
    (6)什么使用使用静态呢?
            A:当所有对象共享某个数据的时候,就把这个成员变量定义为静态修饰的。
            B:当某个方法没有访问该类中的非静态成员,就可以把这个方法定义为静态修饰。

            静态的生命周期比较长,所以一般不推荐使用。
    (7)静态代码块
            A:它只执行一次,它比main还先执行。
            B:执行顺序
                    静态代码块--构造代码块--构造方法

制作API
API(全拼):Application Program Interface 应用程序编程接口。
(1)类中的内容需要用文档注释。
(2)使用JDK\bin目录下的javadoc工具。
格式:javadoc -d 目录 -author -version ArrayTool.java

继承
(1)把很多类的相同特征和行为进行抽取,用一个类来描述。让多个类和这个类产生一个关系。
这样的话,多个类就可以省略很多代码。这个关系就是继承。java中用extends关键字表示。
(2)继承的体系结构
A:多个具体的对象,不断的向上抽取共享的内容,最终形成了一个体系。这个体系叫做继承体系。
B:继承体系的学习和使用原则
**学习顶层的内容。因为他是整个体系的共性内容。
**创建子类使用。也就是使用底层的具体对象。
(3)继承的特点:
A:java中只能单继承,没有多继承。
B:java可以有多重(层)继承。
(4)继承的好处:
继承的出现提高了代码的复用性。
继承的出现让类与类之间产生了关系,提供了多态的前提。
(5)子父类中的成员关系
A:成员变量
在子类方法中使用一个变量时:
首先,在方法的局部变量中找这个变量,有则使用。
否则,在本类中找成员变量,有则使用。
否则,在父类中找成员变量,有则使用。
否则,报错。
B:成员方法
用子类对象使用一个方法时。
首先,在子类中找这个方法,有则使用。
否则,在父类中找这个方法,有则使用。
否则,报错。

            重写和重载的区别?
                    重载:在同一类中。方法名相同,参数列表不同。重载可以改变返回类型。
                    重写:在不同类中(子父类中)。
                          方法声明相同(返回类型,方法名,参数列表均相同)。
            重写需要注意:
                    **子类方法的访问权限要大于等于父类方法的访问权限。
                    **静态只能重写静态。但是这种情况一般不会出现。

            构造方法
                    **子类的实例化过程
                            ***子类创建对象时,会先去创建父类的对象。
                                默认是去调用父类的无参构造方法。
                            ***子类构造方法中,第一行默认是super()
                            ***为什么子类中第一行会默认有super()
                                    因为他继承父类的成员使用,使用前这些成员必须初始化,
                                    而他们是父类的成员,所以,必须通过父类进行初始化。
                                    所以,会先创建一个父类的对象。
                    **当父类没有无参构造方法时
                            必须使用this或者super调用其他的构造方法。
    (6)this和super的区别
            this:代表本类对象的引用。
            super:代表父类的存储空间。

final关键字
(1)最终的意思,可以用于修饰类,方法,变量。
(2)final修饰的类不能被继承。
final修饰的方法不能被重写。
final修饰的变量是一个常量。只能被赋值一次。
内部类只能访问被final修饰的局部变量。
抽象类
(1)多个类有相同的方法声明,但是方法体不一样。这个时候,我们考虑把方法声明进行抽取。
让子类继承后,自己去实现方法体。没有方法体的方法,我们需要用抽象标志下。
抽象的关键字是:abstract。
(2)抽象类:
该方法称为抽象方法,包含抽象方法的类就是抽象类。
(3)抽象类的特点:
A:抽象类和抽象方法都要用abstract进行修饰
B:抽象类不能被实例化
C:抽象类中不一定有抽象方法,但是,有抽象方法的类一定是抽象类。
(4)抽象类中数据的特点
A:成员变量
抽象类中可以有变量,也可以有常量。
B:成员方法
抽象类中可以有抽象方法,也可以有非抽象方法。
C:构造方法
抽象类是一个类,所以,它有构造方法。
虽然本身不能实例化。但是可以给子类实例化使用。
(5)抽象类中的问题
A:抽象类中是否有构造方法?能不能被实例化?如果不能,为什么有构造方法?
抽象类有构造方法。
抽象类不能被实例化。
抽象类中的构造方法供子类实例化调用。
B:抽象关键字abstract不可以和哪些关键字共存?
**private:
私有内容子类继承不到,所以,不能重写。
但是abstract修饰的方法,要求被重写。两者冲突。
**final
final修饰的方法不能被重写。
而abstract修饰的方法,要求被重写。两者冲突。
**static
假如一个抽象方法能通过static修饰,那么这个方法,就可以直接通过类名调用。
而抽象方法是没有方法体的,这样的调用无意义。所以,不能用static修饰。
C:抽象类中可不可以没有抽象方法?如果可以,这样的类有什么用吗?
抽象类可以没有抽象方法。
抽象类中没有抽象方法的作用,只是为了不让别的类建立该抽象类对象。这个在awt中有体现。

接口interface
(1)当一个类中的方法都是抽象的时候,java提供了另一种表示方式,叫接口。
用interface关键字表示。类与接口关系用implements表示。
(2)接口的成员特点
A:成员变量
是常量,默认修饰 public static final
B:成员方法
都是抽象的,默认修饰 public abstract
(3)关系
A:类与类的关系
是继承关系。类与类只能单继承,可以多重继承。
B:类和接口的关系
是实现关系。类可以多实现接口。
类在继承一个类的同时,可以实现多个接口。
C:接口和接口的关系
是继承关系。接口可以多继承接口。
(4)接口的特点
A:是对外暴露的规则
B:是功能的扩展
C:接口的出现降低耦合性。
耦合(类与类之间的关系)
内聚(类完成功能的能力)
编程规范:低耦合,高内聚。
D:接口可以多实现。如:CPU和主板、笔记本的USB插口、插座
(5)接口和抽象类的区别
A:抽象类只能被单继承
接口可以多实现,接口的出现避免了多继承的局限性。
B:抽象类中的数据特点:
成员变量:可以是变量,也可以是常量
成员方法:可以是抽象方法,也可以是非抽象方法
构造方法:有构造方法
接口中的数据特点:
成员变量:是常量。默认修饰 public static final
成员方法:都是抽象方法。都有默认修饰 public abstract
构造方法:没有构造方法
C:抽象类中定义的是继承体系中的共性功能。
接口中定义的是继承体系中的扩展功能。
D:抽象类被继承是"is a"关系:xx是yy的一种
接口被实现是"like a"关系:xx像yy的一种

多态
(1)同一个对象,在程序不同时刻的多种运行状态。举例:动物,狗是狗,狗是动物。水(气态,液态,固态)
(2)多态前提
A:存在着继承或者实现关系
B:有方法的重写
C:父类(接口)引用指向子类(实现)对象
(3)多态的好处和弊端:
好处:多态的存在提高了程序的扩展性和后期可维护性
弊端:虽然可以预先使用,但是只能访问父类中已有的功能,运行的是后期子类的功能内容。
不能预先使用子类中定义的特有功能。
(4)多态中对象调用成员的特点
Fu f = new Zi();
A:成员变量
编译看左边,运行看左边
B:成员方法
编译看左边,运行看右边
C:静态方法
编译看左边,运行看左边
(5)多态的思想
指挥同一批对象做事情。举例:带兵打仗,下课等。
instanceof关键字
A:用于判断某个对象是否是某种类型。
B:格式
对象名 instanceof 子类(实现)名

Object类
(1)是所有类的根类,超类。
java中提供的类以及我们自定义的类都直接或者间接的继承自Object类。
(2)Object类中的方法
A:void finalize()
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
B:Class getClass()
获取对象的字节码文件的描述类,后面再讲反射的时候还会在说这个类。
String name = s.getClass().getName();
C:int hashCode()
获取对象的哈希值。其实就是对象的内存地址值十进制表示
D:String toString()
返回对象的字符串表示。
表示格式:
getClass().getName()+"@"+Integer.toHexString(hashCode());

              一般我们输出对象名的时候,其实底层调用的就是该对象的toString()方法。
              这种返回没有意义,所以,我们会重写这个方法,显示类的成员变量信息。
            E:boolean equals(Object obj)
              用于比较两个对象的地址值是否相同。
              我们获取对象后,比较它的地址值意义不大。所以也会对这个方法进行重写。
              重写要完成什么功能,是根据需求定的。
    (3)==和equals的用法:
            A:==怎么用?
                    **可以用于比较基本数据类型,比较的就是基本数据类型的值是否相等。
                  **可以用于比较引用数据类型,比较的是对象的地址值是否相等。
            B:equals怎么用?
                    equals只能用于比较引用数据类型的。
                    **Object提供的equals是用于比较对象地址值是否相同。
                    **自定义类中,如果重写了equals方法,那么就是按照你自己的需求来比较的。

package关键字
(1)包:其实就是文件夹。用于区分不同包下相同的类名。
(2)好处:
A:对类文件进行分类管理。
B:给类提供了多层命名空间
aaa.Demo
bbb.Demo
C:写在程序文件的第一行。
D:包也是一种封装形式。

不同修饰符可以修饰哪些内容
  本类中 同一个包中 不同包中的子类中 不同包中
private OK      
默认 OK OK    
protected OK OK OK  
public OK OK OK OK

类 构造方法 成员变量 成员方法
private   OK OK OK
默认 OK OK OK OK
protected   OK OK OK
public          OK OK OK OK
static     OK OK
final OK   OK OK
abstract OK     OK

一般格式:
成员变量:
权限修饰符+static/final+数据类型+成员变量名
public static final int NUM = 10;

    成员方法:
    权限修饰符+static/final/abstract+返回类型+方法名

内部类
(1)把一个类定义在某个类中的,这个类就被称为内部类,内置类,嵌套类。
(2)访问特点:
A:内部类可以直接访问外部类中的成员,因为内部类持有外部类的引用,
格式为:外部类名.this
B:外部类要想访问内部类的成员,必须创建对象访问。
(3)内部类的访问格式:
A:当内部类定义在外部类的成员位置,而且非私有,则可以在其他外部类中直接建立内部类对象
格式:外部类名.内部类名 变量名 = new 外部类对象.内部类对象
如:Outer.Inner in = new Outer().new Inner()
B:当内部类在外部类成员位置,且被static修饰时
**外部其他类可直接访问静态内部类的非静态成员
格式:new 外部类名.内部类名().内部类成员
如:new Outer.Inner().function();
**外部其他类可直接访问静态内部类的静态成员
格式:new 外部类名.内部类名.内部类成员
如:new Outer.Inner.function();
(4)什么使用时候内部类呢?
假如有A类和B类,A类想直接访问B类的成员,B类访问A类成员的时候,
需要创建A类对象进行访问,这个时候,就可以把A类定义为B类的内部类。
(5)内部类的位置
A:成员位置
**可以被private修饰(Body,Heart)
**可以被static修饰。(它访问的外部类的成员必须是静态的)
B:局部位置
**可以直接访问外部类中的成员,因为还持有外部类的持用
也可以直接访问局部成员,但是局部成员要用final修饰。
注意:局部内部类不能用private和static修饰
(6)通过class文件我们就可以区分是否带有内部类,以及内部类的位置
Outer$Inner:成员内部类
Outer$1Inner:局部内部类

匿名内部类(局部内部类的简写)
(1)前提:继承一个类或者实现一个接口
(注意不要弄混匿名内部类的前提和多态的前提)
(2)格式:
new 父类名或者接口名()
{
重写父类方法或者实现接口中的方法。
也可以自定义其他方法。
};
(3)什么时候定义匿名内部类?

                    匿名内部类只是为了简化书写,匿名内部类有局限,通常定义匿名内部类时,该类方法不超过3个
            (4)匿名内部类的好处和弊端:
                    好处:简化代码书写
                    弊端:
                            不能直接调用自己的特有方法
                            不能执行强转换动作
                            如果该类里面方法较多,不允许使用匿名内部类
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值