
Java基础知识
随时记录自己所学的java知识。
~故事的小黄花~
梦想这东西和经典一样,它不会随着时间而褪色,反而更显珍贵。——《老男孩》
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JDBC简单处理sql事务
import cn.itcast.utils.JDBCUtils;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;/** * 事务操作 */public class JDBCDemo10 { public static void main(String[] args) { Connection conn = null;原创 2020-09-02 21:55:28 · 198 阅读 · 1 评论 -
通过JDBC来实现用户名密码检验
import cn.itcast.utils.JDBCUtils;import java.sql.*;import java.util.Scanner;/** * 练习: * * 需求: * 1. 通过键盘录入用户名和密码 * 2. 判断用户是否登录成功 */public class JDBCDemo9 { public static void main(String[] args) { //1.键盘录入,接受用户名和密码 Sca原创 2020-09-02 21:40:03 · 959 阅读 · 0 评论 -
手写工具包简化JDBC部分步骤
先来演示一下正常的JDBC所需要的代码:import cn.itcast.domain.Emp;import cn.itcast.utils.JDBCUtils;import java.sql.*;import java.util.ArrayList;import java.util.List;/** * * 定义一个方法,查询emp表的数据将其封装为对象,然后装载集合,返回。 */public class JDBCDemo8 { public static void main(原创 2020-09-02 21:15:33 · 152 阅读 · 0 评论 -
JDBC基本语法
import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;/** * JDBC快速入门 */public class JdbcDemo1 { public static void main(String[] args) throws Exception { //1. 导入驱动jar包 //2.注册驱动 Class.forName(原创 2020-09-02 20:38:20 · 753 阅读 · 0 评论 -
idea中导入别人的项目出现类图标有红色的字母J且不能运行的解决方法
你是否在导入别人的项目时类的图标变成如下的样子,而且项目不能运行?有的话就感觉往下看吧,亲试有效:出现这个情况的原因:直接导入别人的项目,其实这些类在本地还没有被编译解决方法如下:先打开project structure点击modules,找到+Add Content Root下面的内容,把所有的都×掉接着不要关掉,重新找到导入的项目的位置,重新导入一遍,这样的话idea就会在重新导入的过程中编译导入的类,片刻过后原本带有红色J的类图标就变成正常可运行的类了,感觉试一下吧!!!..原创 2020-09-02 15:37:27 · 2611 阅读 · 2 评论 -
创建多线程的4种方式
多线程的4中创建方式:/** * 方式一:继承于Thread类 * 1. 创建一个继承于Thread类的子类 * 2. 重写Thread类的run() --> 将此线程执行的操作声明在run()中 * 3. 创建Thread类的子类的对象 * 4. 通过此对象调用start() * 例子:遍历100以内的所有的偶数 * *///1. 创建一个继承于Thread类的子类class MyThread extends Thread { //2. 重写Thread类的run()原创 2020-08-16 22:14:37 · 140 阅读 · 0 评论 -
用生产者和消费者的例子了解多线程的通信
/** * 线程通信的应用:经典例题:生产者/消费者问题 * * 需求: * 生产者(Productor)将产品交给店员(Clerk),而消费者(Customer)从店员处取走产品, * 店员一次只能持有固定数量的产品(比如:20),如果生产者试图生产更多的产品,店员 * 会叫生产者停一下,如果店中有空位放产品了再通知生产者继续生产;如果店中没有产品 * 了,店员会告诉消费者等一下,如果店中有产品了再通知消费者来取走产品。 * * 分析: * 1. 是否是多线程问题?是,生产者线程,消费原创 2020-08-16 22:07:21 · 118 阅读 · 0 评论 -
实现多线程依次交替执行
class Number implements Runnable{ private int number = 1; private Object obj = new Object(); @Override public void run(){ while(true){ //一下出现一、二、三、四、五、六s synchronized(obj){ /* 一、 假设第一次原创 2020-08-16 20:41:36 · 573 阅读 · 0 评论 -
Lock锁与synchronized锁
import java.util.concurrent.locks.ReentrantLock;/** * Lock锁 --- JDK5.0新增 * * 1. synchronized 与 Lock的异同? * 相同:二者都可以解决线程安全问题 * 不同:synchronized机制在执行完相应的同步代码以后, * 自动的释放同步监视器 * Lock需要手动的启动同步(lock()), * 同时结束同步也需要手动的实现(unlock()) * * 2.优先使用顺原创 2020-08-16 19:55:51 · 211 阅读 · 0 评论 -
对死锁的一番浅显易懂理解
/** * 演示线程的死锁问题 * * 1.死锁的理解:不同的线程分别占用对方需要的同步资源不放弃, * 都在等待对方放弃自己需要的同步资源,就形成了线程的死锁 * * 2.说明: * 1)出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续 * 2)我们使用同步时,要避免出现死锁。 */public class ThreadTest {/*对该程序的详细过程分析:假设有两个线程:线程1和线程2线程1进入第一个Thread代码,拿到s1这个锁,然后完成原创 2020-08-16 18:13:57 · 135 阅读 · 0 评论 -
解决多线程安全问题:采取同步代码块和同步方法
针对Runnable接口出现的多线程安全问题的解决方法:/** * 需求:创建三个窗口卖票,总票数为100张.使用实现Runnable接口的方式 * * 1.问题:卖票过程中,出现了重票、错票 -->出现了线程的安全问题 * 2.问题出现的原因:当某个线程操作车票的过程中,尚未操作完成时,其他线程参与进来,也操作车票。 * 3.如何解决:当一个线程a在操作ticket的时候,其他线程不能参与进来。直到线程a操作完ticket时,其他线程才可以开始操作ticket。这种情况即使线程a出现了阻原创 2020-08-16 16:44:16 · 280 阅读 · 0 评论 -
Java中自定义异常并try-catch的一道练习题
需求:编写应用程序EcmDef.java,接收控制台的两个参数,要求不能输入负数,计算两数相除。对数据类型不一致(NumberFormatException)、缺少输入参数(ArrayIndexOutOfBoundsException)、分母为零(ArithmeticException)及输入负数(EcDef 自定义的异常)进行异常处理。import java.util.Scanner;public class EcmDef { public static void main(Strin原创 2020-08-14 21:22:45 · 1030 阅读 · 0 评论 -
Java8的接口知识点
public class SubClassTest { public static void main(String[] args) { SubClass s = new SubClass(); //知识点1:接口中定义的静态方法,只能通过接口来调用。 CompareA.method1(); /*这两种是不能通过编译的: s.method1(); SubClass.method1(); */ /* 知识点2:通过实现类的对象,可以调用接口中的默原创 2020-08-14 15:46:44 · 159 阅读 · 0 评论 -
用抽象类简单实现一个发工资系统
首先,创建5个类:Employee:员工类,其中有earnings()抽象方法HourlyEmployee:按每小时来计算工资(不固定工资)SalariedEmployee:按月份来计算工资(固定工资)MyDate:员工出生日期类PayrollSystem:测试类需求:编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月出现Employee对象的生日,则将该雇员的工资增加100元。代码实现://员工类public abstract class Employee { p原创 2020-08-13 16:27:04 · 1596 阅读 · 0 评论 -
Java中用二维数组输出杨辉三角
创建数组的两种方式:①数据类型[ ][ ] 数组名 = new 数据类型[行数][列数],如int[ ][ ] a = new int[2][3];这样就创立了2行三列的二维数组②数据类型[ ][ ] 数组名 = {{第一行初值},{第二行初值},{…},{第n+1行初值}},如:int[ ][ ] a = {{1,2,3},{4,5,6},{7,8,9}};这样也创建了三行三列的二维数组接下来就来用二维数组来输出杨辉三角:import java.io.FileInputStream;impo原创 2020-08-12 20:45:25 · 2649 阅读 · 0 评论 -
单例模式的两种实现方式:恶汉式和懒汉式
单例模式:采取一定的方法保证在整个软件系统中,对某个类只存在一个对象实例恶汉式—>缺点:对象加载时间过长 优点:是线程安全的懒汉式—>缺点:是线程不安全的 优点:延迟对象的创建恶汉式:public class Bank { //私有化类的构造器 private Bank(){} //内部创建类的对象,同时设置为静态 private static Bank instance = new Bank(); //提供公共的静态方法,返回类的对象原创 2020-08-12 18:39:23 · 519 阅读 · 0 评论 -
自定义设计泛型类
设计一个泛型类,实现增删改查操作:import java.util.*;public class DAO<T> { private Map<String,T> map = new HashMap<String,T>(); //保存 T 类型的对象到 Map 成员变量中 public void save(String id,T entity){ map.put(id,entity); } //从 map 中获取原创 2020-08-12 14:37:31 · 211 阅读 · 0 评论 -
计算一个姓名文件中出现的所有姓的个数
有一个name.txt,里面存储了很多人的姓名,且每个人的姓与名都以空格来隔开,试计算出所有的姓的个数:假设的一个名单:张 三李 四王 五李 宁胡 歌张 学友郭 富城刘 德华黎 明张 国荣梅 艳芳谭 咏麟王 杰何 炅汪 涵董 卿姚 明杨 幂刘 诗诗代码实现:import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOExceptio原创 2020-08-11 14:47:44 · 838 阅读 · 0 评论 -
Properties处理属性文件
首先,在项目下建立一个.properties文件,命名为jdbc:最后,jdbc.properties文件就产生了:然后,进入该文件写入数据:注意:该文件类型存储形式类似于map的存储,且key和value都是String类型,等号是分隔符,且分隔符前后都不要加空格,接着开始读取文件:import java.io.FileInputStream;import java.io.IOException;import java.util.Properties;class Test{原创 2020-08-11 11:21:57 · 213 阅读 · 0 评论 -
TreeMap中按自定义方式排序
import java.util.*;class Test{ public static void main(String[] args) { Person p1 = new Person("a",17); Person p2 = new Person("b",18); Person p3 = new Person("c",20); Person p4 = new Person("d",17); TreeMap ma原创 2020-08-10 22:05:33 · 1362 阅读 · 1 评论 -
HashMap中遍历数据的两种方式
import java.util.*;class Test{ public static void main(String[] args) { Map map = new HashMap(); map.put("a",111); map.put("b",222); map.put("c",333); //方式一:用entrySet来获得键值对集合 Set entrySet = map.entrySet原创 2020-08-10 21:29:01 · 319 阅读 · 0 评论 -
关于HashSet的一道经典面试题
写一个Person类,有name和id两个属性,并且实现了hashCode和equals方法,请写出测试类中代码的输出结果:import java.util.HashSet;class Test{ public static void main(String[] args) { HashSet set = new HashSet(); Person p1 = new Person(1001, "AA"); Person p2 = new Pers原创 2020-08-10 14:14:34 · 351 阅读 · 0 评论 -
在一个整型List集合中快速去掉相同数字的简单方法
import java.util.ArrayList;import java.util.HashSet;import java.util.List;/**巧妙地通过HashSet()的哈希值来筛掉相等的整数:*/class Test{ public static void main(String[] args){ List list = new ArrayList(); list.add(new Integer(1)); list.add原创 2020-08-09 21:25:48 · 337 阅读 · 0 评论 -
TreeSet按指定形式排序
假设有一个员工类,其中有姓名、年龄、生日等属性,首先,按照姓名排序:import java.util.Comparator;import java.util.Iterator;import java.util.TreeSet;//测试类class Test{ public static void main(String[] args){ TreeSet set = new TreeSet(); //测试数据随便改的 Employee e1原创 2020-08-09 17:07:17 · 435 阅读 · 0 评论 -
ArrayList中remove()方法的一道面试题
区分remove()的删除格式,选择是想删除角标所在的元素还是删除指定值所在的元素:import java.util.ArrayList;import java.util.List;class Test{ public static void main(String[] args){ List list = new ArrayList(); list.add(1); list.add(2); list.add(3);原创 2020-08-08 14:41:53 · 267 阅读 · 0 评论 -
集合中通过实现迭代器接口遍历元素
import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;class Test{ public static void main(String[] args){ Collection coll = new ArrayList(); coll.add(123); coll.add(456); coll.add(new Perso原创 2020-08-07 18:11:05 · 104 阅读 · 0 评论 -
Java中对象流的序列化与反序列化
import java.io.*;/** * 所谓的序列化,就是把类的信息通过二进制形式存放在本地磁盘或发送到别的网络节点 * 来长久保存类信息;反序列化就是对存在在本地磁盘或网络节点上的序列化文件进行读取, * 从而恢复类的具体信息、属性等,这样就达到了传输、接收类的作用。 */class Test{ public static void main(String[] args){ ObjectOutputStream oos =null; Object原创 2020-08-02 18:54:59 · 155 阅读 · 0 评论 -
Java转换流的代码实现
import java.io.*;/** * 转换流的使用: * 1、转换流:属于字符流 * InputStreamReader:将一个字节的输入流转换为字符的输入流 * OutputStreamWriter:将一个字符的输出流转换为字节的输出流 * 2、作用:提供字节流与字符流之间的转换 * 3、解码:字节、字节数组--->字符数组、字符串 * 编码:字符数组、字符串--->字节、字节数组 */class Test{ //功能实现:用UTF-8格式读入字符文件原创 2020-08-02 10:24:49 · 202 阅读 · 0 评论 -
Java统计一个字符文件中所有字符的出现个数
import java.io.*;import java.util.HashMap;import java.util.Map;import java.util.Set;class Test{ public static void main(String[] args){ BufferedReader br =null; BufferedWriter bw =null; try{ Map<Character,Int原创 2020-08-01 19:42:23 · 869 阅读 · 0 评论 -
Java中对图片进行简单加密和解密
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/*加密的原理就是让文件的二进制数都与一个指定的数异或解密的原理是:m^n^n=m,就是一个数与另外一个数连续异或两次就得到本身 */class Test{ public static void main(String[] args){ //加密:将原创 2020-08-01 16:10:29 · 3215 阅读 · 0 评论 -
java中使用缓冲流加快字符文件的复制
import java.io.*;class Test{ public static void main(String[] args){ BufferedReader br=null; BufferedWriter bw =null; try{ br=new BufferedReader(new FileReader(new File("file.txt"))); bw=new BufferedWri原创 2020-08-01 15:38:50 · 236 阅读 · 0 评论 -
java中IO流实现图片复制
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;class Test{ public static void main(String[] args) { FileInputStream fis=null; FileOutputStream fos=null; try {原创 2020-08-01 14:54:33 · 2109 阅读 · 0 评论 -
java中FileReader与FileWriter同时使用实现文件复制
import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;class Test{ public static void main(String[] args) { FileReader fr =null; FileWriter fw=null; try { //要读取数据的文件路径原创 2020-07-31 21:32:17 · 273 阅读 · 0 评论 -
java中FileReader读取字符文件的代码实现
import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;class Test{ /* 为什么不选择throws IOException而是选择try-catch来应对异常呢? 因为流有开一定要关,如果在中间出现了异常感觉抛出,但是这是流又没关, 就会导导致这个流一直被占用,那么此时想到的就是try-cat原创 2020-07-31 18:37:20 · 855 阅读 · 0 评论 -
Java中File的相关操作
import java.io.File;import java.io.IOException;class Test{ public static void main(String[] args) throws IOException { /*注意要有两个'\',不然在java语言中容易造成被理解为转义字符, 在window中就用\\,在Linux中就用一个/, java语言为了方便程序员编码,就用File.separator来代替分隔符, 最后java虚拟原创 2020-07-30 23:14:19 · 201 阅读 · 0 评论 -
Java通过TCP发送和接收图片
TCP客户端package tcp;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputStream;import java.net.InetAddress;import java.net.Socket;public class TcpClient { public static void main(String[] args) {原创 2020-07-28 16:16:09 · 1622 阅读 · 0 评论 -
TCP互发消息的代码实现
TCP客户端:package tcp;import java.io.IOException;import java.io.OutputStream;import java.net.InetAddress;import java.net.Socket;public class TcpClient { public static void main(String[] args) { Socket socket =null; OutputStream os原创 2020-07-27 22:43:30 · 341 阅读 · 0 评论 -
UDP与TCP的区别
TCP:使用TCP协议前,须先建立TCP连接,形成传输数据通道;传输前,采用“三次握手”方式,点对点通信,是可靠的;TCP协议进行通信的两个应用进程:客户端、服务端;在连接中可进行大数据量的传输;传输完毕,需释放已建立的链接,效率低。UDP:将数据、源、目的封装成数据包,不需要建立连接;每个数据包的大小限制在64K内;发送不管对方是否准备好,接收方收到也不确认,是不可靠的;可以广播发送;发送数据结束时无需释放资源,开销小,速度快。...原创 2020-07-27 20:47:06 · 91 阅读 · 0 评论 -
Java程序从开发到最终运行经历了什么?
1、在硬盘的某个位置新建一个×××.java文件2、使用记事本或者其它文本编辑器打开×××.java文件3、在×××.java文件中编写符合Java语法规则的源代码4、保存5、使用编译器(jdk安装后自带的javac命令)对×××.java进行编译6、如果×××.java文件中编写的源代码是符合语法规则的,编译会通过,如果×××.java文件不符合语法规则,那么编译器会报错,报错后不会生成×××.class文件,只有编译通过了才会生成,并且一个Java源文件是可以生成多个class文件的7.原创 2020-07-27 11:50:32 · 236 阅读 · 0 评论 -
Java中UDP互发消息的代码实现
UDP的发送端package udp;/**UDP发送端*/import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetSocketAddress;public class UdpClient { public static void main(String[] args) throws IOException {原创 2020-07-26 23:17:46 · 403 阅读 · 0 评论