自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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关注的人

提示
确定要删除当前文章?
取消 删除