![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java基础学习
文章平均质量分 66
javaSE基础知识
qwy715229258163
这个作者很懒,什么都没留下…
展开
-
1-java运算符试题
【代码】1-java运算符试题。原创 2024-03-28 22:21:19 · 210 阅读 · 0 评论 -
Java错误:JDBC错误,如何解决和避免
通常情况下,要使用数据库JDBC驱动程序,您需要将其添加到项目的类路径中。首先,检查网络连接是否正常,确保服务器处于运行状态并且您的Java客户端连接到正确的服务器。总之,遇到JDBC错误并不是可怕的,只要掌握了如何识别问题并解决问题的技巧,就可以让Java程序更加健壮和可靠。避免JDBC错误的最好方法是编写高质量的代码。连接池是一种有效的方法,可以避免创建和删除数据库连接的开销。解决方法:处理此错误的关键是仔细阅读错误消息。解决方法:下载相应的JDBC驱动程序到您的计算机,并将其添加到项目的类路径中。原创 2024-03-14 22:23:11 · 419 阅读 · 0 评论 -
函数式接口与Lambda表达式
1. Lambda表达式的简介1.1. Lambda表达式的概念Lambda表达式,是java8的一个新特性,也是java8中最值得学习的新特性之一。Lambda表达式,从本质来讲,是一个匿名函数。可以使用这个匿名函数,实现接口中的方法,对接口进行非常简洁的实现,从而简化代码。1.2. Lambda表达式的使用场景...原创 2021-03-31 16:50:37 · 549 阅读 · 2 评论 -
java设置模式之代理模式
所谓的代理模式就是指由一个代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其他相关业务的处理。就好像一个公司的老板需要开会一样,老板(真实主题)来主持会议,老板的秘书(代理主题)负责开会前的准备性工作以及会后的相关事宜的处理。无论是老板的会议主持,还是秘书为会议的准备或会后事宜处理,共同的目的都是为了开会。静态代理实现package com.qwy;/** * @author qwy * @create 2021-03-30 22:06 **/interface Meet原创 2021-03-30 23:25:55 · 120 阅读 · 1 评论 -
反射
关于反射我们首先看一个实例:package com.qwy.reflection1;/** * @author qwy * @create 2021-03-30 11:26 **///定义类class Person{}public class TestReflection { public static void main(String[] args) { Person p= new Person(); String name = p.getCl原创 2021-03-30 17:22:01 · 125 阅读 · 2 评论 -
java--Socket编程
网络编程中需要考虑的几个问题:1.如何准确定位到网络中的某一台主机,定位到主机后如何找到对应程序对于如何找到在网络上找到一台主机,我们可以使用IP(或域名),然后通过端口号找到对应的应用。2.如何在找到主机后怎么可靠高效地进行数据传输对于这个问题,需要提供网络通信协议:TCP/IP参考模型(应用层、传输层、网络层、物理+数据链路层)InetAddress类常用方法1.public static InetAddress getByName(String host):获取InetAddress的实力原创 2021-03-27 16:58:48 · 140 阅读 · 1 评论 -
LinkedList源码分析
1.创建对象:List list= new LinkedList()底层实现: public LinkedList() { }2.数据添加list.add("");public boolean add(E e) { linkLast(e); return true; }继续跟踪linkLast(e): void linkLast(E e) { final Node<E> l = last; fina原创 2021-03-25 00:56:47 · 95 阅读 · 1 评论 -
ArrayList源码分析
JDK1.7ArrayList底层分析1.创建List list= new ArrayList();1)层调用无参构造方法: public ArrayList() { this(10); }2)this(10)调用有参构造: public ArrayList(int initialCapacity) { super(); if (initialCapacity < 0) throw new IllegalArgu原创 2021-03-25 00:15:58 · 122 阅读 · 2 评论 -
57--比较器之Comparable与Comparator
在数组的操作中,排序是比较常见的一种操作,而java中数据类型的分为基本数据类型和引用数据类型,基本数据类型可以使用关系运算符进行比较。那么如何比较引用数据类型的大小呢?此时就必须使用java提供的比较器了。java提供了两个比较器:Comparable和Comparator。Comparable比较器查看源码:package java.lang;import java.util.*;public interface Comparable<T> { public int co原创 2021-03-23 22:43:51 · 86 阅读 · 2 评论 -
56--枚举类型
JDK1.5之前需要自定义枚举类实例:package com.qwy.enumtest;/** * 自定义枚举类型 * @author qwy * @create 2021-03-20 14:56 **/class Gender { //声明Gender对象的属性private final 修饰 private final String name; private final String value; //私有化类的构造器,并给对象属性赋值 pr原创 2021-03-22 17:15:39 · 96 阅读 · 0 评论 -
55--JDK8新添常用日期时间API
新时间日期API1.java.time – 包含值对象的基础包2.java.time.chrono – 提供对不同的日历系统的访问3.java.time.format – 格式化和解析时间和日期4.java.time.temporal – 包括底层框架和扩展特性5.java.time.zone – 包含时区支持的类常用类LocalDate、LocalTime、LocalDateTimeLocalDate、LocalTime、LocalDateTime 类是其中较重要的几个类,它们的实例 是不可原创 2021-03-19 18:20:09 · 101 阅读 · 0 评论 -
54--常用日期操作类
Date类实例:得到当前系统日期public class DateDemo { public static void main(String[] args) { Date date= new Date(); System.out.println("当前日期:"+date); }}运行结果:当前日期:Wed Sep 16 22:28:16 CST 2015从运行结果来看,能够得到系统当前的时间,但是对于此日期的格式不符合我们平常看到的格式。而且现在的时间不能准确的精确到毫秒,要想按原创 2021-03-19 17:58:25 · 90 阅读 · 0 评论 -
53--StringBuffer与StringBuilder
String类一旦声明则不可改变,如果要改变,则改变的肯定是String的引用地址,如果一个字符串要被经常的改变,此时就必须使用StringBuffer类,在String类中可以通过“+”进行字符串的连接,但是StringBuffer中却只能使用append()方法进行字符串的连接。StringBuffer与StringBuilder常用的方法实例操作举例实例操作一:字符串的连接操作public class StringBufferAppendDemo { public static void原创 2021-03-19 17:48:11 · 92 阅读 · 1 评论 -
52--字符串
之前一直使用String声明一个字符串,不难发现String类定义时单词的首字母大写,所以String本身也是一个类。实例化String对象的两种方式:1.String name=”小明”;2.String name = new String(“小明”);String的内容的比较实例:使用“==”比较字符串的内容package com.qwy.datetime;/** * @author qwy * @create 2021-03-19 16:36 **/public class原创 2021-03-19 16:48:09 · 173 阅读 · 3 评论 -
51--多线程(十)
新增线程创建方式新增方式一:实现Callable接口与使用Runnable相比, Callable功能更强大些1.相比run()方法,可以有返回值2.方法可以抛出异常3.支持泛型的返回值4.需要借助FutureTask类,比如获取返回结果Future接口1.可以对具体Runnable、Callable任务的执行结果进行取消、查询是否完成、获取结果等。2.FutrueTask是Futrue接口的唯一的实现类 3. FutureTask 同时实现了Runnable, Future接口。它既原创 2021-03-17 23:46:33 · 137 阅读 · 2 评论 -
50--多线程(九)
线程的通信常用方法介绍:1.wait():令当前线程挂起并放弃CPU、同步资源并等待,使别的线程可访问并修改共享资源,而当 前线程排队等候其他线程调用notify()或notifyAll()方法唤醒,唤醒后等待重新获得对监视器的所有 权后才能继续执行1)在当前线程中调用方法: 对象名.wait()2)使当前线程进入等待(某对象)状态 ,直到另一线程对该对象发出 notify (或notifyAll) 为止。3)调用方法的必要条件:当前线程必须具有对该对象的监控权(加锁)4)调用此方法后,当前线程原创 2021-03-17 23:04:34 · 81 阅读 · 2 评论 -
49--多线程(八)
Lock(锁)1.从JDK 5.0开始,Java提供了更强大的线程同步机制——通过显式定义同 步锁对象来实现同步。同步锁使用Lock对象充当。2.java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的 工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象 加锁,线程开始访问共享资源之前应先获得Lock对象。3.ReentrantLock 类实现了 Lock ,它拥有与 synchronized 相同的并发性和 内存语义,在实现线程安全的控制原创 2021-03-17 21:31:24 · 121 阅读 · 4 评论 -
48--多线程(七)
线程安全问题多个线程执行的不确定性引起执行结果的不稳定 ,在项目运行过程中会有多个线程同时操作同一资源的情况,此时就会引发同步问题。这里以前面说的卖票为例:假设这里有10张票要出售,分别交给三个窗口分别销售:实例:继承Thread类方式package com.qwy;class Window extends Thread{ private static int ticket= 10; @Override public void run() { while(true){ //原创 2021-03-17 00:47:26 · 123 阅读 · 3 评论 -
47--多线程(六)
线程的生命周期(线程的状态)JDK中用Thread.State类定义了线程的几种状态 :public enum State{ NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; }要想实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类 及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五原创 2021-03-16 23:27:36 · 76 阅读 · 0 评论 -
46--多线程(五)
线程中常用的方法(续)线程的调度:1.CUP时间片抢占式:高优先级的线程抢占CPU2. Java的调度方法1)同优先级线程组成先进先出队列(先到先服务),使用时间片策略2)对高优先级,使用优先调度的抢占式策略线程的优先级:1.最低优先级public final static int MIN_PRIORITY = 1;2.中等优先级,默认public final static int NORM_PRIORITY = 5;3.最高优先级public final static int M原创 2021-03-16 00:06:57 · 75 阅读 · 2 评论 -
45--多线程(四)
线程中常用的方法(续)判断线程是否启动:isAlive()实例:package com.qwy5;class MyThread extends Thread { @Override public void run() { for (int i = 0; i <= 5; i++) { System.out.println(Thread.currentThread().getName() + "--" + i); } }}public class TestThreadIs原创 2021-03-15 23:46:13 · 94 阅读 · 0 评论 -
44--多线程(三)
线程中常用的方法(Thread类)1.void start(): 启动线程,并执行对象的run()方法2.run(): 线程在被调度时执行的操作3.String getName(): 返回线程的名称4.void setName(String name):设置该线程名称5.static Thread currentThread(): 返回当前线程。在Thread子类中就 是this,通常用于主线程和Runnable实现类6.static void yield():线程让步1)暂停当前正原创 2021-03-15 23:25:41 · 83 阅读 · 2 评论 -
43--多线程(二)
继承方式和实现方式的联系与区别假设这里有10张票要出售,分别交给三个窗口分别销售:实例:继承方式package com.qwy;class Window extends Thread{ private int ticket= 10; @Override public void run() { while(true){ //假设剩余票的数量为票号 if(ticket>0){ System.out.println(Thread.currentThread().原创 2021-03-15 22:41:03 · 100 阅读 · 1 评论 -
42--多线程(一)
基本概念:程序、进程、线程程序(program):是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。进程(process):是程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程。它有自身的产生、存在和消亡的过程(生命周期)。如:运行中的微信、QQ、office等。程序是静态的,进程是动态的。进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域。线程(Thread):进程可以进一步细化为线程,是一个程序内部的一条执行路径。如果一个进程同一时间并行执行原创 2021-03-15 22:09:12 · 105 阅读 · 2 评论 -
41--异常处理机制
认识异常:异常就是在程序运行过程中所发生的不正常事件,如:找不到文件,运算错误(除数为零)、数组越界、加载一个不存在的类、对null对象进行操作、类型转换错误等。异常会中断程序的运行。首先从一个实例了解下异常:实例:编写一个程序实现根据输入的除数和被除数,计算出商,最后输出"感谢你使用本程序"public class Test { /**异常代码演示 * @param args */ public static void main(String[] args) { // TODO A原创 2021-03-13 15:44:30 · 127 阅读 · 1 评论 -
40--内部类
内部类(内部定义普通类,抽象类,接口的统称),是一种嵌套关系的结构关系,即在一个类的内部除了属性、方法、构造器、代码块之外的另一种结构。根据内部类定义的位置,内部类又分为成员内部类(静态内部类、非静态内部类)和局部内部类(方法内部,代码块内,构造器内)。实例:package com.qwy;class Outer{ public Outer() { //局部内部类:构造方法中 class Inner3{ String name; } } { //局部内部类:代码块中内部原创 2021-03-12 23:58:04 · 81 阅读 · 1 评论 -
39--接口二
Java 8中,你可以为接口添加静态方法和默认方法。静态方法:使用 static 关键字修饰。可以通过接口直接调用静态方法,并执行 其方法体。我们经常在相互一起使用的类中使用静态方法。默认方法:默认方法使用 default 关键字修饰。可以通过实现类对象来调用。实例:package com.qwy;public interface A { //定义静态方法 public static void m1(){ System.out.println("A.m1()"); } //定义默认方原创 2021-03-12 18:53:00 · 124 阅读 · 1 评论 -
38--接口一
开发中有时必须从几个类中派生出一个子类,继承它们所有的属性和方 法。但是,Java不支持多重继承。接口,就可以得到多重继承的效果。解决了java类单继承的局限问题。接口的本质是契约,标准,规范。制定好后大家都 要遵守。接口是由全局常量和公共的抽象方法组成的(JDK1.7以及之前的版本)。接口和类是并列关系,或者可以理解为一种特殊的类。从本质上讲, 接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义 (JDK7.0及之前),而没有变量和方法的实现。接口的定义格式:public interfa原创 2021-03-12 18:11:18 · 77 阅读 · 1 评论 -
37--抽象类
用abstract关键字来修饰一个类,这个类叫做抽象类。 用abstract来修饰一个方法,该方法叫做抽象方法。 抽象方法:只有方法的声明,没有方法的实现。以分号结束。当一个类的方法被abstract修饰时,该方法称为抽象方法。抽象方法所在类必须定义在抽象类中。该方法不会有具体的实现,如果要实现必须在该类的子类中重写该方法进行实现,抽象类的定义格式:abstract class 抽象类名称{属性;访问权限 返回值类型 方法名称(参数){[return 返回值];}访问权限 abstract原创 2021-03-12 08:48:22 · 133 阅读 · 0 评论 -
36--final关键字
在Java中声明类、变量和方法时,可使用关键字final来修饰,表示“最终的”。final 用来修饰一个类:此类不能被其他类所继承,所以此类决不能是抽象类。实例1:final class A{ }//错误: A 被final修饰 ,因此不能有子类/*class B extends A{ }*/final 用来修饰方法:表明此方法不可以被重写实例:class C{ public final void show(){ }}class D extends C{ //错原创 2021-03-11 19:55:52 · 79 阅读 · 2 评论 -
35--代码块
代码块(或初始化块)的作用,代码块不能使用其他修饰符修饰除了static。根据是否有static修饰,代码块又分为静态代码块(使用static修饰)和非静态代码块(不使用static修饰)。静态代码块:1.内部可以有输出语句2.随着类的加载而执行,而且只执行一次3.作用:初始化类的信息4.如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行5.静态代码块的执行要优先于非静态代码块的执行6.静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构非静态代码块:1.内部可以有输出原创 2021-03-11 18:55:43 · 65 阅读 · 0 评论 -
34--单利模式设置模式
单例设计模式,就是采取一定的方法保证在整个的软件系统中,对 某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。 如果我们要让类在一个虚拟机中只能产生一个对象。单利模式是如何设计:1.我们首先必须将类的构 造器的访问权限设置为private,这样,就不能用new操作符在类的外部产生 类的对象了。2.在类内部仍可以产生该类的对象。因为在类的外部开始还无 法得到类的对象,3.调用该类的某个静态方法以返回类内部创建的对象, 静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象原创 2021-03-11 17:27:46 · 97 阅读 · 0 评论 -
33--static关键字
当我们在给一个类进行实例化时,在内存中会分别开辟栈内存和堆内存,在堆内存中保存对象的属性,每个对象都有自己的属性,如果希望这些属性被所有的对象共享,则就必须将其声明为static属性,而且一个属性使用了static关键字声明之后,可以直接使用类名进行调用。如果一个类中的方法由类名直接调用,该方法也可以使用static声明。static修饰属性:实例1:看一种需要属性共享的场景package com.qwy.demo;public class StaticDemo { public static原创 2021-03-11 16:41:34 · 68 阅读 · 0 评论 -
32--Object类
Object类是所有Java类的根父类 。默认情况下:一个类如果不继承任何类,则默认继承Object类。实例1:以下两种代码等价package com.qwy;public class Users { //属性 //方法}package com.qwy;public class Users extends Object{ //属性 //方法}Object类中的equals()方法:package com.qwy;class Users{ private Strin原创 2021-03-11 15:24:20 · 86 阅读 · 1 评论 -
31--面向对象特征之三--多态性
对象多态性的体现形式:方法的重载与重写对象的多态性:父类的引用指向子类的对象对象的多态性的类型:1.向上转型:子类对象→父类对象2.向下转型:父类对象→子类对象对于向上转型,程序会自动完成,而对于向下转型必须明确指定要转换为的类型。实例1:定义父类package com.qwy.bean;public class Person { public void sayHello(){ System.out.println("Person.sayHello()");; }}实例原创 2021-03-11 00:22:19 · 94 阅读 · 2 评论 -
30--子类对象的实例化过程
在继承的操作中,对于子类的实例化也是有要求的,即子类对象在实例化之前必须首先调用父类中的构造方法,然后再调用子类自己的构造方法。实例1:定义父类package com.qwy.bean;public class Person { private String name; private int age; //手动添加无参构造方法 public Person() { System.out.println("我是父类的"+"Person.Person()方法"); } public Str原创 2021-03-10 22:43:34 · 369 阅读 · 0 评论 -
28--super关键字
在Java类中使用super来调用父类中的指定操作:1.super可用于访问父类中定义的属性2.super可用于调用父类中定义的成员方法3.super可用于在子类构造器中调用父类的构造器调用父类的方法或属性:实例1:调用父类的方法package com.qwy;class Person { protected String name = "张三"; protected int age; public String getInfo() { return "Name: " + nam原创 2021-03-10 21:09:23 · 71 阅读 · 0 评论 -
28--方法的重写(override/overwrite)
在子类中可以根据需要对从父类中继承来的方法进行改造,也称 为方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。子类重写的方法必须和父类被重写的方法具有相同的方法名称、参数列表子类重写的方法的返回值类型不能大于父类被重写的方法的返回值类型子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限注意:子类不能重写父类中声明为private权限的方法子类方法抛出的异常不能大于父类被重写方法的异常子类与父类中同名同参数的方法必须同时声明为非static的(即为重写),或者同时声明为 s原创 2021-03-06 14:51:18 · 191 阅读 · 3 评论 -
27--面向对象的特征之二--继承
继承的基本概念继承的功能可以直接把父类中的操作拿到子类中使用,当然子类也可以定义自己的属性和方法。为什么要有继承:实例1:package com.qwy.bean;public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } pu原创 2021-03-05 22:21:35 · 79 阅读 · 2 评论 -
26--构造方法(构造器)
构造方法概述在面向对象程序中构造方法的主要主要作用就是为类的属性初始化。从之前学习的对象中可知,要产生一个类的对象,就必须使用一下格式:类名称 对象名称 = new 类名称()在程序中只要出现”()”就表示调用了方法,那么这个方法实际上就是表示要调用构造方法,构造方法可以视为一种特殊的方法,它的定义与普通方法类似。语法:class 类名称{访问权限 类名称(类型 参数1,类型 参数2,…){程序语句;…//构造方法没有返回值}}构造方法的特点:构造方法的名称必须与类名称一致原创 2021-03-05 21:10:32 · 119 阅读 · 0 评论