java基础

1. java的特性

简单易学; 面向对象(封装,继承,多态); 平台无关性( Java 虚拟机实现平台无关性);可靠性;安全性; 支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持);支持网络编程并且很方便( Java 语言诞生本身就是为简化网络编程设
计的,因此 Java 语言不仅支持网络编程而且很方便);编译与解释并存;
.class->机器码,在这一步 jvm 类加载器首先加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度会相对
比较慢。而且,有些方法和代码块是经常需要被调用的,也就是所谓的热点代码,所以后面引进了 JIT 编译器,JIT 属于运行时编译。当 JIT 编译器完成第一次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用。而我们知道,机器码的运行效率肯定是高于 Java 解释器的。这也解释了我们为什么经常会说 Java 是编译与解释共存的语言。

2.什么是字节码,采用字节码的好处

jvm可以理解的代码就叫字节码,扩展名.class,不面向任何特定处理器,只面向虚拟机,解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点,无需重新编译便可在多种不同操作系统的计算机上运行

3.jvm、jdk、jre

jvm是运行java字节码的虚拟机,有针对不同系统的特定实现,,目的是使用相同的字节码,它们都会给出相同的结果,字节码和不同系统的jvm实现是java语言一次编译随处可以运行的关键所在;jre是java运行时环境,是运行已编译java程序所需的所有内容的集合,b包括java虚拟机,java类库,java命令和其他一些基础构件,不能用于创建新程序;拥有jre的一切,还有编译器(javac)和工具,能够创建和编译程序,用JSP部署web程序,应用程序服务器会将JSP转换为java servlet ,需要用JDK来编译servlet

JSP ,Java Server Page,直译就是“运行在服务器端的页面”,是一种动态网页开发技术。JSP 文件就是在传统的 HTML
文件中插入 Java 代码和 JSP
标签,后缀名为.jsp。我们可以直接在JSP文件里写HTML代码,使用上把它当做HTML文件。而且JSP中HTML/CSS/JS等的写法和HTML文件中的写法是一模一样的,JSP
使用 JSP 标签在 HTML 网页中插入 Java 代码,标签通常以<%开头,以%>结束。JSP 标签有多种功能,比如访问数据库和
JavaBean 组件等,还可以在不同的网页之间传递和共享信息。JSP 是 Servlet 的扩展,我们可以在 JSP 中使用
Servlet 的所有功能。另外,JSP 还提供了一些其他功能,例如 EL 表达式、自定义标签等。JSP 依赖于 Servlet,用户访问
JSP 页面时,JSP 代码会被翻译成 Servlet 代码,最终,以字符串的形式向外输出 HTML 代码。所以,JSP 只是在
Servlet 的基础上做了进一步封装。 Servlet看上去很神秘,其实本质很简单,就是一个Java接口interface而已。

下面是javax.servlet的具体实现,只有几句代码:


    public void init(ServletConfig config) throws ServletException;

    public ServletConfig getServletConfig();

    public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException;

    public String getServletInfo();

    public void destroy(); } ```

这个接口只有五个方法,而且看到这些方法的名字,大家也大概能猜出来这个方法是干什么的了。

初始化 获得配置 服务 获得信息 销毁 这其中的service(ServletRequest req,ServletResponse
res)方法,是Servlet的关键所在,是我们甚至可以说,其他方法”并不重要“,可以不进行实现。这个方法的作用,是把TomcatServlet容器)传入的请求进行处理,并让Tomcat知道向客户端发送怎样的回应。
Servlet 执行以下主要任务:

读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP
客户端程序的表单。 读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF
图像)、Excel 等。 发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置
cookies 和缓存参数,以及其他类似的任务。

![在这里插入图片描述](https://img-blog.csdnimg.cn/d282962fabaa44789a2d7da6cd8df87d.png)

4.成员变量和局部变量的区别

**语法形式:**成员变量属于类,可以被public,protected,private,static等修饰符修饰,都可以被final修饰
**存储方式:**成员变量使用static修饰,属于类,否则属于实例,存在于堆,局部变量存在于栈
**生存时间:**成员变量随对象的创建而存在,局部变量随方法的调用而自动生成,随方法调用结束而消亡
**默认值:**成员变量没有被赋初始值,自动以类型的默认值而赋值(被final修饰必须显示赋值),局部变量不会被赋值

字面值是指在程序中无需变量保存,可直接表示为一个具体的数字或字符串的值
全局变量存储在堆中,临时变量栈中,静态变量方法区中

5.为什么静态方法不能调用非静态成员

静态方法属于类,在类加载的时候就会分配内存,可以通过类名直接访问,非静态成员属于实例对象,只有在对象实例化之后才存在,需要通过类的实例对象访问,在类的非静态成员不存在的时候静态成员就已经存在了,此时调用内存中不存在的费静态成员,属于非法操作
静态方法和实例方法的不同:调用方式;静态方法只允许访问静态成员(静态成员变量和静态方法)

6.重载vs重写

重载发生在同一个类中,方法名必须相同,参数类型不同,个数不同,顺序不同,方法返回值和访问修饰符可以不同,就是同一个类中多个同名方法根据不同的传参来执行不同的逻辑处理
重写发生在运行期,是子类对父类的允许访问的方法的实现过程进行重新编写,方法名参数列表相同,子类方法返回值类型小于等于父类,子类方法声明抛出异常范围小于等于父类,子类方法访问权限大于等于父类

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值