
Java
文章平均质量分 70
liulizhi1996
这个作者很懒,什么都没留下…
展开
-
牛客网语法篇之Java入门
JAVA1类型转换 描述 设计一个方法,将一个小于2147483647的double类型变量以截断取整方式转化为int类型 输入描述:随机double类型变量 输出描述:转化后的int类型变量原创 2022-11-21 19:41:32 · 665 阅读 · 0 评论 -
Java Web开发——Session的使用
在Web开发中,Session被翻译为“会话”。当用户第一次访问Servlet时,服务器端会给用户创建一个独立的Session,并且生成一个SessionID。这个SessionID在响应浏览器的时候会被装进cookie中,从而被保存到浏览器中。当用户再一次访问Servlet时,请求中会携带着cookie中的SessionID去访问。服务器会根据这个SessionID去查看是否有对应的Session对象,有就拿出来使用,没有就创建一个Session(相当于用户第一次访问)。例如,现在我们创建一个Serv原创 2021-08-13 21:42:39 · 747 阅读 · 0 评论 -
Java Web开发——Cookie的使用
HTTP Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。本质上,一个Cookie就是一个key-value对,键称为name,值称为value。注意,一个Cookie只能有一对key-value对,这和HashMap并不一样。以下是一段程序展示Cookie的使用方法。现在我们设计一个Cookie,其name为lastLoginTime,其value为用户访问网站的时间原创 2021-08-12 22:11:28 · 994 阅读 · 0 评论 -
Java Web开发——初探利用HttpRequestServlet获取请求参数和进行请求转发
本文探索利用HttpRequestServlet从浏览器获取用户输入的参数,并进行请求转发的过程。例如,我们在首页要求用户输入用户名、密码和其兴趣爱好,然后点击提交到 /login,后台程序将请求转发到 /success。首页index.jsp如下:<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %><html><body><h1>登录</h1&原创 2021-08-12 20:27:42 · 773 阅读 · 0 评论 -
Java Web开发——初探利用HttpServletResponse进行重定向
在本文的开始,首先需要明确一下请求转发和重定向之间的异同点:相同点:两者都会出现页面的跳转 不同点:请求转发不会导致浏览器的URL出现改变,而重定向会使得浏览器的URL出现改变。我们首先把Web应用的首页index.jsp进行修改,制作一个输入用户名、密码的输入框,允许用户进行提交:<html><body><form action="${pageContext.request.contextPath}/login" method="get">原创 2021-08-11 22:43:02 · 771 阅读 · 0 评论 -
Java Web开发——自动刷新展示验证码图片
在浏览器上实现自动刷新的效果一般有两种思路:(1)前端实现,通过javascript进行操作;(2)后端实现,通过设置HTTP响应消息头的内容,告知浏览器自动进行刷新。这里我们介绍后一种实现策略。假设我们现在希望在浏览器上每隔3秒钟自动从后台获取一张新的八位随机验证码图片并进行展示,则代码如下:import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.http.HttpServ原创 2021-08-11 21:54:00 · 1064 阅读 · 0 评论 -
Java Web开发——利用HttpServletResponse进行文件下载
现在我们希望访问一个Servlet服务,从服务器上下载一个文件到本地,这可以使用HttpServletResponse进行实现,具体代码如下:import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.ser原创 2021-08-11 20:41:47 · 2379 阅读 · 0 评论 -
Java Web开发——ServletContext的应用
Servlet容器(如Tomcat)在启动一个Web应用时,会为它创建唯一的ServletContext对象。当Servlet容器终止一个Web应用时,就会销毁它的ServletContext对象。可见,ServletContext对象与Web应用有着同样的生命周期。我们可以把ServletContext形象的理解为Web应用的总管家,同一个Web应用下的所有Servlet对象都共享一个ServletContext对象,这些Servlet对象都可以通过这个“总管家”来访问容器内的各种资源。本文介绍Ser原创 2021-08-10 22:06:22 · 354 阅读 · 0 评论 -
Java Web开发——第一个Servlet应用程序
本文介绍如何使用Tomcat配合IntelliJ IDEA开发一个最简单的Servlet应用程序。1. 新建一个项目(New Project),选择“Maven”项目,选择“从原型创建”(Create from archetype),选择“maven-archetype-webapp”,点击下一步“Next”。之后给项目起一个响亮的名字,确定好路径以及Maven的路径,点击完成即可。2. 在src/main目录下新建“java”和“resources”两个文件夹,依次点击高亮文件夹后,单击右键,将目原创 2021-08-09 21:32:32 · 386 阅读 · 0 评论 -
JDBC连接MySQL数据库初探
一、第一个JDBC程序import java.sql.*;public class Main { public static void main(String[] args) throws ClassNotFoundException, SQLException { // 1. 加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 2. 连接数据库 String url = "原创 2021-08-04 21:07:10 · 792 阅读 · 1 评论 -
Java多线程编程——生产者消费者问题
一、问题介绍生产者消费者问题是一个经典的多线程同步问题。该问题描述了两个进程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是不断的生成数据,而与此同时,消费者则不断消耗这些数据。该问题的关键就是要保证当生产者生产了产品后,若消费者还没有消费此产品,则生产者停止生产并等待,直到消费者消费了此产品;当消费者消费了产品后,若生产者还没有及时生产新的产品,则消费者停止消费并等待,直到生产者生产了新产品。本文为了简单起见,只介绍单生产者—单消费者模式。二、解决方案一:管程原创 2021-07-25 16:15:37 · 5371 阅读 · 1 评论 -
Java多线程编程——初探可重入锁ReentrantLock
首先我们先来看一个抢票的例子。假如现在有10张票,3个人在抢,用程序模拟如下:public class Main { public static void main(String[] args) { TicketOffice ticketOffice = new TicketOffice(); new Thread(ticketOffice, "Alice").start(); new Thread(ticketOffice, "Bob").s原创 2021-07-25 12:08:07 · 329 阅读 · 0 评论 -
Java多线程编程——初探死锁现象
在操作系统中,当两个以上的运算单元,双方都在等待对方停止运行,以获取系统资源,但是没有一方提前退出时,就称为死锁。例如,线程A在持有锁L1的情况下申请锁L2,而线程B在持有锁L2的情况下申请L1,A只有在获得并释放L2后才会释放L1,而B只有在获得并释放L1后才会释放L2。也就是说,A和B各自都在持有一个锁(分别为L1和L2)的情况下去申请对方持有的另外一个锁(分别为L2和L1),而A和B释放其持有的锁的前提又都是先获得对方持有的另外一个锁,因此两个线程最终都无法获得它们申请的另外一个锁而处于无限等待的状态原创 2021-07-25 11:33:52 · 257 阅读 · 0 评论 -
Java多线程编程——初探线程不安全的集合
在Java中,一些集合是线程不安全的,如ArrayList、HashSet、TreeSet、HashMap等。本文,我们以ArrayList为例探究线程不安全的现象与原因。一、ArrayList追加元素的原理首先我们节选出ArrayList中add方法的源码:/** * Appends the specified element to the end of this list. * * @param e element to be appended to this list * @原创 2021-07-25 05:12:02 · 999 阅读 · 2 评论 -
Java多线程编程——线程同步与线程安全问题及synchronized关键字
在多线程环境下,我们常常需要让多个线程同时去操作同一资源。在某些情况下,这种情形会导致程序的运行结果出现差错。专业上的,当多个线程在执行同一段代码的时候,每次的执行结果和单线程执行的结果都是一样的,不存在执行结果的二义性,就可以称作是线程安全的。具体的说,线程安全问题,其实是指多线程环境下对共享资源的访问可能会引起此共享资源的不一致性。线程安全问题多是由全局变量和静态变量引起的,当多个线程对共享数据只执行读操作,不执行写操作时,一般是线程安全的;当多个线程都执行写操作时,就需要考虑线程同步来解决线程安全问题原创 2021-07-25 00:20:00 · 575 阅读 · 1 评论 -
Java多线程编程——线程终止
在Java中有以下三种方法可以终止正在运行的线程:1. 通过设置退出标志位,使线程正常退出。2. 调用Thread类中的stop()方法强行终止线程。但是不推荐使用这个方法,该方法已被弃用。3. 使用Thread类中的interrupt()方法中断线程。一、使用标志位终止线程在线程类中,我们会定义一个标志位表示是否需要终止线程,并提供一个公共方法供外部设置标志位,在run()方法中通过标志位的取值判断是否需要终止。例如,我们模拟了一个服务器不断接收客户端请求的过程。当主线程中将“原创 2021-07-22 22:02:49 · 1997 阅读 · 1 评论 -
Java多线程编程——Lambda表达式
Lambda表达式,又可称为闭包,是Java 8中的一项重要特性,本质上属于函数式编程的一种。理解Lambda表达式的关键,是理解函数式接口(functional interface)的概念。所谓函数式接口,就是指该接口内只包含唯一一个抽象方法。对于函数式接口,我们可以通过Lambda表达式创建该接口的对象。一、Lambda表达式的引出1. 我们先看一下如何定义一个函数式接口,定义类以实现该接口,并创建类的对象以调用相关方法。public class Main { public原创 2021-07-21 22:42:00 · 1197 阅读 · 1 评论 -
Java多线程编程——静态代理模式
代理(Proxy)是一种设计模式,它提供了对目标对象另外的访问方式,即通过代理对象访问目标对象。这样做的好处是,可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。本文我们介绍静态代理。静态代理在使用时,需要定义接口或者父类,目标对象与代理对象一起实现相同的接口或者是继承相同父类。例如,现在我们想举办一场演唱会,邀请一名歌星前来助阵。一种方案是,我们去寻找演艺经纪公司,让他们帮我们联系歌手出演节目。这里,歌手是目标对象,他只负责在演唱会上唱歌;而演艺公司则是代理对象,他们还要负责除原创 2021-07-21 21:17:53 · 242 阅读 · 0 评论 -
Java多线程编程——线程创建
Java中的线程有三种创建方式:继承Thread类、实现Runnable接口和实现Callable接口。下面我们一一进行介绍。一、继承Thread类使用该方法创建线程有如下三步:1. 自定义线程类继承Thread类;2. 重写该类中的run()方法,编写线程执行体;3. 创建线程对象,调用start()方法启动线程。例如,我们创建3个线程,分别去寻找指定区间内的素数。public class Main { public static void main(Stri原创 2021-07-20 22:40:09 · 562 阅读 · 5 评论 -
Java中的多态小结
Java中的多态特性赋予了程序以灵活,但却给程序员阅读和理解程序带来了不少困扰。为了更清晰的理解Java中的多态特性,特撰写此博文予以解释。Java中多态的编译及运行逻辑如下所示:具体的说,- 情形A:对于 声明类型 变量名 = new 实际类型(); 变量名.方法名();则: 1. 若声明类型不是实际类型的祖先(要么没有直系关系,要么声明类型是实际类型的后代),则编译报错,因为不可以将父类或没有直系关系的类向下转换为子类。 2. 若声明类型下不具...原创 2020-06-23 20:53:49 · 289 阅读 · 0 评论 -
厦大计算机系Java程序设计实验(五)
习题1 赛车题目描述:绘制一辆赛车(颜色任选,款式如图),使用上下左右箭头控制赛车的移动。注意不能让赛车的任何部位超出界面的边界。 解题思路:本题将小车打包成一个结点,然后放置在一个Pane面板上。并编写四个函数分别处理上下左右四个事件的响应。源代码:import javafx.application.Application;import javafx.collections.Observabl原创 2018-01-19 16:18:01 · 1763 阅读 · 0 评论 -
厦大计算机系Java程序设计实验(三)
习题1 三角形类题目描述:从课本的GeometricObject类继承一个Triangle 类,并满足下列条件:有3个私有double成员表示三条边,默认长度为1.0;有1个无参构造方法,用于创建默认三角形;有1个3参数构造方法,用于创建指定三角形,不需要考虑3边非法的情况;有1个getArea(),1个getPerimeter() 分别返回三角形的面积和周长;有1个toString()方法返回三原创 2018-01-19 16:00:59 · 3748 阅读 · 0 评论 -
厦大计算机系Java程序设计实验(二)
习题1 最大子方阵题目描述:给定一个由0,1组成的n×n方阵(n在运行时提醒用户输入),判断其中由全1组成的最大子方阵的左上角位置和阶数。例如用户输入n为5,随机产生的方阵如下:要求编写方法实现上述功能,返回值是一个包含3个元素的数组,依次表示行下标、列下标、阶数。 方法原型:public static int[] findLargestBlock(int[][]m)解题思路:阶数从1一直到n,遍原创 2018-01-19 15:54:00 · 890 阅读 · 0 评论 -
厦大计算机系Java程序设计实验(一)
习题1 数字金字塔题目描述:输入一个正整数n(n<16),输出一个如图的数字金字塔(下图是当n=7的输出)。不考虑输入错误的情形。要求使用Scanner作为输入,System.out.print作为输出。解题思路:先由用户输入行数n。对于第i行,1≤i≤n,其行前空格数为n-i。接着从i输出至1再输出至i即可。源代码:import java.util.Scanner;public class原创 2018-01-19 15:47:58 · 942 阅读 · 0 评论 -
厦大计算机系Java程序设计实验(四)
习题1 正八边形类题目描述:写一个正八边形类Octagon,要求从课本的GeometricObject类继承,并实现 Comparable和 Cloneable接口。写一个测试类,测试Octagon类的所有可用方法。解题思路:首先在Octagon类内实现GeometricObject类中的getArea()和getPerimeter()方法,然后覆盖clone和compareTo这两个方法原创 2018-01-19 16:06:56 · 1993 阅读 · 0 评论