- 博客(28)
- 收藏
- 关注
原创 Java反射机制
概念:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为 Java 语言的反射机制。简单来说,反射机制指的是程序在运行时能够获取自身的信息。在 Java 中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。类的加载机制:new 对象()1.JVM加载对象.class文件1.1JVM在硬盘找对象.class文件并读取到内存中1.2JVM自动创建...
2022-04-19 14:38:37
168
原创 JavaWeb过滤器:Filter
Filter:是处于客户端浏览器与服务器资源文件之间的一道过滤网,在访问资源之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。作用:一般用于登录权限验证、资源访问权限控制、敏感词汇过滤、字符编码的转换等等操作,便于代码重用,不必每个servlet中还要进行相应的操作。过滤器链:如果有多个过滤器链,执行顺序在注解中以单词排序,xml中以书写的先后顺序执行。注意先经过的后回来。Filter的实现方式分为两种:第一种:①实现Filter接口②重写三个方法,
2022-04-18 16:15:03
431
原创 多线程中的线程池
概念:并发线程数量多,每个线程执行时间短,频繁创建线程会大大降低系统效率,因为频繁创建线程和销毁线程需要时间。使用线程池可以复用线程,就可以执行完一个任务,并不被销毁,而可以继续执行其它任务。Java通过Executor框架来实现线程池实现线程池的四种方式: 单线程池:这个池子里仅有一个线程池,不管多少任务,都是这个线程负责处理。定长线程池:拥有固定长度的线程池。(重要)可缓存线程池:如果线程池长度超过处理需要,可灵活回收空闲线程和创建线程,若无可回收,则新建线程。定时线程池:(
2022-04-15 14:57:49
714
原创 Java中多线程经典案例:生产者和消费者
注:为了便于理解,我使用了不规范的写法汉字来命名。生产者生产产品,消费者消费产品,商店作为中间商从生产者那里进货,然后再把这些货买个消费者。产品代码:package xiancheng.生产者消费者;public class 产品 { private Integer id; public 产品(Integer id) { this.id = id; } @Override public String toString() {.
2022-04-15 12:39:32
861
原创 JavaWeb中Servlet的实现方式
1、第一种实现方式1.实现Servlet接口2.重写这个接口的五个方法3.给当前类设置URL路径(XML方式)public class FirstServlet implements Servlet { private ServletConfig config; // 初始化方法 会在Servlet创建时调用,并且只会调用一次 // 默认情况下,在第一次请求时创建当前Servlet public void init(ServletConfig conf
2022-04-13 12:49:50
605
原创 Javaweb中EL 表达式和JSTL 的使用
一、EL 表达式概述:Expression Language 表达式语言,是一种在 JSP 页面获取数据的简单方式。 只能获取数据,不能设置数据。 语法:在 JSP 页面的任何静态部分均可通过: 来获取到指定表达式的值 开启EL表达式:isELIgnored="false"(1)获取容器的值<html><head> <title>EL</title></head><body><h1>之
2022-04-12 22:06:00
934
原创 通过多线程模拟购票系统,假设总票数有100张,共四个线程进行售票,保证线程安全
public class Text5 { public static void main(String[] args) { Ticket ticket = new Ticket(); for (int i = 0; i < 4; i++) { DemoH demoH = new DemoH(ticket); Thread t1 = new Thread(demoH); t1.start().
2022-04-06 16:14:35
758
2
原创 Java中线程的生命周期
线程的生命周期:线程是一个动态的执行过程,它也有从产生到 死亡的过程。a) 新建状态:使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程 对象就处于新建状态。它保持这个状态直到程序 start()这个线程。b) 就绪状态:当线程对象调用了 start()方法之后,该线程就进入就绪状态,该状态 的线程位于可运行线程池中,变得可运行,等待获取 CPU 的使用权。 就绪状态的线程处于就绪队列中,要等待 JVM 里线程调度器的调度。c) 运行状态:如果就绪状态
2022-04-05 15:25:06
304
原创 Java中如何产生一个线程
1.通过继承 Thread 类,重写run方法 public class Text extends Thread { public void run() { for (int i = 0; i < 101; i++) { String threadName = Thread.currentThread().getName(); System.out.println(threadName + ":" + i); .
2022-04-05 15:15:52
352
原创 Java集合中迭代器操作
第一种方法:for(泛型 迭代对象:迭代集合){}第二种方法:通过Iteratorpublic class Text3 { static List<String> list; static Set<String> set; static { list = new ArrayList<>(); list.add("aa"); list.add("bb"); list.
2022-04-04 20:38:44
314
原创 有一个集合中存放很多图书,图书是一个类(编号,书名,价钱),查找比书名是《三国演义》便宜的图书有哪些
public class Book implements Comparable<Book> { private Integer id; private String name; private double price; public Book() { } public Book(Integer id, String name, double price) { this.id = id; this.name =.
2022-04-04 16:19:29
246
原创 java中数组元素位移(效率较高)
System.arraycopy(array,index[下标],array,index+1[位移的位置],size-index[位移元素的个数]) public static void c() { String[] array = {"aa", "bb", "cc", "dd", "ee"}; System.out.println(Arrays.toString(array)); System.arraycopy(array, 1, array, 2,
2022-04-03 19:53:21
997
原创 java中ArrayList集合的排序操作
ArrayList的排序方法:①泛型类实现Comparable接口重写compareTo方法②调用Collections.sort(list)对集合进行升序排列例:对学生类利用id进行升序排列:package jihe.deom;public class Student implements Comparable<Student>{ private int id; private String name; private int age; ..
2022-04-02 17:55:20
2037
原创 正则表达式的应用
校验表达式:boolean 校验结果 = Pattern.matches(正则表达式, 待校验的字符串);Scanner scanner = new Scanner(System.in);String zhengZe = "[abcd]";//表示是必须是a,b,c,d这四个字符里面的期中一个String zhengZe1 = "[a-z]";//只能是一个小写字母String zhengZe2 = "[1-57]";//1、2、3、4、5、7String zhengZe3 = "[^a
2022-03-29 19:59:49
262
原创 Java异常处理
异常:在程序的运行过程中所发生的不正常的事件,它会中断运行的程序。java中异常的基类:Exception。错误:是一个合理的应用程序不能截获的严重问题,是vm的一个故障。基类:Errorjava中Exception和Error有共同父类Throwable。在java中异常分为两大类:编译异常和运行异常。捕获异常 抛出异常 声明异常 try 执行产生可能异常的代码 throw throws catch 捕获异常 手动抛出异常 声明方法可能要抛出..
2022-03-29 07:00:00
81
原创 Java面向对象的实现----接口
1.接口的关键字是interface,类通过implements来实现接口,一个类可以实现多个接口。//一个类可以实现多个接口public class C implements A,B{ @Override //重写方法}2.定义属性和方法,不能定义构造器属性:所有属性都是常量,都是pubic static final,值不能修改,必须有初始值。方法:①所有的public方法都是抽象方法 ②未书写作用域时默认public ③非公开方法可以有实现体。接口中要想有方法实现,必..
2022-03-28 19:33:09
547
原创 Java面向对象的修饰符
staticstatic:静态的,静态修饰符。可以修饰:属性、方法、块。用static修饰的生命周期长。|DemoA.java|编译|DemoA.class|读取(加载)|从硬盘---->内存过程 所有静态内容产生了|产生对象|new 类();所有非静态内容产生了用static修饰的方法不能直接调用非static修饰的。非static修饰的可以调用static修饰的。块:类似于一个匿名方法体,没有名字,只执行一次,在类被加载时执行,按照书写顺序执行。static{
2022-03-28 19:15:33
139
原创 Java面向对象的特征:封装、继承、多态
封装:概念:隐藏类的实现细节,将类的属性私有化,提供公开的接口访问这些属性。好处:①安全性 ②不关系具体实现 ③打包模块(增加了数据的访问限制,增强了数据的可维护性。)实现:①将属性私有化 ②每个属性提供两个公开的方法(get、set)例:请通过代码封装,实现:编写一个Book类,代表教材: 具有属性:名称(title)、页数(pageNum)、其中页数不能少于200页,否则输出错误信息,并赋予默认值200 为个属性设置赋值(set)和取值(get)方法 具有方法:to...
2022-03-28 17:41:19
375
原创 Java中成员变量和局部变量的区别
①作用域:成员变量可以被当前类和其他成员变量使用,局部变量只能在当前“程序体”使用。②初始值问题: 成员变量有构造器赋值,所以为初始值可以使用,但是局部变量必须赋值。③优先级问题在重名时如何使用成员变量: 重名时优先使用局部变量,想使用重名的成员变量通过this.成员变量。注意:在同一个方法中,不允许有同名局部变量;在不同的方法中,可以有同名局部变量...
2022-03-25 21:04:16
351
原创 Java中构造器的使用
构造器:初始化对象,给对象赋值。public 类名([形式参数列表]){……}构造器的分类:①隐式构造器: 系统自带的构造器,它是无参数的,给未赋值的成员变量赋予一个合适的初值。原始类型:0 引用类型:null 注意:书写任意一个显示构造器后,隐式构造器无法手动调用。 ②显式构造器: 程序员自己书写的构造器,一个类可以书写无数个构造器,new对...
2022-03-25 20:45:34
738
原创 java中递归调用的操作
递归调用:在java面向对象中,在本类中,自己的方法自己调用。例:打印出1-100之和//第一种方法 int sum = 0; int i = 1; public void c() { sum += i; i++; if (i == 101) { System.out.println(sum); return; } c(); }//第二.
2022-03-25 15:04:08
378
原创 数组的扩容
解题思路:所以:输入num的位置值会发生改变,下标也会发生改变。//找到值时int c = 0;if (i == index) { newArray[i] = num;//将输入的数插入到数组指定位置 c++;}newArray[i + c] = array[i];//将旧数组付给新数组int[] array = {4, 53, 4, 0, 66, 23, 0, 45, 14, 17}; int[] newArray = new int[arr
2022-03-24 16:14:11
1574
原创 数组中的二分查找法
解题思路:前提条件:必须是一组连续的整数。注:对于无序数组,若先进行排序,再使用二分查找。分别有三种情况:①当num=array[middle]时:恭喜你,很幸运,找到了这个数。②当num>array[middle]时:begin=middle;middle=(begin+end)/2;③当num<array[middle]时:end=middle;middle=(begin+end)/2;代码:Scanner scanner = new Scann
2022-03-24 10:05:58
1058
原创 数组冒泡排序法
解题思路:它重复的走访 过要 排序的元素列,依次比较相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把它们交换过来。走访元素的工作是重复进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。 int len = (int) (Math.random() * 20 + 1); int[] array = new int[len]; for (int i = 0; i < len; i++) { arra.
2022-03-23 20:28:31
1530
原创 找出数组中的最大值和最大值的下标
解题思路:假设数组中的第一个数和第一个下标是最大值,按照打擂主的形式进行一一比较,如果max<array[i]时,那么此时array[i]就是max,即max=array[i]。那么此时最大下标就是maxIdex=i 。这就是本题的思路。例题:随机一个数组,找出数组中最大的数和最大数的位置,通过打擂台的方式 int len = (int) (Math.random() * 10 + 1); int[] array = new int[len]; for
2022-03-23 15:37:39
6701
原创 数组的顺序查找法
例题:有一个数列:8,4,2,1,23,344,12Ⅰ:循环输出数列值Ⅱ:求数列中所有数值的和Ⅲ:猜数游戏,从键盘中任意输入一个数,判断数组中有没有这个数 Scanner scanner = new Scanner(System.in); System.out.println("请输入一个数:"); int num = scanner.nextInt(); boolean flag = true;//作为一个标记 int.
2022-03-23 12:29:34
4133
原创 系统生成一个随机的String数组,长度随机,内容随机。
int leb = (int) (Math.random() * 10 + 4); String[] array = new String[leb]; //外循环是给数组赋值 for (int i = 0; i < leb; i++) { String str = ""; int strlen = (int) (Math.random() * 10 + 1);//字符串中字符个数 .
2022-03-23 11:39:38
303
原创 输入一个三角形的三条边,判断有这三条边能否构成一个三角形,如果是,输出周长,不是,输出非法三角形。
三角形判定条件:任意俩边之和大于第三边,任意俩边之差小于第三边。Scanner scanner = new Scanner(System.in);System.out.println("请输入三角形的三条边:");int a = scanner.nextInt();int b = scanner.nextInt();int c = scanner.nextInt();if (a > b) { if (b > c) { if (b + c > a &.
2022-03-22 19:34:51
2592
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人