![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java基础
文章平均质量分 75
RB_VER
这个作者很懒,什么都没留下…
展开
-
java输入输出
package test;import java.util.Scanner;public class TestInOut { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //输入字符串 String s = scanner.nextLine(); System.out.println(s);原创 2021-07-25 18:39:36 · 82 阅读 · 0 评论 -
Java中的网络编程
连接到服务器用Java连接到服务器下面程序与使用telnet工具是相同的,即连接到某个端口并打印出它所找到的信息import java.io.IOException;import java.net.InetAddress;import java.net.Socket;import java.nio.charset.StandardCharsets;import java.util.Scanner;public class SocketTest { public static vo原创 2021-03-15 19:54:41 · 130 阅读 · 0 评论 -
Java中的注解
为什么要引入注解?使用【注解】之前(甚至在使用之后),【XML】被广泛的应用于描述元数据,得到各大框架的青睐,它以松耦合的方式完成了框架中几乎所有的配置,但是随着项目越来越庞大,【XML】的内容也越来越复杂,一些应用开发人员和架构师发现维护成本变高。他们希望使用一些和代码紧耦合的东西,于是就有人提出来一种标记式高耦合的配置方式【注解】。方法上可以进行注解,类上也可以注解,字段属性上也可以注解,反正几乎需要配置的地方都可以进行注解。下面我们通过一个例子来理解这两者的区别。假如你想为应用设置很多的常量或参转载 2021-03-15 08:53:20 · 130 阅读 · 0 评论 -
JSON简介
概述JSON(JavaScript Object Notation JavaScript 对象表示法)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,易于人的编写和阅读,也易于机器解析。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。结构组成JSON由两种结构组成:键值对的无序集合——对象(或者叫记录、结构、字典、哈转载 2021-03-14 17:03:26 · 95 阅读 · 0 评论 -
Java几种常用JSON库性能比较
本文通过JMH(即Java Microbenchmark Harness,基于方法层面的基准测试,精度可以达到微秒级)来测试一下Java中几种常见的JSON解析库的性能。 每次都在网上看到别人说什么某某库性能是如何如何的好,碾压其他的库。但是百闻不如一见,只有自己亲手测试过的才是最值得相信的。JSON不管是在Web开发还是服务器开发中是相当常见的数据传输格式,同时JSON是与开发语言无关,轻量级,一开始是JavaScript的,但是后面比较流传,几乎所有语言都有相应的使用API。一般情况我们对于JSON转载 2021-03-14 17:02:37 · 238 阅读 · 0 评论 -
XML简介
什么是 XMLXML 是可扩展标记语言(EXtensible Markup Language)。XML 是一种很像HTML的标记语言。XML 的设计宗旨是传输数据,而不是显示数据。XML 标签没有被预定义。您需要自行定义标签。XML 被设计为具有自我描述性。XML 是 W3C 的推荐标准。XML 用途XML 应用于 Web 开发的许多方面,常用于简化数据的存储和传输。存放数据栗子<?xml version="1.0" encoding="UTF-8"?><pers转载 2021-03-14 15:29:03 · 116 阅读 · 0 评论 -
Java中的文件操作
Path和Files类封装了在用户机器上处理文件系统所需的所有功能。Path接口和Files类是在Java 7中新添加进来的,它们用起来比自JDK 1.0以来就一直使用的File类要方便得多。PathPath(路径)表示的是一个目录名序列,其后还可以跟着一个文件名。路径中的第一个部件可以是根部件,例如/或C:\,而允许访问的根部件取决于文件系统。以根部件开始的路径是绝对路径;否则,就是相对路径。例如,我们要分别创建一个绝对路径和一个相对路径:Path absolute = Paths.get("/ho原创 2021-03-14 10:26:38 · 208 阅读 · 0 评论 -
Java中的输入/输出流
#输入 / 输出流在Java API中,可以从其中读入一个字节序列的对象称作输入流,而可以向其中写入一个字节序列的对象称作输出流。这些字节序列的来源地和目的地可以是文件,而且通常都是文件,但是也可以是网络链接,甚至是内存块。抽象类InputStream和OutputStream构成了输入/输出(I/O)类层次结构的基础。因为面向字节的流不便于处理以Unicode形式存储的信息,所以从抽象类Reader和Writer中继承出来了一个专门用于处理Unicode字符的单独的类层次结构。这些类拥有的读入和写出操原创 2021-03-13 10:45:59 · 753 阅读 · 0 评论 -
什么是面向对象
面向对象(OOP)概述从我们开始接触Java这门语言后,就有人告诉我们这是一门面向对象的语言。说的最多的是new个对象,其实并不知道什么是对象。以为对象就是一个class(类),并不觉得有什么特殊。直到很久之后,面试官问到什么是OOP,嘴巴都是一个大O,OOP?WTF?那人厌恶的说到就是面向对象编程。我说:Java就是面向对象,就是一切以对象为载体,去编程,去面对。面试官: go out ! now!滚回来的我赶紧看看什么是OOP,Object Oriented Programming,原来就是面向对转载 2021-03-12 08:42:06 · 97 阅读 · 0 评论 -
Java中的并发
并发多线程程序在更低一层扩展了多任务的概念:单个程序看起来在同时完成多个任务。每个任务在一个线程中执行,线程是控制线程的简称。如果一个程序可以同时运行多个线程,则称这个程序是多线程的(multithreaded)。多进程与多线程的本质区别在于每个进程拥有自己的一整套变量,而线程则共享数据。共享变量使线程之间的通信比进程之间的通信更有效、更容易。此外,在有些操作系统中,与进程相比较,线程更“轻量级”,创建、撤销一个线程比启动新进程的开销要小得多。线程状态线程可以有如下6种状态:New(新建)Ru原创 2021-03-09 10:54:25 · 272 阅读 · 0 评论 -
Java中的集合
Java集合框架集合接口与实现分离与现代的数据结构类库的常见做法一样,Java集合类库也将接口与实现分离。public interface List<E> extends Collection<E> { int size(); boolean isEmpty(); boolean contains(Object o); Iterator<E> iterator(); Object[] toArray(); boolean add(E e); boole原创 2021-03-06 17:02:12 · 606 阅读 · 0 评论 -
Java中的泛型
泛型类和泛型方法有类型参数,这使得它们可以准确地描述用特定类型实例化时会发生什么。在有泛型类之前,程序员必须使用Object编写适用于多种类型的代码。这很繁琐,也很不安全。泛型程序设计(generic programming)意味着编写的代码可以对多种不同类型的对象重用。定义简单的泛型类泛型类(generic class)就是有一个或多个类型变量的类。以简单的Pair类作为例子:public class Pair<T> { private T first; private T sec原创 2021-03-05 09:09:09 · 146 阅读 · 1 评论 -
Java中的日志
日志每个程序员都很熟悉在有问题的代码中插入一些System.out.println方法调用来帮助观察程序的行为。当然,一旦发现问题的根源,就要将这些print语句从代码中删去。如果接下来又出现问题,就需要再插入几个调用System.out.println方法的语句。日志API就是为了解决这个问题而设计的。下面是这个API的主要优点:可以很容易地取消全部日志记录,或者仅仅取消某个级别以下的日志,而且可以很容易地再次打开日志开关。可以很简单地禁止日志记录,因此,将这些日志代码留在程序中的开销很小。日志原创 2021-03-04 10:50:35 · 116 阅读 · 1 评论 -
Java中的断言
断言断言机制允许在测试期间向代码中插入一些检查,而在生产代码中会自动删除这些检查。Java语言引入了关键字assert。这个关键字有两种形式:assert condition;或assert condition : expression;这两个语句都会计算条件,如果结果为false,则抛出一个AssertionError异常。在第二个语句中,表达式将传入AssertionError对象的构造器,并转换成一个消息字符串。在Java语言中,给出了3种处理系统错误的机制:抛出一个异常。日志原创 2021-03-04 08:18:51 · 136 阅读 · 1 评论 -
Java中的异常
处理错误如果在Java程序运行期间出现了一个错误。用户期望在出现错误时,程序能够采取合理的行为。如果由于出现错误而使得某些操作没有完成,程序应该:返回到一种安全状态,并能够让用户执行其他的命令;或者允许用户保存所有工作的结果,并以妥善的方式终止程序。要做到这些并不是一件很容易的事情。其原因是检测(或者甚至引发)错误条件的代码通常与那些能够让数据恢复到安全状态或者能够保存用户工作并妥善退出程序的代码相距很远。异常处理的任务就是将控制权从产生错误的地方转移到能够处理这种情况的错误处理器。为了能够原创 2021-03-03 16:42:13 · 231 阅读 · 0 评论 -
Java中的代理
利用代理可以在运行时创建实现了一组给定接口的新类。只有在编译时期无法确定需要实现哪个接口时才有必要使用代理。何时使用代理假设你想构造一个类的对象,这个类实现了一个或多个接口,但是在编译时你可能并不知道这些接口到底是什么。代理机制是一种更好的解决方案。代理类可以在运行时创建全新的类。这样的代理类能够实现你指定的接口。具体地,代理类包含以下方法:指定接口所需要的全部方法。Object类的全部方法,例如,toString、equals等。不过,不能在运行时为这些方法定义新代码。实际上,必须提供一个调原创 2021-03-02 15:49:23 · 117 阅读 · 0 评论 -
Java中的内部类
内部类(inner class)是定义在另一个类中的类。使用内部类的两个主要原因:内部类可以对同一个包中的其他类隐藏。内部类方法可以访问定义这个类的作用域中的数据,包括原本私有的数据。使用内部类访问对象状态一个内部类方法可以访问自身的数据字段,也可以访问创建它的外围类对象的数据字段。为此,内部类的对象总有一个隐式引用,指向创建它的外部类对象,这个引用在内部类的定义是不可见的。外围类的引用在内部类构造器中设置。编译器会修改所有的内部类构造器,添加一个对应外围类引用的参数。内部类的特殊语法规则原创 2021-03-02 09:37:14 · 150 阅读 · 0 评论 -
Java中的lambda表达式
为什么引入lambda表达式lambda表达式是一个可传递的代码块,可以在以后执行一次或多次。考虑如何用一个定制比较器完成排序。如果想按长度而不是默认的字典顺序对字符串进行排序,可以向sort方法传入一个Comparator对象:class LengthComparator implements Comparator<String> { public int compare(String first, String second) { return first.length() -原创 2021-03-01 19:30:55 · 202 阅读 · 0 评论 -
Java中的接口
接口用来描述类应该做什么,而不指定它们具体应该如何做。一个类可以实现一个或多个接口。接口的概念在Java中,接口不是类,而是对希望符合这个接口的类的一组需求。我们经常听到服务提供商这样说:“如果你的类符合某个特定接口,我就会履行这项服务。”Arrays类中的sort方法承诺可以对对象数组进行排序,但要求满足下面这个条件:对象所属的类必须实现Comparable接口。为了让类实现一个接口,通常需要完成下面两个步骤:将类声明为实现给定的接口。对接口中的所有方法提供定义。接口的属性不能使用ne原创 2021-03-01 14:39:13 · 109 阅读 · 1 评论 -
Java中的反射
反射反射库(reflection library)提供了一个丰富且精巧的工具集,可以用来编写能够动态操纵Java代码的程序。能够分析类能力的程序称为反射(reflective)。Class类在程序运行期间,Java运行时系统始终为所有对象维护一个运行时类型标识 。这个信息会跟踪每个对象所属的类。虚拟机利用运行时类型信息选择要执行的正确的方法。保存这些信息的类名为Class。获得Class对象的三种方式:Object类中的getClass方法将会返回一个Class类型的实例。Employee原创 2021-02-28 15:55:16 · 180 阅读 · 2 评论 -
Java中的枚举类
public enum Size {SMALL,MEDIUM,LARGE,EXTRA_LARGE}这个声明定义的类型是一个类,它刚好有4个实例,不可能构造新的对象。在比较两个枚举类型的值时,并不需要调用equals,直接使用“==”就可以了。如果需要的话,可以为枚举类型增加构造器、方法和字段:public enum Size { SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL"); private String abbreviatio原创 2021-02-27 16:27:46 · 92 阅读 · 0 评论 -
Java中所有类的超类Object
Object类是Java中所有类的始祖,在Java中每个类都扩展了Object。Object类型的变量可以使用Object类型的变量引用任何类型的对象:Object obj = new Employee("Q",35000);当然,Object类型的变量只能用于作为各种值的一个泛型容器。要想对其中的内容进行具体的操作,还需要清楚对象的原始类型,并进行相应的强制类型转换:Employee e = (Employee) obj;在Java中,只有基本类型不是对象,例如,数值、字符和布尔类型的值都原创 2021-02-27 15:23:28 · 523 阅读 · 0 评论 -
Java中的4个访问控制修饰符权限
Java中的4个访问控制修饰符:仅对本类可见——private。对外部完全可见——public。对本包和所有子类可见——protected。对本包可见——默认,不需要修饰符。原创 2021-02-27 09:45:10 · 259 阅读 · 0 评论 -
Java中的方法调用过程
假设调用x.f(args),隐式参数x声明为类C的一个对象。下面是调用过程的详细描述:编译器查看对象的声明类型和方法名。需要注意的是:有可能存在多个名字为f但参数类型不一样的方法。例如,可能存在方法f(int)和方法f(String)。编译器将会一一列举C类中所有名为f的方法和其超类中所有名为f而且可访问的方法(超类的私有方法不可访问)。接下来,编译器要确定方法调用中提供的参数类型。如果在所有名为f的方法中存在一个与所提供参数类型完全匹配的方法,就选择这个方法。这个过程称为重载解析 (overload原创 2021-02-27 09:05:17 · 384 阅读 · 0 评论 -
Java总是采用按值调用
参数传递给方法的有两种形式:按值调用(call by value):表示方法接收的是调用者提供的值。按引用调用(call by reference):表示方法接收的是调用者提供的变量地址。Java总是采用按值调用。也就是说方法得到的是所有参数值的一个副本。具体来将,方法不能修改传递给它的任何参数变量的内容。有两种类型的方法参数:基本数据类型(数字、布尔值)。对象引用。当方法参数为基本数据类型的情况:假定一个方法试图将一个参数值增加至3倍:public static void tri原创 2021-02-26 14:58:47 · 134 阅读 · 0 评论 -
Java中的静态字段、静态常量与静态方法
静态字段如果将一个字段定义为static,每个类只有一个这样的字段。而对于非静态的实例字段,每个对象都有自己的一个副本。静态字段属于类,而不属于任何单个的对象。在一些面向对象程序设计语言中,静态字段被称为类字段。class Employee { private static int nextId = 1; private int id;}静态常量静态变量使用得比较少,但静态常量却很常用。例如,在Math类中定义一个静态常量:public class Math { public st原创 2021-02-26 10:39:53 · 586 阅读 · 1 评论 -
使用LocalDate类来显示当前月的日历
LocalDate类简介java.time.LocalDatestatic LocalDate now():构造一个表示当前日期的对象。static LocalDate of(int year, int month, int day):构造一个表示给定日期的对象。int getYear()int getMonthValue()int getDayOfMonth():得到当前日期的年、月和日。DayOfWeek getDayOfWeek():得到当前日期是星期几,作为DayOfWeek类的一个原创 2021-02-26 09:17:10 · 504 阅读 · 1 评论 -
Java中的大数
如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中两个很有用的类:BigInteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现任意精度的整数运算,BigDecimal实现任意精度的浮点数运算。使用静态的valueOf方法可以将普通的数值转换为大数:BigInteger a = BigInteger.valueOf(100);对于更大的数,可以使用一个带字符串参数的构造器:BigInteger reallyBig = n原创 2021-02-21 16:45:18 · 639 阅读 · 0 评论 -
Java中的字符串
从概念上讲,Java字符串就是Unicode字符序列。Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,很自然地叫做String。每个用双引号括起来的字符串都是String类的一个实例。不可变字符串String类没有提供修改字符串中某个字符的方法。由于不能修改Java字符串中的单个字符,所以在Java文档中将String类对象称为是不可变的(immutable)。不可变字符串有一个优点:编译器可以让字符串共享 。可以想象将各种字符串存放在公共的存储池中。字符串变量指向存储池中相应原创 2021-02-21 16:02:47 · 163 阅读 · 0 评论 -
Java中的数据类型
Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。在Java中,一共8种基本类型(primitive type),其中有4种整型、2种浮点类型、1种字符类型和一种用于表示真值的boolean类型。Java有一个能够表示任意精度的算术包,通常称为“大数”(big number)。虽然被称为大数,但它并不是一种基本Java类型,而是一个Java对象。整型整型用于表示没有小数部分的数值,允许是负数。Java提供了4种整型:类型存储需求取值范围int4字节-21原创 2021-02-21 10:32:46 · 124 阅读 · 0 评论