
JavaSE学习笔记
文章平均质量分 70
Java学习笔记
IT技术进化所
每日精进1%,与百万开发者共攀技术珠峰
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
反射的应用---动态代理
先通过一段代码回顾一下静态代理:/** * 静态代理举例 *///接口interface ClothFactory{ void produceCloth(); //生产服装}//代理类class ProxyClothFactory implements ClothFactory{ private ClothFactory factory; //用被代理类对象进行实例化 public ProxyClothFactory(ClothFactory factor原创 2022-05-17 18:48:23 · 260 阅读 · 0 评论 -
Java反射---获取和调用运行时类的结构
原创 2022-05-16 21:51:23 · 431 阅读 · 0 评论 -
Java反射机制(一)
Java反射机制1,Java反射机制概述2,反射的源头---Class类2.1,四种方式获取Class类的实例2.2,Class扩展3,关于类的加载器4,创建运行时类的对象5,代码为例体会反射的动态性1,Java反射机制概述动态语言和静态语言:代码理解反射:①先创建一个自定义的Person类用于演示:public class Person { private String name; public int age; public Person() { }原创 2022-05-09 12:51:42 · 455 阅读 · 0 评论 -
Java网络编程基础知识
Java网络编程基础1,Java网络编程概述2,通信要素一:IP地址和端口号2.1,IP2.2,端口号2.3,关于InetAddress类的说明:3,通信要素二:网络协议3.1,TCP网络编程3.2,UDP网络编程4,URL编程4.1,URL常用方法测试4.2,实现实现下载服务器端资源1,Java网络编程概述网络编程的目的:直接或间接地通过网络协议与其它计算机实现数据交换,进行通讯。网络编程中有两个主要的问题:问题1,如何准确地定位网络上一台或多台主机;定位主机上的特定的应用问题2,原创 2022-05-02 17:17:28 · 1563 阅读 · 0 评论 -
Java IO流中的处理流
4,处理流之一:缓冲流的使用缓冲流(内部提供了一个缓冲区)能有效提高文件读写效率。但要注意缓冲流不能直接作用于文件上,直接作用于文件上的是前面介绍的节点流。处理流是套接在节点流的基础进行处理的流。缓冲流有:处理字节:BufferedInputStream、BufferedOutPutStream处理字符:BufferedReader、BufferedWriter4.1,缓冲流实现非文本文件的复制使用BufferedInputStream、BufferedOutPutStreampack原创 2022-04-26 11:37:34 · 1411 阅读 · 0 评论 -
Java IO流体系及节点流的使用
IO流1,Java IO流引入2,IO流的分类3,IO流中节点流的使用3.1,FileReader读入数据操作3.2,FileWriter写出数据操作3.3,使用FileReader和FileWriter实现文本文件的复制3.4,使用FileInputStream和FileOutputStream读写非文本文件1,Java IO流引入2,IO流的分类节点流是直接作用于文件的流,处理流是在节点流的基础上又包了一层,如下图所示:注:蓝底背景的流为常用的流,需要掌握:总结:①上图中Input原创 2022-04-23 20:09:07 · 507 阅读 · 0 评论 -
Java IO流中的File类及其常用方法
File类的使用如何创建File类的实例原创 2022-04-16 21:32:09 · 473 阅读 · 0 评论 -
Java 泛型
泛型的引入不使用泛型时存在的问题:package com.atguigu.java;import org.junit.Test;import java.util.ArrayList;/** * 泛型:jdk5.0新增特性 */public class GenericTest { //在集合中使用泛型之前 @Test public void test1(){ ArrayList list=new ArrayList(); /*原创 2022-04-15 21:33:02 · 1317 阅读 · 0 评论 -
Java集合(三) Map接口
Map接口Map主要实现类:HashMap、TreeMap、Hashtable、Properties、LinkedHashMap。其中LinkedHashMap是HashMap的一个子类。Properties是HashTable的一个子类。类似上期介绍的Set实现类中。HashMap是Map接口的主要实现类,效率高,线程不安全。HashMap可以存储null的key和value。HashTable线程安全,效率低;不能存储null的key和value。LinkedHashSet是Hash的一个子原创 2022-04-23 20:15:51 · 1706 阅读 · 0 评论 -
Java集合(二) Collection的两个子接口
4,Collection子接口之一:List接口面试题:比较ArrayList、LinKedList、Vector的异同:同:三个类都实现了List接口,存储有序、可重复的数据高频面试题:HsahMap底层实现原理是什么?(分jdk)原创 2022-04-10 20:41:02 · 1662 阅读 · 0 评论 -
Java 集合(一)
集合1,集合的引入2,集合的两种体系简介3, 集合体系一:Collection接口3.1,Collection接口中的常用方法:3.2,Iterator接口方式遍历集合元素3.2.1,Iterator接口遍历集合元素3.2.2,Iterator接口的remove()方法3.3,foreach循环方式遍历集合或数组元素1,集合的引入集合和数组都是对多个数据进行存储操作的结构,都是Java容器。说明:此时的存储,主要是指内存层面的存储,不涉及持久化的存储(如硬盘)2,集合的两种体系简介其中:一,C原创 2022-04-09 09:16:35 · 463 阅读 · 0 评论 -
Java 枚举类
枚举类的使用如何定义枚举类:方式一:jdk5.0前,自定义枚举类;package com.atguigu.java;/** * 枚举类的使用: * 1,类的对象只有有限个、确定个。我们称此类为枚举类 * 2,当需要定义一组常量时,强烈建议使用枚举类。 此处常量指的是对象造好之后,不可重新赋值 * 3,如果枚举类中只有一个对象,则可以作为单例模式的实现方式 * 如下是自定义枚举类方式: */public class SeasonTest { public static void原创 2022-04-06 20:27:47 · 596 阅读 · 0 评论 -
Java 比较器 Comparable和Comparator
Java比较器java中的对象,正常情况下,只能进行==、!=比较,不可使用>、<,但在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象大小,如何实现?可以使用Comparable、Comparator两个接口中的任何一个来实现。①对于String类使用Comparable接口(自然排序):package com.atguigu.java;import org.junit.Test;import java.util.Arrays;/** * Comparabl原创 2022-04-06 10:27:18 · 881 阅读 · 0 评论 -
Java 日期和时间相关的API
日期和时间APIjdk8.0之前:package com.atguigu.java;import org.junit.Test;/** * //System类中的currentTimeMillis() */public class DateTimeTest { @Test public void test1(){ long time =System.currentTimeMillis(); //返回当前时间与1970年1月1日0时0分0秒原创 2022-04-05 22:20:48 · 1030 阅读 · 0 评论 -
Java中的String类、StringBuffer类以及StringBuilder类
StringBuuffer类String、StringBuffer、StringBuilder三者的异同:相同点:都与字符串相关,底层都使用char[ ]型数组存储。不同点:①String:不可变的字符序列②StringBuffer:可变的字符序列,线程安全的,效率偏低③StringBuilder(jdk5.0新增):可变的字符序列,线程不安全,效率较高源码分析:对于String: String str=new String();相当于new char[0]; String原创 2022-04-04 09:08:24 · 193 阅读 · 0 评论 -
关于Java中的String类
String类原创 2022-04-04 22:45:16 · 537 阅读 · 0 评论 -
Java多线程 线程通信问题
原创 2022-04-02 19:16:53 · 381 阅读 · 0 评论 -
Java 多线程 解决线程安全问题的三种线程同步机制
先引入线程的生命周期线程同步问题再引入问题:模拟火车站售票程序,开启三个窗口售票。package com.atguigu.java;/** * 使用Runnable接口的方式来实现 */class window1 implements Runnable{ private int ticket=100; //注意此处没有加static,但三个线程共用同一个ticket @Override public void run() { while(tr原创 2022-04-01 16:29:51 · 771 阅读 · 0 评论 -
Java 多线程的四种创建方式
多线程的优点:何时需要多线程:多线程的创建方式一:继承于Thread1,创建一个继承于Thread类的子类2,重写Thread类中的run()方法—将此线程执行的操作声明在run方法中3,创建Thread类的子类的对象4,通过此对象调用start()方法其中start()方法的作用:①启动当前线程②调用当前线程的run方法注意:对于一个线程来说start()只能start一次,如果让已经start的线程去执行。会报IllegalThreadStateException异常。示例原创 2022-03-30 13:55:10 · 1336 阅读 · 0 评论 -
Java面向对象 内部类
内部类内部类的定义及分类:package com.atguigu.java3;/* * 类的内部成员之内部类 * 1,Java中允许将一个类A声明在另一个类B中,则类A即为内部类,类B称为外部类 * 2,内部类的分类:成员内部类、局部内部类(方法内、代码块内、构造器内) */public class InnerClassTest {}class Person{ //成员内部类 static class Dog{ //静态成员内部类 } class Bird{ //非原创 2022-03-27 22:51:53 · 637 阅读 · 0 评论 -
由浅入深搞定Java接口数据类型
接口首先要清楚接口和类是两个并列结构。举例:代码理解:package com.atguigu.java2;/* * 接口的使用: * 1,接口使用interface来定义 * 2,Java中接口和类是两个并列结构 * 3,如何定义接口:定义接口中的成员 * 3.1,JDK7及以前:只能定义全局常量和抽象方法 * 全局常量:public static final的,书写时可以省略 * 抽象方法:public abstract的 * 3.2,JDK8:原创 2022-03-27 00:47:05 · 1487 阅读 · 0 评论 -
Java面向对象 抽象类与抽象方法
抽象类package com.atguigu.exer;/* * abstract关键字的使用 * abstract用来修饰类--->抽象类 * 抽象类不能实例化 * 抽象类中一定由构造器,便于子类实例化时调用 * 开发中,都会提供抽象类的子类,让子类对象实例化,完成相关操作 * abstract用来修饰方法--->抽象方法 * 抽象方法,只有方法声明,没有方法体 * 包含抽象方法的类一定是个抽象类。但抽象类中可以没有抽象方法 * 若子原创 2022-03-25 11:53:39 · 623 阅读 · 0 评论 -
Java面向对象 第七天
设计模式①单例设计模式情形一:package com.atguigu.java;/* * 单例设计模式----->饿汉式 * 一上来就造好对象的成为饿汉式 */public class Singleton { public static void main(String[] args) { //直接通过“类.方法”调用静态方法 Bank bank1 = Bank.getInstance(); Bank bank2=Bank.getInstance(); S原创 2022-03-25 08:26:59 · 139 阅读 · 0 评论 -
Java面向对象 static关键字
static关键字static(译为静态的)可以用来修饰:属性、方法、代码块、内部类 。(注意:static不能修饰构造器)1,static修饰属性:package com.atguigu.java;/* * 使用static修饰的属性称为静态变量或静态属性或类变量。 * 属性,按是否使用static修饰,又分为:静态属性和非静态属性(非静态属性又叫实例变量) * 实例变量:我们创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性。 * 当修改其中一个对象的非静原创 2022-03-27 10:02:54 · 177 阅读 · 0 评论 -
Java面向对象 包装类
先引入单元测试方法的使用:包装类Java提供了八种基本数据类型对应的包装类,使基本数据类型的变量具有类的特征。基本类型、包装类与String类间的转换:①基本数据类型转换为包装类package com.atguigu.java;import org.junit.Test;public class WrapperTest { //基本数据类型-->包装类:调用包装类的构造器 @Test public void test1(){ int num1=10;// System原创 2022-03-22 21:37:20 · 1079 阅读 · 0 评论 -
详解Object类下的equals()方法和toString()方法
object类的使用所以:Object类中的功能(属性、方法)就具有通用性。== 运算符与equals()方法的区别(可作为面试题):① ==运算符回顾:"=="比较的是基本数据类型时,比较两变量保存的数据是否相等。(类型未必要相等);比较引用数据类型时,比较地址值是否相同。代码理解:package com.atguigu.java;//==public class EqualsTest { public static void main(String[] args) { int i=原创 2022-03-22 10:29:51 · 920 阅读 · 0 评论 -
Java面向对象 第六天
多态性1,多态性可以理解为多种事物的多种形态2,何为多态性:对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)3,多态的使用:虚拟方法调用:引入对象的多态性之后,我们在编译期只能调用父类中声明的方法,但在运行(执行)期实际运行的是子类重写父类的方法“即编译看左边,运行看右边”。4,多态性的使用前提:①有类的继承关系 ;②要有方法的重写。5,对象的多态性只适用于方法,不适用于属性(编译运行都看左边)。代码理解:package com.atguig原创 2022-03-20 21:29:44 · 552 阅读 · 0 评论 -
Java面向对象 第五天
面向对象的特征:继承性extends:延展、扩展继承的格式:class A extends B{ }A为子类、B为父类。一旦子类A继承父类B之后,子类A中就获取了父类B中声明的所有属性和方法。注意:①特别的,对于父类中声明的私有的属性或方法,子类继承以后,仍然认为获取了父类中私有的结构,只是因为封装性的影响,使得子类不能直接调用父类的结构而已。(封装性指的是能不能调用的问题,继承性是指能不能获取的问题)②子类继承父类之后,还可以声明自己特有的方法和属性,实现功能的扩展。代码体现:①Perso原创 2022-03-20 10:10:27 · 2907 阅读 · 0 评论 -
Java面先对象 第四天
this关键字package com.atguigu.java2;/* *this关键字的使用: *1,this可以用来修饰:属性、方法、构造器 *2,this修饰属性和方法: * this理解为:当前对象(类的方法中)或当前正在创建的对象(构造器中) * 2.1,在类的方法(构造器)中,我们可以使用“this.属性”或“this.方法”的方式,调用当前对象(当前正在创建)的属性或方法;通常我们会省略this. * 但特殊情况向下,如果方法(构造器)的形参和类的属性同名时(区分不开)原创 2022-03-17 11:32:54 · 483 阅读 · 0 评论 -
Java面向对象 第三天
递归方法(一个方法体内调用它自身)练习一:package com.atguigu.java1;/*递归方法的使用:计算前n项和、乘积 * 前n项和,等于第n项加上前(n-1)项和,乘积同理 */public class RecursionTest { public static void main(String[] args) { RecursionTest test=new RecursionTest(); int value1=test.getSum(100); System原创 2022-03-15 22:08:26 · 708 阅读 · 0 评论 -
Java 面向对象 第二天
.原创 2022-03-15 11:14:42 · 404 阅读 · 0 评论 -
Java面向对象 第一天
面向对象和面向过程:比如:我们要完成 “人把大象装进冰箱”。1.面向过程:(强调的是功能行为,以函数为最小单位,考虑怎么做。)①把冰箱门打开②抬起大象,装进冰箱③把冰箱门关闭2.面向对象:(强调具备了功能的对象,以类/对象为最小单位,考虑谁做。)①(类)人{打开(冰箱){冰箱.开门(); //调用开冰箱门功能}抬起(大象){ //调用大象大象.进入(冰箱);}关闭(冰箱){冰箱.关门(); }}冰箱{开门(){细节}关门(){细节}}.原创 2022-03-13 11:26:26 · 407 阅读 · 0 评论 -
Java数组 排序算法和常见异常
任取待排序序列中的某个元素作为标准(也称为支点、界点,一般取第一个元素),通过一次划分,将待排元素分为左右两个子序列,左子序列元素的排序码均小于基准元素的排序码,右子序列的排序码则大于或等于基准元素的排序码,然后分别对两个子序列继续进行划分,直至每一个序列只有一个元素为止。最后得到的序列伸是有序序列。十大内部排序算法(与使用哪种语言实现无关)通常来说,排序的目的是快速查找。原创 2022-03-12 10:10:05 · 984 阅读 · 0 评论 -
Java 数组相关的一些算法笔试题
多维数组的使用:练习1:package com.atguigu.exer;public class ArrayExer1 { public static void main(String[] args) { //具体问题具体分析,静态初始化只需一行搞定 int[][] arr =new int[][]{{3,5,8},{12,9},{7,0,6,4}}; int sum=0; //记录总和 for(int i=0;i<arr.length;i++){ for(int原创 2022-03-11 21:36:28 · 675 阅读 · 0 评论 -
Java 数组基础知识
数组是有序排列的,数组的长度就是元素的个数。一维数组的使用原创 2022-03-11 11:57:09 · 287 阅读 · 0 评论 -
Java语言实现输出一百以内的所有质数的算法
输出100以内的所有质数(有难度,作为面试题出现过)**方案:/*100以内所有质数的输出注:质数又叫素数,指在大于1的自然数中,只能被1和它本身整除的自然数,最小的质数是2。方法:一个数n,从2开始到(n-1)为止,n都不能被这段数中的某个自然数整除,n即为质数。*/class PrimeNumberTest{ public static void main(String[] args) { boolean isFlag=true; //标识i是否被j除尽,一旦除尽,修改其值原创 2022-03-08 12:48:16 · 5335 阅读 · 3 评论 -
Java程序流程控制 循环结构
循环结构/*for循环的使用:一,循环结构四个要素①初始化条件②循环条件 -->是Boolean类型③循环体④迭代条件二,for循环的结构for(①;②;④){ ③}执行过程:①-->②-->③-->④-->②-->③-->④-。。。->②*/class ForTest{ public static void main(String[] args) { for (System.out.print('a');num&原创 2022-03-08 11:48:51 · 144 阅读 · 0 评论 -
Java程序流程控制 分支结构之switch-case语句
switch-case说明:①根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应的case结构中,调用其执行语句。②调用其执行语句后,仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或switch-case结构末尾结束。③break,可以使用在switch-case结构中,表示一旦执行此关键字,就跳出switch-case结构。④switch结构中的表达式,只能是如下6种数据类型之一:byte 、short、char、int、枚举类型(jdk5原创 2022-03-07 12:27:21 · 1121 阅读 · 0 评论 -
Java程序流程控制 分支结构之if语句
分支结构一,if-else:练习://定义三个int型变量并赋值,使用if-else获取这三个数中较大数的实现class GetMax { public static void main(String[] args) { int num1=10,num2=21,num3=-21; int max=0; if(num1>=num2&&num1>=num3){ max=num1; } if(num2>=num1&&n.原创 2022-03-07 09:27:05 · 269 阅读 · 0 评论 -
Java基础__运算符
运算符分类:算术运算符:①除(/):class AriTest { public static void main(String[] args) { int num1=12; int num2=5; int result1=num1/num2; double result2=num1/num2; double result3=num1/num2+0.0; double result4=num1/(num2+0.0); double result5=(double)原创 2022-03-02 16:40:07 · 218 阅读 · 0 评论