### Java程序员宝典知识点解析 #### 一、Java声明与初始化 **问题一:我声明了什么!** 在Java中,声明是指定义变量的过程。声明包括以下几点: 1. **类型**:指明变量的数据类型,例如int、String等。 2. **变量名**:变量的标识符。 3. **初始化**:可选地为变量赋予初始值。 例如: ```java int age; // 声明了一个整型变量age String name = "张三"; // 声明并初始化了一个字符串变量name ``` #### 二、“==”与equals方法的区别 **问题二:“==”和equals方法究竟有什么区别?** 1. **“==”操作符**: - 用于比较两个基本类型的值是否相等。 - 对于引用类型,“==”比较的是两个引用是否指向同一个对象。 2. **equals方法**: - 默认情况下,`Object`类中的`equals`方法等同于“==”。 - 在许多类中,尤其是`String`类中,`equals`方法被重写用来比较对象的内容是否相等。 示例: ```java String s1 = new String("hello"); String s2 = new String("hello"); System.out.println(s1 == s2); // 输出 false System.out.println(s1.equals(s2)); // 输出 true ``` #### 三、String对象的不可变性 **问题三:String到底变了没有?** 1. **String的不可变性**: - `String`类的对象一旦创建后其内容不能改变。 - 这意味着如果尝试修改String对象的内容,实际上是在创建一个新的String对象。 示例: ```java String str = "hello"; str += " world"; // 实际上创建了一个新的String对象"hello world" System.out.println(str); // 输出 "hello world" ``` #### 四、final关键字的作用 **问题四:final关键字到底修饰了什么?** 1. **修饰变量**: - 当final修饰一个变量时,该变量的引用不能再指向其他对象。 - 如果变量是基本类型,则其值不能改变;如果是引用类型,则引用指向的对象的内容可以改变。 2. **修饰方法**: - 当final修饰一个方法时,该方法不能被子类覆盖。 3. **修饰类**: - 当final修饰一个类时,该类不能被继承。 示例: ```java final int x = 10; // x的值不能改变 final String s = "hello"; // s不能指向其他对象,但s指向的对象可以改变 final class MyClass {} // MyClass不能被继承 class MyFinalMethodClass { final void myMethod() {} // myMethod不能被子类覆盖 } ``` #### 五、多线程与同步的实现方法 **知识点:多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?** 1. **多线程的实现方法**: - **继承Thread类**:创建一个Thread类的子类并重写run方法。 - **实现Runnable接口**:实现Runnable接口的run方法,并将其作为参数传递给Thread构造函数。 2. **同步的实现方法**: - **synchronized关键字**:用于方法或代码块,确保同一时刻只有一个线程可以访问。 - **wait()、notify()和notifyAll()**:用于线程之间的等待/唤醒机制。 示例: ```java // 继承Thread类 class MyThread extends Thread { public void run() { System.out.println("Running in " + Thread.currentThread().getName()); } } // 实现Runnable接口 class MyRunnable implements Runnable { public void run() { System.out.println("Running in " + Thread.currentThread().getName()); } } // 同步方法 public synchronized void method() {} // 同步代码块 public void syncBlock() { synchronized (this) { // 代码块 } } ``` #### 六、JSP的内置对象及方法 **知识点:JSP的内置对象及方法。** 1. **request**:`HttpServletRequest`对象,包含有关浏览器请求的信息,并提供获取cookie、header和session数据的方法。 2. **response**:`HttpServletResponse`对象,提供设置返回到浏览器的响应的方法,如cookies、头信息等。 3. **out**:`JspWriter`对象,提供向浏览器发送输出的方法。 4. **pageContext**:`PageContext`对象,用于方便地访问各种范围的名字空间、servlet相关的对象及其方法。 5. **session**:`HttpSession`对象,用于存储用户的会话状态信息。 6. **application**:`ServletContext`对象,提供关于servlet引擎和servlet环境的信息。 7. **config**:`ServletConfig`对象,用于访问servlet实例的初始化参数。 8. **page**:表示从该页面产生的servlet实例。 示例: ```java // 使用request对象 String username = request.getParameter("username"); // 使用response对象 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html><body>Hello, World!</body></html>"); // 使用session对象 HttpSession session = request.getSession(); session.setAttribute("username", username); // 使用pageContext对象 PageContext pageContext = this.pageContext; String path = pageContext.getRealPath("/"); ``` #### 七、JSP指令 **知识点:JSP的常用指令。** 1. `<%@ page %>` 指令: - `language`:设置脚本语言,默认为Java。 - `contentType`:设置内容类型,如"text/html;charset=UTF-8"。 - `session`:是否启用会话,默认为true。 - `buffer`:设置缓冲区大小。 - `autoFlush`:当缓冲区满时是否自动刷新。 - `isThreadSafe`:是否支持多线程,默认为true。 - `info`:设置JSP页面的信息。 - `errorPage`:设置错误页。 - `isErrorPage`:是否为错误页。 - `isELIgnored`:是否忽略表达式语言。 - `pageEncoding`:设置页面编码。 - `import`:导入包或类。 2. `<%@ include %>` 指令:包含其他JSP页面或资源。 3. `<%@ taglib %>` 指令:引入标签库。 示例: ```jsp <%@ page language="java" contentType="text/html;charset=UTF-8" session="true" buffer="64kb" autoFlush="true" isThreadSafe="true" info="This is a demo JSP page" errorPage="error.jsp" isErrorPage="true" isELIgnored="false" pageEncoding="UTF-8" import="java.util.*, java.text.*" %> <%@ include file="header.jsp" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> ``` #### 八、doGet()和doPost()的调用时机 **知识点:什么情况下调用doGet()和doPost()?** 1. `doGet()`:当JSP页面中的`form`标签的`method`属性为`GET`时调用。 2. `doPost()`:当JSP页面中的`form`标签的`method`属性为`POST`时调用。 示例: ```java protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 处理GET请求 } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 处理POST请求 } ``` #### 九、Servlet的生命周期 **知识点:servlet的生命周期。** 1. **加载与初始化**:Web容器加载servlet,并通过调用`servlet.init()`方法进行初始化。 2. **服务请求**:通过调用`servlet.service()`方法处理请求,根据请求的不同调用不同的`do***()`方法。 3. **销毁**:当servlet不再需要时,Web容器调用`servlet.destroy()`方法来释放资源。 示例: ```java public class MyServlet extends HttpServlet { public void init(ServletConfig config) throws ServletException { super.init(config); // 初始化逻辑 } protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { if ("GET".equals(req.getMethod())) { doGet(req, res); } else if ("POST".equals(req.getMethod())) { doPost(req, res); } } public void destroy() { // 清理资源 } } ``` #### 十、Servlet的单线程模式 **知识点:如何实现servlet的单线程模式。** 通过设置`<%@page isThreadSafe="false"%>`,可以使servlet以单线程模式运行。 示例: ```jsp <%@page isThreadSafe="false"%> ``` #### 十一、页面间对象传递的方法 **知识点:页面间对象传递的方法。** 1. **request**:通过`request.setAttribute()`将对象保存到请求范围内。 2. **session**:通过`session.setAttribute()`将对象保存到会话范围内。 3. **application**:通过`application.setAttribute()`将对象保存到应用范围内。 4. **cookie**:通过设置cookie的方式传递信息。 示例: ```java // 使用request对象传递数据 request.setAttribute("message", "Hello, World!"); RequestDispatcher dispatcher = request.getRequestDispatcher("next.jsp"); dispatcher.forward(request, response); // 使用session对象传递数据 HttpSession session = request.getSession(); session.setAttribute("user", user); ``` #### 十二、会话跟踪技术 **知识点:四种会话跟踪技术。** 1. **cookie**:利用客户端cookie进行会话跟踪。 2. **URL重写**:通过在URL中添加会话ID来跟踪会话。 3. **session**:服务器端会话跟踪。 4. **隐藏域**:在表单中嵌入隐藏字段来跟踪会话。 #### 十三、JSP的四种范围 **知识点:jsp的四种范围。** 1. **page**:与一个页面相关的对象和属性。 2. **request**:与一个请求相关的对象和属性。 3. **session**:与一个用户体验相关的对象和属性。 4. **application**:与整个Web应用程序相关的对象和属性。 示例: ```java // page范围 pageContext.setAttribute("message", "Welcome!"); // request范围 request.setAttribute("username", "JohnDoe"); // session范围 HttpSession session = request.getSession(); session.setAttribute("loggedIn", true); // application范围 ServletContext application = getServletContext(); application.setAttribute("count", 1); ``` #### 十四、Request对象的主要方法 **知识点:Request对象的主要方法。** 1. `setAttribute(String name, Object value)`:设置名字为`name`的`request`的参数值。 2. `getAttribute(String name)`:返回由`name`指定的属性值。 3. `getAttributeNames()`:返回`request`对象所有属性的名字集合,结果是一个枚举的实例。 4. `getCookies()`:返回客户端的所有`Cookie`对象,结果是一个`Cookie`数组。 5. `getCharacterEncoding()`:返回请求中的字符编码方式。 6. 更多其他方法。 示例: ```java // 设置属性 request.setAttribute("message", "Welcome!"); // 获取属性 String message = (String) request.getAttribute("message"); // 获取所有属性名称 Enumeration<String> names = request.getAttributeNames(); while (names.hasMoreElements()) { String name = names.nextElement(); System.out.println("Name: " + name); } // 获取所有cookie Cookie[] cookies = request.getCookies(); for (Cookie cookie : cookies) { System.out.println("Cookie: " + cookie.getName() + "=" + cookie.getValue()); } // 获取字符编码 String encoding = request.getCharacterEncoding(); ``` 以上就是从给定文件的标题、描述、标签和部分内容中提取的关键知识点,涵盖了Java基础、多线程与同步、JSP内置对象、指令以及请求对象等方面的内容。
剩余61页未读,继续阅读
- 粉丝: 0
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助