![](https://img-blog.csdnimg.cn/20210307114601950.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java从入坑到变疯
从零基础开始,一步步走向癫疯
花鼠大师
一个会点搏击的码农
展开
-
跨域问题解决
跨域后端代码解决原创 2023-02-07 10:07:05 · 70 阅读 · 0 评论 -
JVM进修之路(一)程序计数器与虚拟机栈
JVM:Java Virtual Machine,Java运行时所需要的环境(Java二进制字节码运行时所需要的环境)原创 2023-01-19 17:48:23 · 689 阅读 · 1 评论 -
java反射
java反射原创 2022-05-30 22:54:40 · 156 阅读 · 0 评论 -
后台代码使用查询字符串拼接响应到前端jsp页面乱码问题
后台使用URLEncoder.encode(name, “utf-8”);进行重新编码后再拼接字符串//处理中文乱码req.setCharacterEncoding("utf-8");String name = "李白";String encode = URLEncoder.encode(name, "utf-8");resp.sendRedirect("getMsg.jsp?info="+encode);...原创 2021-09-12 08:59:05 · 156 阅读 · 0 评论 -
ssm整合-配置文件【贼详细,拿来就能用!】
本文将spring配置文件拆分为dao层配置文件,service层配置文件和springmvc(controller)层配置文件pom.xml文件配置,导入相应依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoca.原创 2021-07-21 20:06:04 · 268 阅读 · 0 评论 -
拿来就能用的log4j配置文件
将等级为DEBUG的日志信息输出到console和file这两个目的地###log4j.rootLogger = debug,console,fileconsole: 输出到控制台log4j.appender.console = org.apache.log4j.ConsoleAppenderlog4j.appender.console.Target = System.outlog4j.appender.console.layout = org.apache.log4j.PatternLayout原创 2021-06-25 08:56:16 · 86 阅读 · 0 评论 -
java里IO中的相对路径和绝对路径
绝对路径指从根盘符开始的路径。例如:D:\IdeaProjects\javaProject\xmlDemo\1.txt相对路径指相对当前JVM虚拟机的启动位置(不是相对当前运行File文件的程序的位置)。可以使用如下代码获取jvm虚拟机的启动路径File file = new File(".");System.out.println("当前jvm虚拟机启动位置的绝对路径为:"+file.getAbsoluteFile());获取到JVM虚拟机的启动位置后,就可以在当前位置下去找目标文件的位原创 2021-04-28 14:17:10 · 479 阅读 · 0 评论 -
关于Java多线程中join()方法的理解
假设目前有两个线程,线程A和线程B。情景一:如果线程A正在运行,此时线程B调用join()方法时,线程B插队执行(线程B执行到死亡)后线程A再执行;情景二:如果线程A正在运行,此时线程A调用join()方法时,线程A处于等待状态,如果调用的join()方法中没有传参数(等待多少毫秒),线程A将无限期等待下去,无论线程B是否执行结束。情景一示例代码:public class Thread1 extends Thread { public void run(){ for (in原创 2021-04-20 11:47:44 · 273 阅读 · 0 评论 -
使用Socket模拟实现聊天小工具
Socket是在应用层和传输层之间的一个抽象层,它把 TCP/IP 层复杂的操作抽象为几个简单的接口,供应用层调用实现进程在网络中的通信。Socket 保证了不同计算机之间的通信,也就是网络通信。下面我们使用Socket来模拟一个小的聊天工具。首先需要一个服务器端,也就是接收消息的一端。import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net原创 2021-04-15 23:23:24 · 604 阅读 · 0 评论 -
Hashtable和HashMap的异同
Hashtable和HashMap两者的原理相同,功能相同,很多情况下可以互用。Hashtable和HashMap的主要区别如下:1、Hashtable继承自Dictionary类,而HashMap实现了Map接口2、Hashtable线程安全,HashMap重速度、轻安全,是线程非安全的,所以当运行到线程环境中时,需要程序员自己管理线程的同步问题。3、Hashtable不允许null值(key和value都不允许),HashMap允许null值(key和value都允许)其他异同点可参照博客:原创 2021-04-12 09:51:57 · 1908 阅读 · 0 评论 -
java包装类
在学习包装类之前要明确一点:包装类并不是用来取代基本数据类型的,它是在基本数据类型需要用对象表示时使用。8种包装类:Byte、Short、Integer、Long、Float、Double、Character、Boolean1.包装类常用构造方法:借助包装类构造方法将基本数据类型转换为包装类public Type(type value) Type表示包装类,type代表基本类型例:Integer num = new Integer(10);注:(1)当Number包装类构造方法的参数为Stri原创 2021-04-11 23:24:20 · 124 阅读 · 0 评论 -
AOP切点表达式写法
XML配置AOP:切点表达式写法:execution([访问修饰符] 返回值类型 包名.类名.方法名(参数))·访问修饰符可以省略·返回值类型、包名、类名、方法名可以使用星号*代表任意·包名与类名之间一个点,代表当前包下的类,两个点…表示当前包及其子包下的类·参数列表可以使用两个点…表示任意个数,任意类型的参数列表例如:execution(public void com.springaop.Target.method())execution(void com.springaop.Targ原创 2021-04-06 16:35:43 · 654 阅读 · 0 评论 -
多态中向下转型的理解
父类引用指向子类对象中,若要调用子类独有的方法需要使用向下转型来强制类型转换为子类引用。举例://父接口 USB接口public interface USB{ void service();}//子实现类优盘类 实现usb接口public class UDisk implements USB{ //子类实现父接口的方法 public void service(){ System.out.println(“优盘开始传输数据……”); } //子类独有方法 public voi原创 2021-04-06 11:26:38 · 586 阅读 · 0 评论 -
JDK1.8接口特性对比
JDK1.8之前的接口特性:1.接口中的变量都是静态常量(public static final),必须显式初始化2.接口中的所有方法默认都是public abstract3.接口没有构造方法,不可以被实例化,但可以被实现4.实现类必须实现接口的所有方法5.实现类可以实现多个接口(Java中的多继承)·关键字implements,多个接口之间用逗号隔开6.接口(interface),在JAVA中是一个抽象类型,在JDK8之前接口是抽象方法的集合7.一个类通过实现接口的方式,从而来继承接口的抽原创 2021-03-30 16:03:27 · 329 阅读 · 3 评论 -
多态中,父类引用指向子类对象的代码执行顺序
父类引用指向子类对象,执行顺序为:父-子-父-父-子-子。解释:若存在静态代码块,则先执行父类的静态代码块,再执行子类的静态代码块(父子);然后执行父类的非静态代码块,父类的构造方法->子类的非静态代码块,子类的构造方法。代码如下:package com.yhzz.demo1;public class Test1 { public static void main(String[] args) { Dad dad = new Baby(); }}clas原创 2021-03-29 09:38:17 · 453 阅读 · 0 评论 -
父类引用指向子类对象的方法调用问题
阅读如下代码,结果是什么?public class Person { String name = "person"; public void shout(){ System.out.println(name); }}public class Student extends Person{ String name = "student"; }public class Test { public static void main(Strin原创 2021-03-28 23:09:35 · 2055 阅读 · 1 评论 -
抽象类VS接口
Java中,抽象类和接口是支持抽象定义的两种机制,由于这两种机制的存在,赋予了Java强大的面向对象的能力相同点:·代表系统的抽象层·都不能被实例化·都能包含抽象方法·用于描述系统提供的服务,不必提供具体实现不同点:·在抽象类中可以为部分普通方法提供默认实现,JDK8之前接口中只能包含抽象方法,JDK8之后接口可包含默认方法·一个类只能继承一个直接的父类,但可以实现多个接口使用原则·两个类满足is-a时使用抽象类;满足has-a时使用接口·接口做系统与外界交互的窗口,接口提供服务·接原创 2021-03-24 16:22:41 · 92 阅读 · 0 评论 -
抽象类和抽象方法/final关键字知识要点
抽象类1、使用abstract修饰的类叫做抽象类2、抽象类中可以有0-多个抽象方法3、抽象类中可以有实例方法4、但是普通类中不可以有抽象方法抽象方法:1、使用abstract修饰的方法叫做抽象方法2、抽象方法必须存在于抽象类中3、抽象方法必须在子类中被实现,除非子类是抽象类4、如果存在直接父类和间接父类,子类都需要将他们的抽象方法进行实现final关键字:1、final修饰变量时,该变量会变成常量,值不可变final String name = "张三";//该值不能再被改变2、原创 2021-03-24 15:10:01 · 938 阅读 · 0 评论 -
抽象类中的静态方法可以被继承和重写吗?/多态绑定机制
可以被继承,但不能被重写。java多态中有动态绑定机制和静态绑定机制。动态绑定机制适用于实例方法:与引用变量实际的引用对象相绑定,调用子类重写后的方法(不能调用子类独有的方法),由运行时JVM决定;静态绑定机制适用于静态方法(static修饰的方法):与引用变量所声明的类型绑定,实际在编译阶段就进行了绑定。成员变量(实例变量和静态变量):与引用变量所声明的类型绑定,在编译阶段就进行了绑定。阅读如下代码:父类定义为抽象类,父类中定义了抽象方法eat()public abstract clas原创 2021-03-23 17:49:21 · 794 阅读 · 0 评论 -
java中super和this关键字的使用
super使用场景:1.子类方法中重写父类方法时2.在子类中定义了和父类同名的成员变量时,父类的成员变量被屏蔽,优先使用子类的成员变量(super可以使被屏蔽的父类成员可见)说明:当子类继承父类非私有属性时,若子类中无同名变量,使用this.属性名可以直接访问父类属性(从父类中去找)。若子类中存在同名变量,使用this.属性名只能访问子类中的同名变量,若要调用父类中的同名变量,需要使用super.属性名。this和super对比:1.访问属性·this关键字:指代当前对象,可以在本类中直接访原创 2021-03-23 09:44:29 · 386 阅读 · 0 评论 -
方法重写与方法重载的理解
方法重载:应用于同一个类中,其中,方法名相同,参数列表不同(参数个数或者参数类型),与返回值和访问修饰符无关。可以理解为你有一个双胞胎兄弟(同一个类中,两个或多个方法),和你长得一摸一样(方法名相同,与返回值和访问修饰符无关),但是你们两个得有点不一样的地方来区分一下,这个不一样的地方只能是头型不同(参数列表不同,可以是参数个数不同或者参数类型不同)方法重写:应用于继承中的子类和父类之间,方法名相同,参数列表相同,返回值为父类该方法的返回值或其子类,访问修饰符不能严于父类。可以理解为你从你爸那拿来原创 2021-03-22 15:53:24 · 168 阅读 · 0 评论 -
多重继承中,孙子类可以继承爷爷类的属性和方法吗?
可以。看如下代码:爷爷类:Animalpackage com.Animal;public class Animal { private String color; private String feetNum; public String getColor() { return color; } public void setColor(String color) { this.color = color; }原创 2021-03-22 15:37:53 · 3108 阅读 · 2 评论 -
Java中的抽象类可以有构造函数吗?/抽象类中的构造方法作用是什么?
答案是肯定的。在抽象类中定义构造函数,在语法上并不会报错,那么说明构造函数是可以存在的。既然抽象类并不能实例化,那抽象类中的构造函数存在的意义是什么?抽象类必须被子类继承来实现。子类在调用父类时 无论自己有没有构造方法都会先去执行父类无参的函数。哪怕父类是抽象类。虽然抽象类不能被实例化,但是可以在构造方法中初始化一些参数;也可以在子类中调用父类的构造方法。阅读如下代码:父类:public abstract class Demo1 { String name; String se原创 2021-03-21 16:27:37 · 4335 阅读 · 1 评论 -
java基础之字符串
除了数字和java关键字外,其他的由多个字符组成的一串字符,都可以叫做字符串。在java中,字符串需要用双引号引起来。使用String对象存储字符串String s = “Hello World”;常用方法:length():返回字符串长度equals():对比两个字符串是否相等课堂练习:实现会员注册,要求·用户名长度不小于****3·密码长度不小于****6·注册时两次输入密码必须相同Scanner sc = new Scanner(System.in);System.out.pr原创 2021-03-17 14:53:12 · 675 阅读 · 0 评论 -
java基础之数组
定义:数组存储相同数据类型的一组数据。声明一个变量就是在内存空间划出一块合适的空间声明一个数组就是在内存空间划出一串连续的空间数组的基本要素:·标识符(数组名称):是一个变量名,遵循驼峰命名规则·数组元素·元素类型:数组中所有元素的数据类型相同·元素下标,从0开始,到数组长度-1注意:数组长度固定不变,避免数组越界思考:下列哪组数据能存储在数组中?数组的类型是什么?·“刘星”,“夏雨”,“夏雪”·8,98,“c”,23·98.1,342.1,34.2如何使用数组?使用数组原创 2021-03-17 08:22:24 · 560 阅读 · 0 评论 -
java基础之循环结构
1.while循环:先判断,再循环语法格式:循环变量while(循环条件){ 循环体; 退出条件;}while循环一般由五部分组成:1)循环变量:用于进入循环的标识。2)while关键字3)循环条件:判断是否继续循环的依据4)循环体5)退出条件(更新循环变量):循环体是需要重复执行的代码,退出条件是当符合某条件时终止循环。退出条件是必须的,否则会陷入死循环。举例:int i = 0;//循环变量while(i<=100){ System.out.pr原创 2021-03-16 17:35:26 · 188 阅读 · 0 评论 -
面向对象——狗狗类和企鹅类源码
狗狗类public class Dog { String name = "无名氏"; // 昵称,默认值是"无名氏" int health = 100; // 健康值,,默认值是100 int love = 0; // 亲密度 String strain = "聪明的拉布拉多犬"; // 品种 /** * 输出狗狗的信息。 */ public void print() { System.out.println("宠物的自白:\n我的名字叫" + this.name +",健康值是"原创 2021-03-16 14:53:29 · 1028 阅读 · 0 评论 -
面向对象(六)封装——面向对象的三大特征之一
思考:下面的代码有什么不合理的地方?Dog d = new Dog();d.health = -1000; 问题:属性值可以被任何人任意访问和修改,可能会设置不合理赋值,安全性差。如何解决?封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问封装两个大致原则:1.把所有的属性藏起来2.把尽可能多的东西藏起来,对外提供便捷的接口如何实现封装?1.修改属性的可见性:设为private,防止错误的属性修改2.创建公有的getter/s原创 2021-03-16 14:51:12 · 82 阅读 · 0 评论 -
面向对象(五)成员变量和局部变量
代码阅读1:for(int i = 0;i<5;i++){ System.out.println("好好学习Java");}System.out.println(i);思考:上面的代码有什么问题?1.变量声明的位置决定变量的作用域。2.变量作用域是可在程序中按变量名访问该变量的区域。举例:在一个类的不同地方进行声明变量。代码阅读2:public class VarDemo { //成员变量(全局变量)作用域为整个类 int num = 18; Str原创 2021-03-16 14:48:18 · 122 阅读 · 0 评论 -
面向对象(四)方法重载
本节目标:掌握方法重载的定义及使用课程导入:public void run(){ System.out.println("小狗跑的很快"); }public void run(){ System.out.println("小狗跑的很快"); }阅读以上代码。例如:当我们在一个类中定义同名方法时,会提示”run()’ is already defined in ****“。那为什么我们上一小节中可以定义多个构造方法呢?//无参构造方法 publ原创 2021-03-16 14:40:03 · 172 阅读 · 0 评论 -
面向对象(三)构造方法
本节目标:·理解构造方法的作用·掌握无参/带参构造方法的定义和使用·理解this的作用及使用构造方法的作用:对象初始化系统默认提供无参构造方法;构造方法的参数可以指定;·无参构造方法语法格式:访问修饰符 构造方法名(){ //初始化方法}·带参(自定义)构造方法语法格式:访问修饰符 构造方法名(参数1,参数2…){ //初始化方法}构造方法示例:Dog dog = new Dog();``public Dog(String name,String sex){原创 2021-03-16 14:37:07 · 204 阅读 · 0 评论 -
面向对象(二)类的定义和实例化
面向对象设计的过程就是抽象的过程,一般分为三步:(1)发现类,类定义了 对象将会用用的特征(属性)和行为(方法)。(2)发现类的属性,对象所拥有的静态特征(3)发现类的方法,对象执行的操作称为类的方法举个栗子:猫类有会喵喵叫,长得可爱,长着爪子,会抓老鼠,爱吃鱼,各种各样的毛色,不同长度的毛发等特征。那么我们可以把拥有这类特征的动物都归为猫类。那么猫类的特征:毛色,毛长,年龄,名字,性别。猫类的行为:叫,吃饭,跑,跳等。如何用Java思想来创建一个类呢?一、定义类语法格式:[访问修饰符原创 2021-03-13 17:11:35 · 929 阅读 · 0 评论 -
面向对象(一)对象和类
1.面向对象Java是一种面向对象的语言,类比于人类认识现实世界的思维方式。这个世界由不同的“对象”组成,可以说能叫出名字的具体东西都能称为是一个对象。现实世界中,万物皆对象。比如我家装修房子,我只需要找到水电工、油漆工等具体的人来就可以完成房子的装修,而不需要我自己既会改水改电,又要会刷墙粉漆。这就是面向对象的思想。我要干什么事情,找一个专业的“对象”来干就ok了。在Java中是一样的道理。我想实现什么样的功能,只需要我知道该找“谁”,知道这个“人”能干啥,然后调用这个“人”的哪些方法就可以,而不原创 2021-03-13 15:36:26 · 234 阅读 · 0 评论