![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java basic
Java basic
阿怪的怪蜀黍
Talk is cheap, show me the code!
展开
-
记录一次传值问题
原创 2021-05-17 11:25:38 · 124 阅读 · 0 评论 -
Java I/O
I/O一、File类1. File2.目录实用工具3.目录的检查以及创建一、File类1. FileFile(文件)类这个名字有一定的误导性,我们可能认为它指代的是文件,实际上却并非如此,它技能代表一个特定文件的名称,又能代表一个目录下的一组文件的名称,如果它指定的是一个文件集,我们就可以对此集合调用list()方法,这个方法会返回一个字符数组。class DirFilter implements FilenameFilter { private Pattern pattern;原创 2020-12-06 06:42:41 · 108 阅读 · 0 评论 -
Java散列和散列码
散列的价值在于速度:散列使得查询得以快速进行,由于瓶颈位于键的查询速度,因此解决方案之一就是保持键的排序状态,然后使用Collections.binarySearch()进行查询。 散列则更进一步,它将键保存在某处,以便能够快速找到,存储一组元素最快的数据结构是数组,所以使用它来表示键的信息(键的信息,而不是键本身),但是因为数组不能调整容量,因此就有一个问题:我们希望在Map中保存数量不确定的值,但是如果键的数量被数组的容量限制了,该怎么办呢? 答案就是:数组并不保存键本身,而是通过键对象生成原创 2020-12-04 07:31:11 · 234 阅读 · 0 评论 -
Java泛型
泛型元组元组原创 2020-11-28 09:53:36 · 175 阅读 · 2 评论 -
正则表达式
.任意字符[abc]包含a、b和c的任意字符(和a|b|c作用相同)[^abc]除了a、b和c之外的任意字符(否定)[a-zA-Z]从a-z或从A-Z的任意字符(范围)[abc[hij]]任意a、b、c、h、i和j字符(与a|b|c|h|i|j作用相同(合并)[a-z&&[hij]]任意h、i或j(交集)\s空白符(空格、tab、换行、换页和回车\S非空白符([^\s])\d数字[0-9]\D非数字...原创 2020-11-26 23:17:00 · 171 阅读 · 0 评论 -
Java String
1.无意识的递归编译器看到一个String对象后面跟着一个“+”,而再后面的对象不是String,于是编译器试着将this转换成一个String,它怎么转换呢?正是通过调用this上的toString()方法,于是就发生了递归调用。如果你真的想要打印出对象的的内存地址,应该调用Object.toString()方法,而不应该使用this,应该使用super.toString()方法。/** * @Author ZhangGJ * @Date 2020/11/26 08:38 */public c原创 2020-11-26 08:41:04 · 69 阅读 · 1 评论 -
Java 异常(Exception)
异常1. 重抛异常2. 异常链1. 重抛异常重新抛出异常会把异常抛给上一级环境中的异常处理程序,同一个try块的后续catch子句将被忽略,此外,异常对象的所有信息都得以保持,所以高一级环境中捕获此异常的处理程序可以从这个异常对象中得到所有信息。如果只是把当前异常对象重新抛出,那么printStackTrace()方法显示的将是原来异常抛出点的调用栈信息,而并非重新抛出点的信息,要想更新这个信息,可以调用fillInStackTrace()方法,将返回一个Throwable对象,它是通过把当前调用栈信原创 2020-11-25 08:30:29 · 98 阅读 · 0 评论 -
Java内部类
内部类什么是内部类使用.this和.new什么是内部类可以将一个类的定义放在另一个类的定义内部,这就是内部类。内部类能访问其外围对象的所有成员,而不需要任何特殊条件,此外,内部类还拥有其外围类的所有元素的访问权,这是怎么做到的呢?当某个外围类的对象创建了一个内部类对象时,此内部类对象必定会秘密地捕获一个指向那个外围类对象的引用,然后,在你访问此外围类的成员时,就是用那个引用来选择外围类的成员。使用.this和.new/** * @Author ZhangGJ * @Date 2020/11/原创 2020-11-18 08:20:30 · 177 阅读 · 0 评论 -
Java final关键字
final使用的三种情况:数据、方法和类。1.final数据对于基本类型,final使数值恒定不变,而对于对象引用,final使引用恒定不变,一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象,然而对象自身是可以被修改的。空白final必须在域的定义处或者在构造器中赋值。2.final方法使用final方法的原因有两个,第一个是把方法锁定,以防任何继承类修改它的含义,这是出于设计考虑,想要确保在继承中使方法行为保持不变,并且不会被覆盖,过去建议使用final方法的第二个原因是效率,现在由原创 2020-11-16 06:55:58 · 88 阅读 · 0 评论 -
什么是多态(向上转型)
将导出类看做是它的基类的过程成为向上转型(upcasting)void doSomethings(Shape shape) { shape.erase(); shape.draw();}Circle circle = new Circle();Triangle triangle = new Triangle();Line line = new Line();doSomethings(circle);doSomethings(triangle);doSomethings(line);原创 2020-11-15 09:37:18 · 513 阅读 · 0 评论 -
Java 构造器与类内部初始化顺序
构造器是初始化对象,并不是创建对象。调用new关键字,会为对象分配存储空间,并调用构造器初始化类。- 在构造器中调用构造器/** * @Author ZhangGJ * @Date 2020/11/14 10:37 */public class Flower { int petalCount = 0; String s = "initial value"; Flower(int petals) { petalCount = petals;原创 2020-11-15 07:44:21 · 344 阅读 · 0 评论 -
Java finalize()
finalize()一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。在本地方法中,也许会调用C的malloc()函数系列来分配存储空间,而且除非调用了free()函数,否则存储空间将得不到释放,从而造成内存泄漏,当然free()时C和C++中的函数,所以需要在finalize()中用本地方法调用它。finalize()可以验证终结条件:class Book { boolean checkedOu.原创 2020-11-14 11:38:17 · 52 阅读 · 0 评论 -
Java this关键字
this关键字:class Banana { void peel(int i) { }}/** * @Author ZhangGJ * @Date 2020/11/14 08:42 */public class BananaPeel { public static void main(String[] args) { Banana a = new Banana(), b = new Banana(); a.pee原创 2020-11-14 08:55:48 · 120 阅读 · 0 评论 -
Java对象赋值(别名问题)
对一个对象进行操作的时候,我们真正操作的是对对象的引用,所以,倘若“将一个对象赋值给另一个对象”,实际是将”引用”从一个地方赋值到另一个地方,这意味着假若对对象使用c=d,那么c和d都指向原本只有d指向的那个对象。class Tank { int level;}/** * @Author ZhangGJ * @Date 2020/11/14 06:55 */public class Assigment { public static void main(String[] a原创 2020-11-14 07:07:13 · 349 阅读 · 1 评论 -
Java static关键字
使用static的两种情形:1.只想为某特定域分配单一存储空间,而不去考虑究竟要创建多少对象,甚至根本就不创建任何对象;2.希望某个方法不与包含它的类的任何对象关联在一起,也就是说,即使没有创建对象,也能够调用这个方法。当声明一个事物是static时,就意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起,所以你即使从未创建某个类的任何对象,也可以调用其static方法或访问其static域。class StaticTest { static int i = 47;}StaticTe原创 2020-11-12 08:21:24 · 673 阅读 · 2 评论 -
纯粹的面向对象程序设计方式
纯粹的面向对象程序设计方式Smalltalk 作为第一个成功的面向对象并影响了 Java 的程序设计语言 ,Alan Kay 总结了其五大基本特征。通过这些特征,我们可理解“纯粹”的面向对象程序设计方法是什么样的:1.万物皆对象 你可以将对象想象成一种特殊的变量。它存储数据,但可以在你对其“发出请求”时执行本身的操作。理论上讲,你总是可以从要解决的问题身上抽象出概念性的组件,然后在程序中将其表示为一个对象。2.程序是一组对象,通过消息传递来告知彼此该做什么 要请求调用一个对象的方法,你需要向该对象发送原创 2020-09-08 08:01:54 · 302 阅读 · 0 评论 -
面向对象的七大设计原则
一、开闭原则(The Open-Closed Principle ,OCP)二、里氏替换原则(Liskov Substitution Principle ,LSP)三、 迪米特原则(最少知道原则)(Law of Demeter ,LoD)四、单一职责原则五、接口分隔原则(Interface Segregation Principle ,ISP)六、依赖倒置原则(Dependency Inversion Principle ,DIP)七、组合/聚合复用原则(Composite/Aggregate转载 2020-09-10 08:07:53 · 431 阅读 · 0 评论 -
New关键字(实例化对象)
New关键字Point originOne = new Point(23, 94);Rectangle rectOne = new Rectangle(originOne, 100, 200);Rectangle rectTwo = new Rectangle(50, 100);为Point的对象创建了一个实例,在内存里开辟了两个空间:一块空间在堆,存放new Point()这个对象;另一块空间在栈,存放originOne,originOne值即new Point(23, 94)这个对象的内存地址原创 2020-09-21 08:18:06 · 2731 阅读 · 0 评论 -
java动态绑定(后期绑定)
程序绑定的概念:绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来。对java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定.静态绑定:编译器将产生一个具体函数名字的调用,而运行时将这个调用解析到将要被执行的代码的绝对地址。在程序执行前方法已经被绑定(也就是说在编译过程中就已经知道这个方法到底是哪个类中的方法),此时由编译器或其它连接程序实现。例如:C。针对java简单的可以理解为程序编译期的绑定;这里特别说明一点,java当中final,static,private和构造方原创 2020-09-22 08:03:53 · 721 阅读 · 0 评论