
java
java的基础语法
木子 旭
总结一下自己学到的东西,希望对爱学习的你们能提供一分帮助
展开
-
springboot(3)——通过配置文件更改网页端口号
1.在resources里面的application.properties中更改server.port的值2.网页的端口号被更改为8081原创 2021-05-19 21:29:03 · 541 阅读 · 0 评论 -
springboot(2)——springboot彩蛋,更改spring启动图标
1.在resources下创建banner.txt,springboot会识别它2.在banner.txt文件中写想要的启动图标,运行即可展示3.运行结果原创 2021-05-19 21:20:46 · 188 阅读 · 0 评论 -
springboot(1)——创建第一个springboot程序
1.打开idea新创建一个项目2.选择spring initializr,点击next3.选择需要的参数,点击next,选择项目位置即可4.如果需要依赖,就导入相关依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>5原创 2021-05-19 21:17:49 · 150 阅读 · 0 评论 -
java多线程(1)——thread入门讲解
Process与Thread的关系Process是进程,Thread是线程;在一个操作系统中,也就是一台电脑中,有多个进程,每个运行的程序对应一个进程;一个进程可以并发多个线程;为什么要多线程如果在单线程中中涉及到IO输入和输出的话,cpu就只有等待该io操作后完成后才能继续该线程,这样的话,一个用户的IO操作将会导致程序其他的代码块不能被执行。我们需要使用多线程来同时对多个用户提供服务,给每个用户分配一个线程,如果遇到IO操作导致线程被挂起,其他用户的线程不会受影响。多线程的好处多线程开发原创 2020-11-18 15:41:38 · 517 阅读 · 2 评论 -
java线程(2)——创建的三种方式1.继承Thread类
java线程创建1.继承Thread类2.实现Runnable接口3.实现Callable接口原创 2020-11-19 14:10:47 · 375 阅读 · 0 评论 -
java线程(3)——创建的三种方式2.实现Runnable接口
2.实现Runnable接口实现多线程创建一个类实现Runnable接口,实现这个接口中的run方法;//创建线程方式2:实现Runnable接口。public class TestThread3 implements Runnable{ @Override public void run() { //run方法线程体 for (int i = 0; i < 20; i++) { System.out.println("原创 2020-11-19 16:50:35 · 454 阅读 · 0 评论 -
java线程(4)——使用多个线程操作同一个对象(买票的例子)
买票的例子1. 实现Runnable接口的类public class TestThread4 implements Runnable{ //票数 private int ticket = 10; @Override public void run() { while (true){ if (ticket <= 0){ break; } /原创 2020-11-19 17:39:22 · 753 阅读 · 0 评论 -
java多线程(5)——龟兔赛跑程序
新创一个类public class Race implements Runnable { private static String winner; @Override public void run() { for (int i = 1; i <= 100; i++) { //兔子跑十步睡一下 if (Thread.currentThread().getName().equals("兔子") && i原创 2020-11-19 21:02:25 · 568 阅读 · 0 评论 -
java线程(6)——创建的三种方式3.实现Callable接口
创建类实现Callable接口,实现call 方法//线程创建方式三:实现callable接口/** callable的好处* 1.可以定义返回值* 2.可以抛出异常* */public class TestCallable implements Callable<Boolean> { private String url;//网络图片位置 private String name;//保存的文件名 public TestCallable(String u原创 2020-11-20 17:20:57 · 324 阅读 · 0 评论 -
java多线程(7)——静态代理基础入门
静态代理需要两个对象, 一个是真实对象,另外一个是代理对象,两个对象要实现同一个接口我们用结婚来举例,结婚接口有抽象方法haapMarry,然后真实对象是接口interface Marry{ void happyMarry();}真实对象//真实对象:人class People implements Marry{ @Override public void happyMarry() { System.out.println("真实对象要结婚了");原创 2020-11-23 09:52:19 · 196 阅读 · 0 评论 -
java Lambda表达式讲解
函数式接口只包含一个抽象方法的接口,比如我们的Runnable接口,里面只有一个抽象方法run方法,Runnable接口就是函数式接口Lambda表达式Lambda只适用于函数式接口public class TestLambda { public static void main(String[] args) { //Lamdba表达式 Likeable likeable = ()-> {System.out.println("dafadfadf");}原创 2020-11-23 10:37:41 · 249 阅读 · 0 评论 -
java线程(8)——线程休眠,sleep方法
java线程之sleep方法sleep方法指定当前线程阻塞的毫秒数;sleep存在异常interInterruptedException需要抛出;sleep时间达到后,线程进入就绪状态;sleep可以模拟网络延迟,倒计时;每一个对象都有一把锁,sleep不会释放锁;关于锁的知识,以后会有文章讲到模拟倒计时的java程序public class TestSleep{ public static void main(String[] args) throws Interrupted原创 2020-11-23 11:47:11 · 2033 阅读 · 0 评论 -
java线程(9)——线程状态图,getState方法
线程状态图getState()方法这个方法返回值为String,返回该线程的状态返回值对应的线程状态NEW创建状态RUNNABLE运行状态TIMED_WAITING阻塞状态TERMINATED结束状态注意:当线程处于结束状态后,不能再次启动...原创 2020-11-23 13:47:21 · 740 阅读 · 0 评论 -
java线程(10)——线程礼让,yield方法
线程礼让概念礼让线程,让当前正在执行的线程暂停,但不堵塞将线程从运行状态转为就绪状态让cpu重新调度,礼让不一定成功!看cpu心情实现代码//测试礼让程序//礼让不一定成功,看cpu心情public class TestYield {}class MyYield implements Runnable{ public static void main(String[] args) { MyYield myYield = new MyYield();原创 2020-11-23 13:48:33 · 296 阅读 · 1 评论 -
java线程(11)——线程强制执行,join方法
代码块我们用实例进行讲解//测试join方法public class TestJion implements Runnable{ @Override public void run() { for (int i = 0; i < 1000; i++) { System.out.println("线程vip来了"+i); } } public static void main(String[] args) t原创 2020-11-23 14:57:44 · 279 阅读 · 0 评论 -
java线程(12)——线程的优先级,Priority
线程的优先级范围线程的优先级分为1-10(int类型)线程优先级对执行的影响数值越大,优先级越大,cpu优先调动概率越大,但是不是说优先级大的一定比优先级小的先调度设置优先级和获取优先级的方法//myPriority是一个实现了Runable接口的对象new Thread(myPriority,"t3").setPriority(1);//设置优先级new Thread(myPriority,"t3").setPriority(Thread.MIN_PRIORITY);//设置优先级1new原创 2020-11-23 15:51:03 · 1081 阅读 · 0 评论 -
java线程(13)——守护线程,setDeamon方法
守护线程和用户线程的区别必须要用户线程结束后虚拟机JVM才会停止,但是如果守护线程没结束,JVM照样停止守护线程的优先级比较低守护线程一般用于垃圾回收将线程变成守护线程的方法使用setDaemon方法thread.setDaemon(true);//默认false表示是用户线程,正常的线程都是用户线程实例:上帝守护你public class TestDeamon { public static void main(String[] args) { God god =原创 2020-11-23 16:25:22 · 683 阅读 · 0 评论 -
java线程(14)——synchronized同步方法
synchronized同步方法代码示例//不安全的买票//线程不安全,有负数public class UnsafeBuyTicket { public static void main(String[] args) { BuyTicket station = new BuyTicket(); new Thread(station,"我").start(); new Thread(station,"你").start(); ne原创 2020-11-30 17:17:45 · 147 阅读 · 0 评论 -
java线程(15)——synchronized代码块
我和女朋友同时取钱synchronized代码块使用案例public class UnsafeBank { public static void main(String[] args) { //账户 Account account = new Account(100, "结婚资金"); Drawing you = new Drawing(account, 50, "你"); Drawing girlfriend = new Draw原创 2020-11-30 17:20:00 · 210 阅读 · 0 评论 -
java线程(16)——死锁讲解,白雪公主与灰姑娘抢口红和镜子的案例
1.死锁代码//死锁:多个线程互相抱着对方需要的资源,然后形成僵局public class DeadLock { public static void main(String[] args) { Makeup girl1 = new Makeup(0,"灰姑娘"); Makeup girl2 = new Makeup(1,"白雪公主"); girl1.start(); girl2.start(); }}//口红c原创 2020-12-06 10:29:08 · 347 阅读 · 0 评论 -
java线程(17)——Lock锁,三个线程抢票加上lock锁后变成三个线程排队买票
1.三个线程同时抢票导致线程不安全不安全的代码//测试Lock锁public class TestLock { public static void main(String[] args) { Testlock2 testlock2 = new Testlock2(); new Thread(testlock2).start(); new Thread(testlock2).start(); new Thread(testloc原创 2020-12-06 11:05:11 · 3867 阅读 · 20 评论 -
java线程(18)——管程法,炸鸡生产者与消费者的案例
炸鸡生产者与消费者的代码实现案例//测试:生产者消费者模型-->利用缓冲区解决:管程法//生产者,消费者,产品,缓冲区public class TestPC { public static void main(String[] args) { SynContainer container = new SynContainer(); new Productor(container).start(); new Consumer(contai原创 2020-12-06 15:24:17 · 239 阅读 · 0 评论 -
java线程(19)——信号灯法,电视播放,生产者与消费者的案例
通过标识符来组织消费者与生产者之间的关系:演员观众示例代码内容//测试生产者消费者问题2:信号灯发,标志位解决public class TestPC2 { public static void main(String[] args) { TV tv = new TV(); new Player(tv).start(); new Watcher(tv).start(); }}//生产者:演员class Player extend原创 2020-12-06 16:03:05 · 132 阅读 · 0 评论 -
java线程(20)——Runnable线程池
实现代码public class TestPool { public static void main(String[] args) { //1.创建服务,创建线程池 //newFixedThreadPool 参数为:线程池大小 ExecutorService service = Executors.newFixedThreadPool(10); //执行 service.execute(new MyThread()原创 2020-12-06 16:18:15 · 723 阅读 · 0 评论 -
java注解与反射(1)——@Override,@Deprecated,@SuppressWarnings(““)讲解
先上代码块//测试学习什么是注解@SuppressWarnings("all")public class Test01 extends Object{ //@Override 重写的注解 @Override public String toString(){ return super.toString(); } //@Deprecated 不推荐程序员使用,但是可以使用,或者存在更好的方式 @Deprecated pub原创 2020-12-07 11:24:11 · 407 阅读 · 0 评论 -
java注解与反射(2)——元注解、自定义注解入门,四个基本的元注解,@Target@Retention@Document@Inherited
元注解的作用,什么是元注解元注解对注解进行注解,可以通过下面案例进行理解自己定义一个注解注解和类与接口相似,也是定义出来的,我们可以自定义一个注解public @interface MyAnnotation{}这就是一个简单的自定义注解了,我们可以使用他public class Test02 { @MyAnnotation//使用注解 public void test(){ }}元注解@Targettarget是目标的意思,@Target表示我们的注解可以原创 2020-12-07 15:43:21 · 234 阅读 · 0 评论 -
java注解与反射(3)——自定义注解入门讲解
自定义一个注解//自定义注解public class Test03 { //注解可以显式赋值,如果没有默认值,我们就必须给注解赋值,否则会报红 @MyAnnotation2(name="木子旭") public void test2(){ } @MyAnnotation3("木子旭") public void test3(){ }}@Target({ElementType.TYPE,ElementType.METHOD})@Reten原创 2020-12-07 16:10:12 · 162 阅读 · 0 评论 -
java注解与反射(4)——四种获取class对象的方法,通过class对象获取父类class对象
四种创建class对象的方法先创建三个类,Person,Student,Teacher。其中Student和Teacher继承Person类class Person{ public String name; public Person() { } public Person(String name) { this.name = name; } @Override public String toString() {原创 2020-12-08 09:11:50 · 2010 阅读 · 0 评论 -
java注解与反射(5)——通过class对象获取类的名字,类的属性,类的方法,类的构造器;class的getFields(),getMethods(),getConstructors()方法
创建一个User类class User{ private String name; private int id; private int age; public String publicField; public User() { } public User(String name, int id, int age) { this.name = name; this.id = id; this.原创 2020-12-09 16:56:35 · 3452 阅读 · 0 评论 -
java注解与反射(6)——通过反射来操作对象,newInstance()方法,invoke()方法,setAccessible()方法
先上User类的代码class User{ private String name; private int id; private int age; public String publicField; public User() { } public User(String name, int id, int age) { this.name = name; this.id = id; this原创 2020-12-09 19:49:57 · 921 阅读 · 2 评论 -
java注解与反射(7)——分析性能,普通方式调用与反射调用与关闭检测的反射调用:狂神说笔记
通过代码的方式来检验三种方式调用的效率//分析性能问题public class Test10 { //普通方式调用 public static void test01(){ User user1 = new User(); long startTime =System.currentTimeMillis(); for (int i = 0; i < 1000000000; i++) { user1.getNa原创 2020-12-10 15:08:47 · 213 阅读 · 0 评论 -
java注解与反射(8)——通过反射获取方法的返回值,参数以及其泛型;狂神说笔记
先上代码块先创建两个方法和一个类class User{ private String name; private int id; private int age; public String publicField; public User() { } public User(String name, int id, int age) { this.name = name; this.id = id;原创 2020-12-10 16:04:47 · 2683 阅读 · 2 评论 -
java注解与反射(9)——通过反射获取注解Annotation,注解值,狂神说笔记
1.先创建两个注解,一个作用于类,一个作用于属性//类名的注解@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@interface Tablelixv{ String value();}//属性的注解@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@interface Fieldlixv{ String columnName();原创 2020-12-10 20:04:23 · 893 阅读 · 0 评论 -
jdbc(1)——第一次使用idea连接数据库,在控制台输出数据库表中内容
先导入连接mysql的jar包因为我是用的MySql8.0,所以用的是mysql-connector-java-8.0.17.jar很多视频讲解使用的是MySQL5.0,所以要用mysql-connector-java-5.1.6.jar用错版本对应的jar包会导致程序出错哦导入jar包要记得右键点击,选择add as library,如图:然后我们就可以写代码了我们需要加载com.mysql.cj.jdbc.Driver这个驱动(类,对象),然后jvm就会初始化这个类,我们就可以使用这个原创 2020-12-10 22:09:20 · 4134 阅读 · 3 评论 -
jdbc(2)——之Class.forName(com.mysql.cj.jdbc.Driver)理解
理解Class.forName(Com.mysql.cj.jdbc.Driver)Class.forName("com.mysql.cj.jdbc.Driver");在使用jdbc的时候这行代码必不可少,我们来仔细理解一下这行代码的意义和原理;1.理解com.mysql.cj.jdbc.Drivercom.mysql.cj.jdbc.Driver是Driver驱动所在的位置,这个大家应该没问题;2.理解Class.forName()Class.forName()是一个反射,但是他没有返回一个原创 2020-12-11 09:32:53 · 19452 阅读 · 2 评论 -
jdbc(3)——url内容理解
String url = "jdbc:mysql://localhost:3306/dbhomework?useUnicode=true&characterEncoding=UTF8&useSSL=true&serverTimezone=UTC";mysql的默认端口号:3306oracle的默认端口号:1521url的格式:协议//主机地址:端口号/表名?参数1&参数2&参数3…………...原创 2020-12-11 09:40:05 · 250 阅读 · 0 评论 -
java将String转化为Date类型,将Date类型转化为String类型
将String类型转化为Date类型创建一个SimpleDateFormat使用SimpleDateFormat的parse方法,将yyyy-MM-dd的类型转化成为一个Date类型DateFormat df = new SimpleDateFormat("yyyy-MM-dd")String timestr = "2020-10-1";Date timedate = df.parse(timestr);System.out.println(timedate.getTime());运行结原创 2020-12-23 15:59:24 · 472 阅读 · 0 评论 -
java网络编程(1)——InetAddress类和InetSocketAddress类获取端口和id
1.InetAddress类,有关ip的类1.1 示例代码import java.net.InetAddress;import java.net.InetSocketAddress;import java.net.UnknownHostException;public class study { public static void main(String[] args) throws UnknownHostException { InetAddress inetAddr原创 2021-03-25 20:37:39 · 1492 阅读 · 0 评论 -
java网络编程(2)——通过Socket类建立客服端和服务器的连接,实现TCP客户端向服务端通过IO流发送文字
1.服务端1.1服务端代码package com.cn.lixv;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;import java.nio.Buffer;//服务端public class study1 { public static void main(String[] args){ Serv原创 2021-03-28 09:39:34 · 300 阅读 · 0 评论 -
java网络编程(3)——常用类Socket的常用方法
1.构造方法Socket();//不含参构造方法Socket(InetAddress address,int port);//通过ip和端口号构造一个Socket类//还有一些,不知道怎么用,之后有用到的话再补充2.其他方法connect(new InetSocketAddress(host,8000));//通过这个方法将一个Socket类与一台服务器的某一个端口号产生连接getInetAddress();//返回服务端的ip地址getPort();//获取服务端的端口号getLoca原创 2021-03-28 10:25:42 · 794 阅读 · 0 评论