10 2023 档案

摘要: 阅读全文
posted @ 2023-10-31 21:15 1stzz1 阅读(3) 评论(0) 推荐(0) 编辑
摘要:代码示例: public interface UserDao {} public class UserDaoImpl implements UserDao {} public interface UserService {} public class UserServiceImpl implemen 阅读全文
posted @ 2023-10-31 20:23 1stzz1 阅读(6) 评论(0) 推荐(0) 编辑
摘要:代码示例: public static void main(String[] args) { //创建一个工厂对象 DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); //创建一个读取器(读xml文件) 阅读全文
posted @ 2023-10-31 19:52 1stzz1 阅读(5) 评论(0) 推荐(0) 编辑
摘要:对象有什么方法想被代理,代理就一定要有对应的方法 这个newProxyInstance方法的返回值就是代理对象 代码示例: public interface Star { String sing(String name); void dance();} public class BigStar im 阅读全文
posted @ 2023-10-30 21:56 1stzz1 阅读(8) 评论(0) 推荐(0) 编辑
摘要:代码示例: public static void main(String[] args) throws Exception { //获取class字节码文件对象 Class clazz = Class.forName("pojo.Student"); //获取所有的方法(getMethods()还能 阅读全文
posted @ 2023-10-30 20:34 1stzz1 阅读(20) 评论(0) 推荐(0) 编辑
摘要:代码示例: public static void main(String[] args) throws Exception { //获取class字节码文件的对象 Class clazz = Class.forName("pojo.Student"); //获取到成员变量的对象 Field[] fi 阅读全文
posted @ 2023-10-30 20:11 1stzz1 阅读(122) 评论(0) 推荐(0) 编辑
摘要:在 Java 中,万物皆对象。比如,字节码文件 可以看作是 Class这个类的对象; Constructor 这个类是用来描述 构造方法的,所以这个类的对象就表示构造方法的对象; Field 这个类是用来描述成员变量的,所以这个类的对象就表示成员变量的对象; Method 这个类是用来描述成员方法的 阅读全文
posted @ 2023-10-30 09:29 1stzz1 阅读(17) 评论(0) 推荐(0) 编辑
摘要:① Class.forName ( "全类名" ) → 最为常用 全类名:包名 + 类名 Class 的首字母是大写的,所以是一个类名,是用来描述字节码文件的。 这个类里面有一个静态方法叫 forName,参数可以传递一个类的全类名,可以获取到参数的字节码文件对象 ② 类名.class → 这种方式 阅读全文
posted @ 2023-10-30 09:18 1stzz1 阅读(461) 评论(0) 推荐(0) 编辑
摘要:反射允许对封装类的字段(成员变量)、方法(成员方法)和构造函数(构造方法)的信息进行编程访问 获取字段(成员变量)、成员方法 和 构造方法的时候,我们不是从 Java 文件中获取的,而是从 class 字节码文件当中获取的 所以我们首先要先学习如何获取 class 字节码文件的对象 阅读全文
posted @ 2023-10-30 08:51 1stzz1 阅读(3) 评论(0) 推荐(0) 编辑
摘要:InetAddress表示互联网协议IP地址它有两个子类,一个是Inet4Address,一个是Inet6Address。所以我们在获取InetAddress类对象的时候,它底层会先判断你当前系统用的是4版本的还是6版本的,如果用的是4版本的,那么会创建子类Inet4Address对象给你返回。那我 阅读全文
posted @ 2023-10-29 20:08 1stzz1 阅读(7) 评论(0) 推荐(0) 编辑
摘要:协议:计算机网络中,连接和通信的规则被称为网络通信协议 UDP协议(用户数据报协议): UDP是面向无连接通信协议。速度快,有大小限制,一次只能发送64KB,数据不安全,易丢失数据 TCP协议(传输控制协议): TCP协议是面向连接的通信协议。速度慢,没有大小限制,数据安全 阅读全文
posted @ 2023-10-29 19:34 1stzz1 阅读(1) 评论(0) 推荐(0) 编辑
摘要:什么是网络编程? 答:在网络通信协议下,不同计算机上运行的程序,进行的数据传输 Java 中可以使用 java.net 包下的技术轻松开发出常见的网络应用程序 常见的软件架构:BS、CS CS:Client / Server(客户端 / 服务器)用户本地需要下载安装客户端程序,在远程有一个服务器端程 阅读全文
posted @ 2023-10-29 19:26 1stzz1 阅读(4) 评论(0) 推荐(0) 编辑
摘要:代码示例: package pojo.xc01;public class MyRunnable implements Runnable { @Override public void run() { //编写线程锁执行的代码 for (int i = 1; i <= 3; i++) { System 阅读全文
posted @ 2023-10-28 22:29 1stzz1 阅读(7) 评论(0) 推荐(0) 编辑
摘要:线程池 主要核心原理: ① 创建一个池子,池子中是空的 ② 提交任务时,池子会创建新的线程对象来执行任务,当任务执行完毕,线程会还给池子,下回再次提交任务时,不需要创建新的线程,直接复用已有的线程即可 ③ 但是如果提交任务时,池子中没有空闲线程,并且也无法创建新的线程的时候,任务就会排队等待 线程池 阅读全文
posted @ 2023-10-28 22:13 1stzz1 阅读(12) 评论(0) 推荐(0) 编辑
摘要:Java 的虚拟机当中没有定义运行状态,因为当线程抢夺到 CPU 执行权的时候,虚拟机会把当前线程交给操作系统管理,虚拟机就不管了。 阅读全文
posted @ 2023-10-28 15:51 1stzz1 阅读(11) 评论(0) 推荐(0) 编辑
摘要:Java的阻塞队列(Blocking Queue)可以用来实现等待唤醒机制,其中等待和唤醒的操作在队列的不同方法中体现: 1.等待: 在阻塞队列中,等待通常发生在以下情况: 2.当队列为空时,消费者线程试图从队列中取出元素时,它会被阻塞,直到队列中有元素可供消费。这种等待是通过阻塞队列的take() 阅读全文
posted @ 2023-10-28 15:41 1stzz1 阅读(75) 评论(0) 推荐(0) 编辑
摘要:等待唤醒机制还可以用 阻塞队列的方式进行实现 练习:利用阻塞队列完成生产者和消费者(等待唤醒机制)的代码 细节:生产者和消费者必须使用同一个阻塞队列 阻塞队列的创建方式(泛型:队列里面数据的类型):ArrayBlockingQueue<String> queue = new ArrayBlockin 阅读全文
posted @ 2023-10-28 15:36 1stzz1 阅读(56) 评论(0) 推荐(0) 编辑
摘要:在Java中,"生产者-消费者"(Producer-Consumer)是一种常见的并发编程模型,用于协调多个线程之间的工作,其中一些线程充当生产者,而其他线程充当消费者。这模型通常用于处理共享数据的情况,其中生产者线程生成数据并将其放入共享缓冲区,而消费者线程则从缓冲区中取出数据并进行处理。主要特点 阅读全文
posted @ 2023-10-28 14:57 1stzz1 阅读(130) 评论(0) 推荐(0) 编辑
摘要:在Java中,wait()和notify()方法必须在同步块或同步方法内部使用,通常在锁对象上调用,有以下原因: 1.互斥性: 当你在同步块内部使用wait()和notify()方法时,它们与锁对象紧密相关,确保在调用wait()和notify()时能够维持互斥性。这意味着在调用wait()时,当前 阅读全文
posted @ 2023-10-28 14:57 1stzz1 阅读(198) 评论(0) 推荐(0) 编辑
摘要:package pojo.xc01;public class Cook extends Thread{ @Override public void run() { while (true) { synchronized (Desk.lock) { if (Desk.count == 0) break 阅读全文
posted @ 2023-10-28 14:47 1stzz1 阅读(14) 评论(0) 推荐(0) 编辑
摘要:等待唤醒机制的三个角色:生产者、消费者、控制生产者和消费者的第三者 代码: package pojo.xc01;//用来控制生产者和消费者的执行public class Desk { //桌子上是否有面条(0:没有面条 1:有面条) //用布尔类型表示的话有一个小弊端,因为布尔类型只有两个值,只能控 阅读全文
posted @ 2023-10-28 14:31 1stzz1 阅读(17) 评论(0) 推荐(0) 编辑
摘要:生产者和消费者完整的执行过程: 等待唤醒机制: 在Java中,等待唤醒机制是通过Object类的wait()、notify()和notifyAll()方法来实现的。这种机制通常用于多线程之间的协作,允许线程在某个条件满足或者发生变化之前等待,并在条件满足时被唤醒。 1.wait()方法: 当一个线程 阅读全文
posted @ 2023-10-28 13:22 1stzz1 阅读(31) 评论(0) 推荐(0) 编辑
摘要:当一个线程尝试获取一个已经被其他线程锁住的锁时,它的行为取决于所使用的编程语言和锁的类型。一般情况下,有以下几种可能的行为: 1.阻塞等待:线程会被阻塞,直到锁变为可用。这是最常见的情况,通常用于互斥锁。在Java中,可以使用synchronized关键字或ReentrantLock类来实现这种行为 阅读全文
posted @ 2023-10-28 13:06 1stzz1 阅读(72) 评论(0) 推荐(0) 编辑
摘要:死锁就是在程序当中出现了 锁的嵌套,外面一个锁,里面一个锁,就形成了死锁 死锁不是一个知识点,而是一个错误 阅读全文
posted @ 2023-10-27 21:24 1stzz1 阅读(10) 评论(0) 推荐(0) 编辑
摘要:代码示例: package pojo;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class Ticket extends Thread{ public s 阅读全文
posted @ 2023-10-27 21:12 1stzz1 阅读(17) 评论(0) 推荐(0) 编辑
摘要:同步代码块 就是 把一段代码给锁起来,这样就可以解决多线程操作共享数据时带来的数据安全问题 但是如果我们想要把一个方法里面所有的代码全都锁起来,就没有必要用同步代码块了,我们可以直接把 synchronized 加在方法上,这个方法就叫做同步方法 同步方法的格式: 修饰符 synchronized 阅读全文
posted @ 2023-10-27 20:26 1stzz1 阅读(36) 评论(0) 推荐(0) 编辑
摘要:同步代码块: 利用同步代码块把操作共享数据的代码给锁起来,让同步代码块里面的代码是轮流去执行的 格式: synchronized (锁对象) { 操作共享数据的代码 } 细节: 1. 在最初,锁的状态是默认打开的,如果有一个线程进去了,锁就会自动关闭 2. 当锁里面全部代码都执行完毕了,线程出来了, 阅读全文
posted @ 2023-10-27 19:45 1stzz1 阅读(58) 评论(0) 推荐(0) 编辑
摘要:1. 当创建线程对象的时候,是新建状态 2. 新建完之后 调用 start()方法 就变成了就绪状态(是在调用完了 start() 方法之后才变成了就绪状态)。在就绪状态下,线程开始抢夺 CPU 的执行权。注意是正在抢,还没有抢到,没抢到就无法执行代码。所以就绪状态 有执行资格,但没有执行权(有执行 阅读全文
posted @ 2023-10-27 18:47 1stzz1 阅读(12) 评论(0) 推荐(0) 编辑
摘要:Java 中线程的优先级 最小是 1,最大是 10,默认是 5;优先级越大,抢占到 CPU 的概率越高 String getName()、void setName (String name): 如果我们没有给线程设置名字,线程的默认名字是 Thread-序号,序号是从 0 开始的,例如:Thread 阅读全文
posted @ 2023-10-27 16:53 1stzz1 阅读(11) 评论(0) 推荐(0) 编辑
摘要:继承Thread类 和 实现Runnable接口 的这两种方式 无法获取到多线程的结果 实现Callable接口 的方式 可以获取到多线程运行的结果 阅读全文
posted @ 2023-10-27 16:15 1stzz1 阅读(6) 评论(0) 推荐(0) 编辑
摘要:利用 Callable 接口 和 Future 接口方式实现:这种实现方式可以获取到多线程运行的结果 步骤: 1. 创建一个类,类名比如叫 MyCallable,并实现 Callable 接口 注:Callable 接口有一个泛型,因为这种方式可以获取到多线程运行的结果,泛型就表示结果的类型 2. 阅读全文
posted @ 2023-10-27 16:10 1stzz1 阅读(78) 评论(0) 推荐(0) 编辑
摘要:实现 Runnable 接口的方式进行实现: 1. 定义一个类 实现 Runnable 接口,并实现 run 方法 2. 在 run 方法里面书写该线程要执行的代码 3. 然后创建这个 实现 Runnable 接口的类的实例化对象,这个对象其实就表示 多线程要执行的任务 4. 再去创建一个 Thre 阅读全文
posted @ 2023-10-27 15:42 1stzz1 阅读(96) 评论(0) 推荐(0) 编辑
摘要:多线程的三种实现方式: 1. 继承 Thread 类的方式进行实现 2. 实现 Runnable 接口的方式进行实现 3. 利用 Callable 接口 和 Future 接口方式实现 一、继承 Thread 类的方式: 将类声明为 Thread 的子类,该子类应重写 Thread 类的 run 方 阅读全文
posted @ 2023-10-27 15:01 1stzz1 阅读(73) 评论(0) 推荐(0) 编辑
摘要:并发:在同一时刻,有多个指令在 单个 CPU 上 交替 执行(CPU在多个线程之间交替执行) 并行:在同一时刻,有多个指令在 多个 CPU 上 同时 执行 阅读全文
posted @ 2023-10-26 22:32 1stzz1 阅读(7) 评论(0) 推荐(0) 编辑
摘要:进程:进程是程序的基本执行实体(简单理解就是,一个软件运行之后,它就是一个进程) 线程:线程是操作系统能够进行运算调度的最小单位。它被包含在 进程 之中,是进程中的实际运作单位。 简单说,线程 就是 应用软件中互相独立的、又可以同时运行的功能。如果这样的功能比较多,就形成了多线程 以 360 软件为 阅读全文
posted @ 2023-10-26 22:26 1stzz1 阅读(3) 评论(0) 推荐(0) 编辑
摘要:IO相关的工具类: 阅读全文
posted @ 2023-10-26 20:58 1stzz1 阅读(16) 评论(0) 推荐(0) 编辑
摘要:Commons-io 是 apache 开源基金组织提供的一组有关 IO 操作的开源工具包,是用来提高 IO 流的开发效率的 阅读全文
posted @ 2023-10-26 20:46 1stzz1 阅读(21) 评论(0) 推荐(0) 编辑
摘要:解压缩流 就是读取压缩包中的文件,所以它是读,属于输入流 压缩流 就是把文件中的数据 写到压缩包中,所以它是写,属于输出流 压缩包 里面的 每一个文件或文件夹 在 Java 当中都是一个 ZipEntry 对象 所以 解压 的本质其实就是 把压缩包里面的每一个 ZipEntry 对象按照 层级结构 阅读全文
posted @ 2023-10-26 09:29 1stzz1 阅读(121) 评论(0) 推荐(0) 编辑
摘要:字符流底层有缓冲区,所以效率更高,想自动刷新需要手动开启 字符打印流的构造方法: 字符打印流的成员方法: 代码示例: PrintWriter pw = new PrintWriter(new FileWriter("E:\\Java基础资料\\b.txt"), true);pw.println("黑 阅读全文
posted @ 2023-10-25 22:30 1stzz1 阅读(16) 评论(0) 推荐(0) 编辑
摘要:打印流是高级流,也是用来包装基本流的 但是打印流不能读,只能写,所以打印流只有输出流 打印流分为两种:PrintStream、PrintWriter两个类 1. PrintStream → 字节打印流 2. PrintWriter → 字符打印流 打印流的特点: 1. 打印流只能操作文件目的地,不能 阅读全文
posted @ 2023-10-25 21:45 1stzz1 阅读(60) 评论(0) 推荐(0) 编辑
摘要:细节一: 如果说 一个类实现了 Serializable 接口,表示这个类的对象是可被序列化的,Java 底层会根据这个类里面所有的内容进行计算,计算出一个 long 类型的序列号(或版本号)。假设计算出来的版本号是 1,当我创建了一个这个类的对象的时候,在对象里面就包含了 版本号 1,用序列化流写 阅读全文
posted @ 2023-10-25 17:06 1stzz1 阅读(9) 评论(0) 推荐(0) 编辑
摘要:序列化流是高级流,也是用来包装基本流的 序列化流属于 字节流 的一种,负责输出数据;反序列化流负责输入数据 序列化流 可以把 Java 中的 对象 写到本地文件中。但是写到文件中的数据我们看不懂,可以通过反序列化流把数据正确读取出来 序列化流 也叫 对象操作输出流 序列化流: 构造方法:public 阅读全文
posted @ 2023-10-25 16:16 1stzz1 阅读(31) 评论(0) 推荐(0) 编辑
摘要:InputStreamReader 的 read() 方法是用于从字符输入流中读取一个字符的方法。它的底层原理涉及字符编码、字节流转换为字符流以及字符输入的过程。下面是对 read() 方法的超详细底层原理解释: 读取字节数据:InputStreamReader 本质上是一个字符流,它依赖于字节流来 阅读全文
posted @ 2023-10-25 15:17 1stzz1 阅读(855) 评论(0) 推荐(0) 编辑
摘要:转换流属于字符流的一员,本身也是一种高级流,用来包装基本流的。 转换流是 字符流 和 字节流 之间的桥梁 转换流的作用: 1. 指定字符集读写数据(JDK11开始被淘汰) 2. 字节流想要使用字符流中的方法 字符转换输入流 InputStreamReader 的作用是可以把 字节流 转换成 字符流 阅读全文
posted @ 2023-10-24 22:23 1stzz1 阅读(21) 评论(0) 推荐(0) 编辑
摘要:缓冲流为什么能提高性能? 知识点:1 个字节 = 1B 缓冲流自带长度为 8192 的缓冲区,字节缓冲流的缓冲区是 byte 类型的,是长度为 8192 的字节数组,为 8K;而字符缓冲流的缓冲区是 char 类型的,是长度为 8192 的字符数组,为 16K,因为 Java 中一个字符占两个字节 阅读全文
posted @ 2023-10-24 20:23 1stzz1 阅读(24) 评论(0) 推荐(0) 编辑
摘要:在 Java 当中,一个字符,它的底层占两个字节 阅读全文
posted @ 2023-10-24 20:14 1stzz1 阅读(41) 评论(0) 推荐(0) 编辑
摘要:字符流的基本流本身其实已经有缓冲区了,所以字符缓冲流提高的效率不是很明显。 字符缓冲流的构造方法: 字符缓冲输入流:public BufferedReader (Reader r) → 把基本流变成高级流 字符缓冲输出流:public BufferedWriter (Writer r) → 把基本流 阅读全文
posted @ 2023-10-24 20:12 1stzz1 阅读(24) 评论(0) 推荐(0) 编辑
摘要:缓冲流真正从文件当中读写数据的还是 InputStream 和 OutputStream 这两个基本流。 FileInputStream 会从文件中读取数据,放到缓冲输入流的缓冲区当中。因为缓冲区的默认大小为 8192,所以会一次性读取 8192 个字节。 FileOutputStream 会把缓冲 阅读全文
posted @ 2023-10-24 19:38 1stzz1 阅读(81) 评论(0) 推荐(0) 编辑
摘要:字节缓冲流: 原理:底层自带了长度为 8192 的缓冲区。利用缓冲区可以一次读写 8192 个字节,从而提高性能 public BufferedInputStream (InputStream is) → 把基本流包装成高级流,提高读取数据的性能 public BufferedOutputStrea 阅读全文
posted @ 2023-10-24 19:21 1stzz1 阅读(29) 评论(0) 推荐(0) 编辑
摘要:缓冲流是高级流,它对 基本流 做了一个包装,所以在底层,真正读写数据的还是 InputStream 和 OutputStream 这两个基本流,只不过有了缓冲流的加持,读写的效率更高而已 阅读全文
posted @ 2023-10-24 18:42 1stzz1 阅读(1) 评论(0) 推荐(0) 编辑
摘要:一个数 异或 另一个数两次,结果不变 例如:100 ^ 10 = 110 110 ^ 10 = 100 (即 100 ^ 10 ^ 10 = 100) 阅读全文
posted @ 2023-10-24 16:26 1stzz1 阅读(4) 评论(0) 推荐(0) 编辑
摘要:字节流:可以拷贝任意类型的文件 字符流: 1. 可以读取纯文本文件中的数据 2. 可以往纯文本文件中写出数据 阅读全文
posted @ 2023-10-23 21:52 1stzz1 阅读(23) 评论(0) 推荐(0) 编辑
摘要:FileWriter 书写细节: 1. 创建字符输出流对象 细节①:参数是字符串表示的路径 或者 File 对象都可以 细节②:如果文件不存在会创建一个新的文件,但要保证父级路径是存在的 细节③:如果文件已经存在,则会清空文件,如果不想清空可以打开续写开关 2. 写数据 细节:如果 write 方法 阅读全文
posted @ 2023-10-23 21:37 1stzz1 阅读(48) 评论(0) 推荐(0) 编辑
摘要:FileReader fr = new FileReader("E:\\Java基础资料\\a.txt");char[] chars = new char[2];while (true) { int len = fr.read(chars); if (len == -1) break; System 阅读全文
posted @ 2023-10-23 21:07 1stzz1 阅读(16) 评论(0) 推荐(0) 编辑
摘要:FileReader:从纯文本文件中读取数据 FileReader 的使用步骤: 1. 创建字符输入流对象 → public FileReader (File file) 或者 public FileReader (String pathname) 细节:如果文件不存在,就直接报错 2. 读取数据 阅读全文
posted @ 2023-10-23 20:45 1stzz1 阅读(243) 评论(0) 推荐(0) 编辑
摘要:字符流的底层其实就是字节流,只不过在字节流的基础上又添加了字符集的概念(字符流 = 字节流 + 字符集) 字符流的特点: 输入流:一次读一个字节,遇到中文时,一次读多个字节(GBK一次读两个,UTF-8一次读三个) 输出流:底层会把数据按照指定的编码方式进行编码,变成字节再写到文件中 字符流应用场景 阅读全文
posted @ 2023-10-23 20:13 1stzz1 阅读(35) 评论(0) 推荐(0) 编辑
摘要:所谓编码,就是把我们要存储的数据变成能真正的存储在硬盘当中的字节数据 编码的方法: public byte[] getBytes () → 使用默认方式进行编码(idea默认使用UTF-8;eclipse默认使用GBK) public byte[] getBytes (String charsetN 阅读全文
posted @ 2023-10-23 20:03 1stzz1 阅读(142) 评论(0) 推荐(0) 编辑
摘要:所谓编码,就是把我们要存储的数据变成能真正的存储在硬盘当中的字节数据 阅读全文
posted @ 2023-10-23 19:44 1stzz1 阅读(3) 评论(0) 推荐(0) 编辑
摘要:为什么会有乱码? 原因①:读取数据的时候未读完整个汉字 原因②:编码和解码的方式不统一 如何不产生乱码? 1. 不要用字节流读取文本文件 2. 编码解码时使用同一个码表,同一种编码方式 问:字节流读取中文会乱码,但为什么拷贝文本文件不会乱码呢? 答:拷贝时,是一个字节一个字节地拷贝过去的,数据没有丢 阅读全文
posted @ 2023-10-23 19:41 1stzz1 阅读(16) 评论(0) 推荐(0) 编辑
摘要:UTF-8 不是字符集,而是 Unicode 字符集的一种编码方式 UTF-8 编码规则:用 1~4 个字节保存 UTF-8 规定,如果是 ASCII 里面的英文字母,统一用一个字节表示,二进制的第一位是 0,转成十进制是正数 UTF-8 规定 一个中文用三个字节表示,二进制的第一位是 1,第一个字 阅读全文
posted @ 2023-10-23 19:29 1stzz1 阅读(77) 评论(0) 推荐(0) 编辑
摘要:在计算机中,任意数据都是以二进制的形式来存储的 8个比特为1个字节,字节是计算机最小的存储单元 计算机在存储英文的时候,只需一个字节 简体中文版 Windows 默认使用 GBK 字符集。GBK 字符集完全兼容 ASCII 字符集 GBK编码: 规则①:一个汉字用两个字节存储(英文字母占一个字节,二 阅读全文
posted @ 2023-10-23 19:11 1stzz1 阅读(7) 评论(0) 推荐(0) 编辑
摘要:finally 里面的代码是一定会执行的,除非虚拟机停止(跟 JVM 退出是一个意思) 所以经常把释放资源之类的扫尾代码放在 finally 里面 语法格式: try { } catch (Exception e) { } finally { } JDK7 的时候,Java 推出了一个接口叫 Aut 阅读全文
posted @ 2023-10-23 16:54 1stzz1 阅读(5) 评论(0) 推荐(0) 编辑
摘要:public int read () → 一次读取一个字节数据 public int read (byte[] buffer) → 一次读取一个字节数组的数据,读取完后,会把读取到的数据还存到参数的数组当中; 返回值表示 本次读取到了多少个字节数据,如果读不到数据,返回 -1 read (byte[ 阅读全文
posted @ 2023-10-23 15:37 1stzz1 阅读(166) 评论(0) 推荐(0) 编辑
摘要:基本代码:FileInputStream fis = new FileInputStream("E:\\Java基础资料\\a.txt");FileOutputStream fos = new FileOutputStream("E:\\Java基础资料\\b.txt" );while (true) 阅读全文
posted @ 2023-10-23 15:25 1stzz1 阅读(7) 评论(0) 推荐(0) 编辑
摘要:FileInputStream fis = new FileInputStream("E:\\Java基础资料\\a.txt");/*int b;while((b = fis.read()) != -1) { System.out.print((char)b);}*/while (true) { i 阅读全文
posted @ 2023-10-23 15:13 1stzz1 阅读(55) 评论(0) 推荐(0) 编辑
摘要:1. 创建字节输入流对象:FileInputStream fis = new FileInputStream("E:\\Java基础资料\\a.txt"); 细节:如果文件不存在,就直接报错 2. 读取数据(read 方法负责读取数据,会一个一个地读,如果读不到了,就会返回 -1) 细节①:一次读取 阅读全文
posted @ 2023-10-23 14:55 1stzz1 阅读(208) 评论(0) 推荐(0) 编辑
摘要:操作本地文件的字节输入流,可以把本地文件中的数据读取到程序中来 步骤: 1. 创建字节输入流对象 FileInputStream fis = new FileInputStream("E:\\Java基础资料\\a.txt"); 2. 读取数据(read 方法负责读取数据,会一个一个地读,如果读不到 阅读全文
posted @ 2023-10-23 14:37 1stzz1 阅读(10) 评论(0) 推荐(0) 编辑
摘要:要想换行写,只需在两个 write() 方法之间再次写出一个换行符就可以了 Windows:\r\n Linux:\n Mac:\r 细节:在 Windows 操作系统当中,Java 对回车换行进行了优化,虽然完整的是 \r\n,但是我们写其中一个 \r 或者 \n,Java 也能实现换行,因为 J 阅读全文
posted @ 2023-10-23 09:26 1stzz1 阅读(613) 评论(0) 推荐(0) 编辑
摘要:void write (int b) → 一次写一个字节数据 void write (byte[] b) → 一次写一个字节数组数据 void write (byte[] b , int off , int len) → 一次写一个字节数组的部分数据 参数一:装着所有数据的数组。参数二:起始索引。参 阅读全文
posted @ 2023-10-22 16:52 1stzz1 阅读(33) 评论(0) 推荐(0) 编辑
摘要:1. 创建字节输出流对象:FileOutputStream fos = new FileOutputStream("E:\\Java基础资料\\a.txt"); 细节①:参数可以是字符串表示的路径,也可以是 File 对象 细节②:如果文件不存在,会创建一个新的空文件,但是要保证父级路径是存在的 细 阅读全文
posted @ 2023-10-22 16:37 1stzz1 阅读(11) 评论(0) 推荐(0) 编辑
摘要:FileOutputStream:操作本地文件的字节输出流,可以把程序中的数据写到本地文件中 步骤: 1. 创建字节输出流对象 2. 写数据 3. 释放资源 eg: public static void main(String[] args) throws IOException { FileOut 阅读全文
posted @ 2023-10-22 16:20 1stzz1 阅读(4) 评论(0) 推荐(0) 编辑
摘要:IO 流:存储和和读取数据的解决方案 IO 流用于读写文件中的数据(可以读写文件,或网络中的数据...) IO 流可以把程序中的数据保存到本地文件当中,也叫写出数据(output),还可以把本地文件中的数据加载到程序当中,也叫读取数据(input) 问:IO 流中,谁在读,谁在写?以谁为参照物看读写 阅读全文
posted @ 2023-10-22 16:03 1stzz1 阅读(5) 评论(0) 推荐(0) 编辑
摘要:public static void main(String[] args) { File f = new File("E:\\Java基础资料\\哈哈"); HashMap<String, Integer> count = getCount(f); StringBuilder sb = new S 阅读全文
posted @ 2023-10-22 14:54 1stzz1 阅读(39) 评论(0) 推荐(0) 编辑
摘要:list () 方法:获取当前该路径下所有内容(仅仅能获取名字) 阅读全文
posted @ 2023-10-21 21:18 1stzz1 阅读(7) 评论(0) 推荐(0) 编辑
摘要:public File[ ] listFiles () → 获取当前该路径文件夹下所有内容,把所有的内容放到数组中返回 File f = new File("E:\\Java基础资料");File[] files = f.listFiles();for (File file : files) { / 阅读全文
posted @ 2023-10-21 21:03 1stzz1 阅读(141) 评论(0) 推荐(0) 编辑
摘要:createNewFile () 方法: 细节一:如果当前路径表示的文件不存在,则创建成功,方法返回 true;如果当前路径表示的文件已经存在,则创建失败,方法返回 false 细节二:如果父级路径是不存在的,那么方法会有 IOException 异常 细节三:createNewFile () 方法 阅读全文
posted @ 2023-10-21 20:47 1stzz1 阅读(12) 评论(0) 推荐(0) 编辑
摘要:length () 方法的细节:只能获取文件的大小,单位是字节。如果我们想要的单位是 M,G等,可以不断地除以 1024 len / 1024:KB len / 1024 / 1024:MB len / 1024 / 1024 / 1024:G 如果我们要获取一个文件夹的大小,需要把这个文件夹里面所 阅读全文
posted @ 2023-10-21 20:19 1stzz1 阅读(10) 评论(0) 推荐(0) 编辑
摘要:File 对象就表示一个路径,可以是文件的路径,也可以是文件夹的路径。甚至这个路径可以是存在的,也可以是不存在的 File 类常见的构造方法有三个: public File (String pathname) → 根据文件路径创建文件对象。把字符串表示的路径变成 File 对象 public Fil 阅读全文
posted @ 2023-10-21 19:41 1stzz1 阅读(6) 评论(0) 推荐(0) 编辑
摘要:自定义异常的意义:让控制台的报错信息更加见名知意 步骤: 1. 定义异常类,类名要见名知意 2. 写继承关系。如果定义的异常是运行时异常,要继承 RuntimeException;如果是编译时异常,直接继承 Exception 3. 写空参构造 4. 写带参构造 阅读全文
posted @ 2023-10-21 19:09 1stzz1 阅读(8) 评论(0) 推荐(0) 编辑
摘要:抛出 核心思想:告诉调用者方法里面有问题了。所以更多的是写在方法里面的。 捕获 核心思想:不让程序停止,让程序运行下去。所以捕获更多的是写在方法的调用处。 阅读全文
posted @ 2023-10-21 18:35 1stzz1 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2023-10-21 17:14 1stzz1 阅读(4) 评论(0) 推荐(0) 编辑
摘要:throws:写在方法定义处,表示声明一个异常,告诉调用者,使用本方法可能会有哪些异常(编译时异常:必须要写;运行时异常:可以不写) 语法: public void 方法 () throws 异常类名1 , 异常类名2 ... { } throw:写在方法内,表示结束方法。用来手动抛出异常对象,把异 阅读全文
posted @ 2023-10-21 17:12 1stzz1 阅读(93) 评论(0) 推荐(0) 编辑
摘要:一、如果 try 中没有遇到问题,怎么执行? 答:会把 try 里面所有的代码全部执行完毕,不会执行 catch 里面的代码。只有当出现了异常才会执行 catch 里面的代码 二、如果 try 中可能会遇到多个问题,怎么执行? 答:会写多个 catch 与之对应。如果我们要捕获多个异常,这些异常中如 阅读全文
posted @ 2023-10-21 16:30 1stzz1 阅读(7) 评论(0) 推荐(0) 编辑
摘要:语法格式: try { 可能出现异常的代码 ; } catch (异常类名 变量名) { 异常的处理代码 ; } 目的:当代码出现异常时,可以让程序继续往下执行 代码的执行逻辑: int[] arr = {1, 2, 3};try { System.out.println(arr[10]); Sys 阅读全文
posted @ 2023-10-21 15:31 1stzz1 阅读(87) 评论(0) 推荐(0) 编辑
摘要:第一步:把异常的名称、异常的原因及异常出现的位置等信息打印在了控制台,并且是以红色字体打印的 第二步:程序停止执行,异常下面的代码不会再执行了 阅读全文
posted @ 2023-10-21 15:12 1stzz1 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2023-10-21 14:42 1stzz1 阅读(2) 评论(0) 推荐(0) 编辑
摘要:1. 引用静态方法: 格式: 类名 : : 静态方法名 (Integer : : parseInt) 2. 引用成员方法 3. 引用构造方法 阅读全文
posted @ 2023-10-19 22:31 1stzz1 阅读(5) 评论(0) 推荐(0) 编辑
摘要:方法引用的概念:把已经有的方法拿过来用,当作函数式接口中抽象方法的方法体 方法引用需要满足的条件: 1. 引用处必须是函数式接口 2. 被引用的方法必须是已经存在的 3. 被引用方法的形参和返回值需要跟抽象方法保持一致 4. 被引用方法的功能要满足当前需求 : : 是方法引用符,是方法引用当中独特的 阅读全文
posted @ 2023-10-19 22:13 1stzz1 阅读(4) 评论(0) 推荐(0) 编辑
摘要:void forEach ( Consumer action ) → 遍历 long count () → 统计 toArray () → 收集流中的数据,放到数组中 collect ( Collector collector ) → 收集流中的数据,放到集合中 count () 方法: Array 阅读全文
posted @ 2023-10-19 20:50 1stzz1 阅读(83) 评论(0) 推荐(0) 编辑
摘要:sorted ():排序 举例: sorted (): ArrayList<Integer> list = new ArrayList<>();Collections.addAll(list, 1, 6, 5);list.stream().sorted(new Comparator<Integer> 阅读全文
posted @ 2023-10-19 17:00 1stzz1 阅读(39) 评论(0) 推荐(0) 编辑
摘要:作用:结合了 Lambda 表达式,简化集合、数组的操作 步骤: 1. 先得到一条 Stream 流(流水线),并把数据放上去 2. 使用 中间方法 对流水线上的数据进行操作 3. 使用 终结方法 对流水线上的数据进行操作 获取Stream流: 单列集合:default Stream<E> stre 阅读全文
posted @ 2023-10-19 15:06 1stzz1 阅读(100) 评论(0) 推荐(0) 编辑
摘要:如果不想让别人修改集合中的内容,只想让别人仅能够查询数据,就可以用不可变集合 在 List、Set、Map 接口中,都存在静态的 of 方法,可以获取一个不可变的集合 eg:List<String> list = List.of ( "张三" , "李四" ); 阅读全文
posted @ 2023-10-15 17:00 1stzz1 阅读(8) 评论(0) 推荐(0) 编辑
摘要:https://element-plus.org/zh-CN/component/button.html 阅读全文
posted @ 2023-10-14 21:14 1stzz1 阅读(1286) 评论(0) 推荐(0) 编辑
摘要:对 vuex 或 Pinia 里面的内容做本地持久化 1. 安装插件: npm i pinia-plugin-persistedstate 2. 将插件添加到 pinia 实例上 ① main.js 里导入持久化插件:import piniaPluginPersistedstate from 'pi 阅读全文
posted @ 2023-10-14 19:48 1stzz1 阅读(125) 评论(0) 推荐(0) 编辑
摘要:import { defineStore } from 'pinia' import { ref } from 'vue' import axios from 'axios' export const useChannelStore = defineStore('channel', () => { 阅读全文
posted @ 2023-10-14 17:37 1stzz1 阅读(412) 评论(0) 推荐(0) 编辑
摘要:Pinia 是 Vue 的最新 状态管理工具,是 Vuex 的替代品 Pinia 的优势: 1. 提供更简单的 API(去掉了 mutation) 2. 提供符合 组合式风格的 API(和 Vue3 新语法统一) 3. 去掉了 modules 的概念,每一个 store 都是一个独立的模块 4. 配 阅读全文
posted @ 2023-10-14 16:52 1stzz1 阅读(90) 评论(0) 推荐(0) 编辑
摘要:作用和场景:顶层组件向任意的底层组件 传递数据和方法,实现 跨层组件通信 跨层传递普通数据 步骤: 1. 顶层组件通过 provide 函数提供数据 provide ( ' key ' , 顶层组件中的数据 ) 2. 底层组件通过 inject 函数获取数据 const message = inje 阅读全文
posted @ 2023-10-14 14:59 1stzz1 阅读(119) 评论(0) 推荐(0) 编辑
摘要:模板引用的概念:通过 ref 标识 获取真实的 dom对象或者组件实例对象 使用: 1. 调用 ref 函数生成一个 ref 对象 <script setup> import { ref } from 'vue' const h1Ref = ref (null) </script> 2. 通过 re 阅读全文
posted @ 2023-10-14 11:04 1stzz1 阅读(269) 评论(0) 推荐(0) 编辑
摘要:步骤: 1. 子组件内部通过 emit 方法触发事件 ① 通过 defineEmits 编译器宏生成 emit 方法 <script setup> const emit = defineEmits ([ 'get-message' ]) // get-message:可以触发的事件 </script 阅读全文
posted @ 2023-10-14 10:49 1stzz1 阅读(79) 评论(0) 推荐(0) 编辑
摘要:步骤: 一、父给子传 写死的值 1. 父组件中给子组件 以添加属性的方式传值 <script setup> import sonComVue from './son-com.vue' // 局部注册 </script> <template> <sonComVue message = "黑马程序员"> 阅读全文
posted @ 2023-10-14 10:28 1stzz1 阅读(95) 评论(0) 推荐(0) 编辑
摘要:支持调用多次 阅读全文
posted @ 2023-10-14 09:53 1stzz1 阅读(29) 评论(0) 推荐(0) 编辑
摘要:计算属性基本思想和 Vue2 的完全一致,组合式 API 下的计算属性只是修改了写法 核心步骤: 1. 导入 computed 函数 <script setup> import { computed } from 'vue' </script> 2. 执行函数 在回调参数中 return 基于响应式 阅读全文
posted @ 2023-10-13 22:31 1stzz1 阅读(185) 评论(0) 推荐(0) 编辑
摘要:Vue中默认的数据并不是响应式的,如果我们希望数据是响应式的,则需要通过 reactive 或者 ref 进行处理。 reactive (): 作用:接收 对象类型的数据作为参数传入 并返回一个 响应式对象 reactive 不能处理简单类型的数据 reactive 使用步骤: 1. 在 <scri 阅读全文
posted @ 2023-10-13 22:10 1stzz1 阅读(89) 评论(0) 推荐(0) 编辑
摘要:组合式 API:一系列函数,有时需要调用这些函数编写组件逻辑。 setup 是组合式 API 的入口,先写 setup,才能往里边写组合式 API 的函数 setup 的执行时机会比 beforeCreate 生命周期钩子还要早,因此 setup 函数中获取不到 this setup 选项的写法:( 阅读全文
posted @ 2023-10-13 21:28 1stzz1 阅读(60) 评论(0) 推荐(0) 编辑
摘要:create-vue 是 Vue 官方新的脚手架工具,底层切换到了 vite(下一代构建工具),为开发提供极速响应 使用 create-vue 创建项目: 1. 前提环境条件: 已安装 16.0 或更高版本的 Node.js(node -v) 2. 创建一个 Vue 应用:npm init vue 阅读全文
posted @ 2023-10-13 17:00 1stzz1 阅读(121) 评论(0) 推荐(0) 编辑
摘要:更容易维护、更快的速度、更小的体积、更优的数据响应式 阅读全文
posted @ 2023-10-13 15:30 1stzz1 阅读(73) 评论(0) 推荐(0) 编辑
摘要:模块拆分: 1. 在 store 文件夹下再新建文件夹 modules,在 modules 下新建 xxx.js 文件: eg:新建 user.js 文件 const state = { userInfo: { name: 'zs', age: 18 }, score: 80 } const mut 阅读全文
posted @ 2023-10-13 13:25 1stzz1 阅读(110) 评论(0) 推荐(0) 编辑
摘要:actions:处理异步操作 需求:一秒钟之后,修改 state 的 count 成 200 说明:mutations 必须是同步的(便于监测数据变化,记录调试) actions 本质上不是直接修改 state 的数据,因为要修改 state 必须要经过 mutations,所以就算想要处理异步,也 阅读全文
posted @ 2023-10-13 11:21 1stzz1 阅读(38) 评论(0) 推荐(0) 编辑
摘要:目标:明确如何给仓库提供数据,如何使用仓库的数据 一、提供数据: State 提供唯一的公共数据源,所有共享的数据都要统一放到 Store 中的 State 中存储。在 state 对象中可以添加我们要共享的数据。 // state : 状态,即数据,类似于 vue 组件中的 data(区别:dat 阅读全文
posted @ 2023-10-12 22:33 1stzz1 阅读(199) 评论(0) 推荐(0) 编辑
摘要:vuex 是一个插件,可以帮我们管理 vue 通用的数据(多组件共享的数据) 应用场景: 1. 某个状态在很多个组件来使用(个人信息) 2. 多个组件共同维护一份数据(购物车) vuex 的优势: 1. 共同维护一份数据,数据集中化管理 2. 响应式变化 3. 操作简洁(vuex 提供了一些辅助函数 阅读全文
posted @ 2023-10-12 15:19 1stzz1 阅读(17) 评论(0) 推荐(0) 编辑
摘要:编程式导航:通过 JS 的方式实现路由跳转 如何实现点击按钮跳转? 一、不传参: 1. 通过 path 路径跳转(简易方便) ① 简写: 按钮的点击事件中写 this.$router.push ( ' /路由路径 ' ) 比如:this.$router.push ( ' /search ' ) ② 阅读全文
posted @ 2023-10-11 21:32 1stzz1 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2023-10-11 16:29 1stzz1 阅读(3) 评论(0) 推荐(0) 编辑
摘要:问题描述:网页打开,url 默认是 / 路径,未匹配到组件时,会出现空白 解决:重定向 → 匹配 path 后,强制跳转 path 路径 语法:{ path : 匹配路径 , redirect : 重定向到的路径 } const router = new VueRouter({ routes: [ 阅读全文
posted @ 2023-10-11 16:26 1stzz1 阅读(101) 评论(0) 推荐(0) 编辑
摘要:vue-router 提供了一个全局组件 router-link(取代 a 标签) router-link 本质还是 a 标签 router-link 功能: ① 能跳转,配置 to 属性指定路径(必须),本质还是 a 标签,to 无需 # ② 能高亮,默认就会提供 高亮类名,可以直接设置高亮样式 阅读全文
posted @ 2023-10-11 14:26 1stzz1 阅读(125) 评论(0) 推荐(0) 编辑
摘要:Vue 中路由:路径 和 组件 的映射关系,根据路由就能知道不同的路径应该匹配渲染哪个组件 VueRouter 作用:修改地址栏路径时,切换显示匹配的组件 VueRouter 的使用步骤: 1. 五个固定步骤: ① 下载 VueRouter 模块到当前工程,版本 3.6.5(Vue2 对应的版本是 阅读全文
posted @ 2023-10-10 21:08 1stzz1 阅读(49) 评论(0) 推荐(0) 编辑
摘要:插槽的作用:让组件内部的一些 结构 支持 自定义 应用场景 eg:将对话框封装成组件,对话框的内容部分不希望写死,希望能使用的时候自定义。 插槽的基本语法: 1. 组件内需要定制的结构部分 改用 <slot> </slot> 占位 2. 使用组件时,<MyDialog></MyDialog> 标签内 阅读全文
posted @ 2023-10-10 17:18 1stzz1 阅读(162) 评论(0) 推荐(0) 编辑
摘要:自定义指令:自己定义的指令,可以封装一些 dom 操作,扩展额外功能 语法: (无论是全局方式定义指令 还是 局部方式定义指令,最终 只要把指令定义完成,页面当中用起来 只需要 eg : <input v-指令名 type = "text" > 。只要一绑上,在当前输入框被插入到页面当中的时候,就会 阅读全文
posted @ 2023-10-09 22:28 1stzz1 阅读(100) 评论(0) 推荐(0) 编辑
摘要:Vue 是异步更新 DOM 的,想要在 dom 更新完成之后做某件事,可以使用 $nextTick $nextTick:等 dom 更新后,才会触发执行此方法里的函数体 语法: this.$nextTick ( () => { // 业务逻辑 }) eg: this.$nextTick ( () = 阅读全文
posted @ 2023-10-09 22:01 1stzz1 阅读(9) 评论(0) 推荐(0) 编辑
摘要:作用:利用 ref 和 $refs 可以用于 获取 dom 元素,或 组件实例 特点: 查找范围:当前组件内(更精确稳定) 语法: ① 获取 dom: 1. 给目标标签添加上 ref 属性 (<div ref = " chartRef "> 我是渲染图表的容器 </div>) 2. 在恰当时机,通过 阅读全文
posted @ 2023-10-09 21:32 1stzz1 阅读(25) 评论(0) 推荐(0) 编辑
摘要:作用:可以实现 子组件 与 父组件数据 的 双向绑定,简化代码 特点:prop 属性名可以自定义,非固定为 value 本质:就是 :属性名 和 @update : 属性名 的合写 应用场景:封装弹窗类的基础组件,visible 属性 true 显示,false 隐藏 eg: 父组件: <BaseD 阅读全文
posted @ 2023-10-09 21:01 1stzz1 阅读(57) 评论(0) 推荐(0) 编辑
摘要:原理:v-model 本质上是一个语法糖。例如应用在输入框上,就是 value 属性 和 input 事件 的合写(如果应用于复选框,就是 checked 属性和 change 事件的合写,下拉菜单是 value 属性和 change 事件的合写) 作用:提供数据的双向绑定 ①数据变,视图跟着变 : 阅读全文
posted @ 2023-10-09 20:15 1stzz1 阅读(268) 评论(0) 推荐(0) 编辑
摘要:共同点:都可以给组件提供数据 不同点: data 的数据是自己的,随便改。 prop 的数据是外部的,不能直接改,要遵循 单向数据流。 单向数据流:父组件的 prop 更新,会单向地向下流动,影响到子组件 阅读全文
posted @ 2023-10-09 18:01 1stzz1 阅读(30) 评论(0) 推荐(0) 编辑
摘要:prop:组件上注册的一些自定义属性 prop 作用:向子组件传递数据 prop 特点:可以传递任意数量、任意类型的 prop props 校验 作用:为组件的 prop 指定验证要求,不符合要求,控制台就会有错误提示 语法:1.类型校验 2.非空校验 3.默认值 4.自定义校验 1. 类型校验: 阅读全文
posted @ 2023-10-09 17:03 1stzz1 阅读(400) 评论(0) 推荐(0) 编辑
摘要:组件通信是指 组件与组件 之间的数据传递。 组件的数据是独立的,无法直接访问其他组件的数据,想用其他组件的数据,需要通过组件通信方案。 组件关系分类:父子关系、非父子关系 组件通信方案: 父子关系:props(父传子) 和 $emit(子传父) 非父子关系:① provide & inject ② 阅读全文
posted @ 2023-10-09 15:21 1stzz1 阅读(28) 评论(0) 推荐(0) 编辑
摘要:一个组件的 data 选项必须是一个函数,可以保证 每个组件实例 维护独立的一份数据对象。每次创建新的组件实例,都会新执行一次 data 函数,得到一个新对象 eg: <script> export default { data () { return { count : 999 } } } </s 阅读全文
posted @ 2023-10-09 14:54 1stzz1 阅读(22) 评论(0) 推荐(0) 编辑
摘要:全局注册:所有组件内都能直接使用。在多个组件范围内使用的通用的组件 就可以定义成 全局组件 步骤:① 创建 .vue 文件(三个组成部分) ② main.js 中进行全局注册 //(import 组件对象 from ' .vue文件路径 ') import HmButton from ' ./com 阅读全文
posted @ 2023-10-09 13:47 1stzz1 阅读(61) 评论(0) 推荐(0) 编辑
摘要:组件注册的两种方式: 1. 局部注册:只能在注册的组件内使用 ① 创建 .vue 文件(三个组成部分) ② 在使用的组件内导入并注册 eg: (import 组件对象 from ' .vue文件路径 ') import HmHeader from ' ./components/HmHeader ' 阅读全文
posted @ 2023-10-08 21:03 1stzz1 阅读(11) 评论(0) 推荐(0) 编辑
摘要:组件化:页面可拆分成一个个组件,每个组件有着独立的结构、样式、行为 组件分类:普通组件、根组件 根组件:整个应用最上层的组件,包裹所有普通小组件 一个根组件 App.vue,包含三个部分 App.vue 文件(单文件组件)的三个组成部分:结构、样式、行为 结构通过 template 标签提供,行为通 阅读全文
posted @ 2023-10-08 19:57 1stzz1 阅读(112) 评论(0) 推荐(0) 编辑
摘要:1.内容: import Vue from 'vue' //导入 Vue 核心包 import App from './App.vue' //导入 App.vue 根组件 Vue.config.productionTip = false //提示当前处于什么环境(生产环境 / 开发环境),fasle 阅读全文
posted @ 2023-10-08 19:24 1stzz1 阅读(238) 评论(0) 推荐(0) 编辑
摘要:打开终端:ctrl + shift + (~`) 启动工程:npm run serve 停止工程:ctrl + c 阅读全文
posted @ 2023-10-08 18:51 1stzz1 阅读(988) 评论(0) 推荐(0) 编辑
摘要:Vue的生命周期:一个Vue实例从 创建 到 销毁 的整个过程 生命周期四个阶段:创建、挂载、更新、销毁 ①创建阶段:初始化工作,进行数据的响应式处理,把普通数据 变成 响应式数据(数据变,视图跟着变) ②挂载阶段:渲染模板。结合数据与模板进行渲染 ③更新阶段:用户可以通过页面上的按钮等修改数据。数 阅读全文
posted @ 2023-10-08 15:59 1stzz1 阅读(19) 评论(0) 推荐(0) 编辑
摘要:1. 作用:给 表单元素 使用,形成 双向数据绑定,可以快速 获取或设置 表单元素内容,v-model会根据 控件类型 的不同自动选取 正确的方法 来更新元素。(常见的表单元素有 input:text输入框、textarea文本域、radio单选框、checkbox复选框、select下拉菜单等等) 阅读全文
posted @ 2023-10-08 12:41 1stzz1 阅读(86) 评论(0) 推荐(0) 编辑
摘要:1. 作用:基于数据循环,多次渲染整个元素(可以遍历 数组、对象、数字 ......) 2. 遍历数组语法:v-for = "(item, index) in 数组名" (item:遍历时的每一项;index:遍历时的下标) 如果不需要下标,则可以简写:v-for = "item in 数组名" e 阅读全文
posted @ 2023-10-07 21:45 1stzz1 阅读(34) 评论(0) 推荐(0) 编辑
摘要:1. 作用:动态设置 html 的标签属性(eg:src、url、title ......) 2. 语法:v-bind : 属性名 = "表达式" 或 : 属性名 = "表达式"(简写形式) 3. 例子: new Vue 的 data 里面定义一个变量 imgUrl : './imgs/10-01. 阅读全文
posted @ 2023-10-07 21:13 1stzz1 阅读(11) 评论(0) 推荐(0) 编辑
摘要:1. v-on 作用:注册事件(注册事件 = 添加监听 + 提供处理逻辑) 2. 语法: ① v-on : 事件名 = "内联语句" eg:<button v-on:click="count++"> 点我加一 </button> ② v-on : 事件名 = "methods中的函数名" 或 v-o 阅读全文
posted @ 2023-10-07 21:01 1stzz1 阅读(26) 评论(0) 推荐(0) 编辑
摘要:v-else 、 v-else-if 作用:都是辅助 v-if 进行判断渲染的。 语法:v-else:后面不需要跟任何表达式,直接表示的是:否则; v-else-if :v-else-if = "表达式" true则渲染 注意:v-else 或 v-else-if 都需要紧挨着 v-if 一起使用 阅读全文
posted @ 2023-10-07 20:20 1stzz1 阅读(33) 评论(0) 推荐(0) 编辑
摘要:v-show : 1.作用:控制元素显示隐藏 2.语法:v-show = "表达式" 表达式值为 true 则显示, false 则隐藏 3.底层原理:切换 css 的 display: none 来控制显示隐藏 4.使用场景:频繁切换显示隐藏的场景 v-if : 1.作用:控制元素显示隐藏(条件渲 阅读全文
posted @ 2023-10-07 19:45 1stzz1 阅读(41) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示