- 博客(22)
- 收藏
- 关注
原创 Day22 foreach循环相较于for循环有什么优势?
循环其实是一种加强的for循环,相较于for循环更加简洁,可以用来遍历数组或者集合,它的底层原理其实是实现了迭代器的功能,所以本质上来说foreach可以遍历任何实现了Iterable接口的对象。foreach本质上不过是编译器提供的“语法糖”包装。编译器在遇到代码时,会进行代码的转译。如果是遍历类型,则要求被遍历的集合类型必须实现接口,在iterator()方法中返回一个Iterator迭代器。
2022-11-20 18:39:33 225 1
原创 Day21什么是函数的副作用?为什么优先选择无副作用的函数?
具体地说,函数副作用是指函数被调用,完成了函数既定的计算任务,但同时因为访问了外部数据,尤其是因为对外部数据进行了写操作,从而一定程度地改变了系统环境。倡导无副作用的函数,主要原因是因为副作用操作,不利于代码的阅读,因为我们在阅读到一份使用了有副作用的代码的时候,我们将难以正确的评估函数造成的影响。见上方函数,这个函数会在每次执行的过程中修改 temp 的值,有这样行为的函数,我们称为有副作用的函数。而如果一个函数在运行的过程中,除了返回变量,还修改了其它函数体外的变量,那么这个函数被称为有副作用的函数。
2022-11-20 18:32:54 353
原创 Day20什么是函数式接口,函数式接口有什么使用场景
首先,如果是我们自己写,这些接口对于我们来说是一种额外的工作,因此使用官方提供好的接口会提高开发效率;另外,官方提供的接口用的人比较多,这样容易提高代码转手的难度,如果两个人同时都学习了这一组接口,那么当他们进行代码交接的时候将会变得简单许多。试想一下,如果我们自己写这些通用接口,不同的人有不同的想法,他们起的名字就有可能不一样,结果极有可能是不同的人开发出了不同的接口,却实现了同样的功能,当两个人再次交接代码时,无形增加了交接成本。函数式接口可以被隐式转换为 lambda 表达式。
2022-11-20 18:24:54 312
原创 Day19 @Override作用是什么,有什么优点
可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错。例如,你如果没写@Override,而你下面的方法名又写错了,这时你的编译器是可以编译通过的,因为编译器以为这个方法是你的子类中自己增加的方法。2.增强代码的可读性:这样写的话相当于加了注释的效果,有助于将来再回来读能够读懂。1.减少Bug:你的IDE会帮你检测重写的参数以及函数名以及返回值有没有写错。这种写法是正确的,如果你写成:@Override。@Override是伪代码,表示重写。
2022-11-15 14:48:46 136
原创 Day17 什么是静态成员类?为什么静态成员类优于非静态成员类?
静态和非静态的唯一区别,静态成员类的声明中包含修饰符 static,非静态成员类的每个实例都隐含地与外围类的一个一个外围实例相关联所以在没有外围实例的情况下,要想创建非静态成员类的实例,是不可能的。最好把它看成一个普通的类,只是碰巧被声明在另一个类的内部而已,它可以访问外围类的所以成员,包括那些声明为私有的成员。3、如果嵌套类的实例想在外围类的实例之外独立存在,这个嵌套类必须是静态成员类:在没有外围实例的情况下,想要创建非静态的成员类实例是不可能的。4、静态成员类的一个常见用法是作为公有的辅助类。
2022-11-10 13:33:15 286
原创 Day16 什么是不可变性,优点和缺点
但如果字符串是可变的,此时相同内容的String还指向常量池的同一个内存空间,当某个变量改变了该内存的值时,其他遍历的值也会发生改变。因为字符串是不可变的,所以在它创建的时候hashcode就被缓存了,不需要重新计算。这就使得字符串很适合作为Map中的键,字符串的处理速度要快过其它的键对象。:所谓的不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值。譬如你想加载java.sql.Connection类,而这个值被改成了myhacked.Connection,那么会对你的数据库造成不可知的破坏。
2022-11-07 23:34:06 88
原创 如何最小化一个类和成员的可访问性
(1)首先就是每个成员变量设置成private类型,方法中需要改变的属性可以用set方法,不需要就只留一个get方法就好,那么只能get这个方法有什么用呢,我觉得是这样的,当调用类中暴露出来的api可以对这个成员进行修改,那么这个get方法就还是有作用的。这样,在以后对它进行修改,替换,或者删除的时候,就不会担心影响到现有的客户端,如果把它做成公有的,那么你永远都要考虑兼容性去维护它。(2)如果一个类或者接口,只被另外的一个类应用,那么最好将这个类或者接口做成其内部的私有类或者接口。
2022-11-06 20:02:34 81
原创 Day14 Comparable 接口声明了哪些方法?什么情况下应该实现Comparable 接口?
想对某个类的对象之间做比较,就需要实现Comparable 接口。接口中只有一个方法compareTo,这个方法定义了对象之间的比较规则。1、像String、包装类等实现了Comparable接口,重写了CompareTo(obj)方法。2、像String、包装类重写compareTo()方法以后,进行了从小到大的排列。如果当前对象this 大于 形参对象obj 则返回正整数。如果当前对象this 小于 形参对象obj 则返回负整数。如果当前对象this 等于 形参对象obj 则返回零。
2022-11-04 14:45:14 101
原创 Day13 什么是hascode
4、两个对象的hashCode相同,并不一定表示两个对象就相同,也就是不一定适用于equals(java.lang.Object) 方法,只能够说明这两个对象在散列存储结构中,如Hashtable,他们“存放在同一个篮子里”。3、如果对象的equals方法被重写,那么对象的hashCode也尽量重写,并且产生hashCode使用的对象,一定要和equals方法中使用的一致,否则就会违反上面提到的第2点;2.重写了equals就一定要重写HashCode。
2022-11-02 20:11:58 99
原创 Day12 什么时候应该覆盖equals方法
对于任何非null的引用值x和y,只要equals的比较操作在对象中所用的信息没有被修改,多次调用x.equals(y)就会一致的返回true,或者一致的返回false。对于任何非null的引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,那么x.equals(z)也必须返回true。对于任何非空的引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)必须返回true。覆盖eauals方法也必须覆盖hascode方法。
2022-11-01 21:50:54 90
原创 Day11 try catch resource异常处理
资源是指在程序用完了之后必须要关闭的对象。try-with-resources语句保证了每个声明了的资源在语句结束的时候都会被关闭。任何实现了java.lang.AutoCloseable接口的对象,和实现了java.io.Closeable接口的对象,都可以当做资源使用。那么这个类就可以写在try-catch的try后面的括号中,并且能在try-catch块执行后自动执行这个方法。建议使用try-with-resources替代try-cache-finall,使代码更简洁,开发更容易。
2022-10-30 21:11:00 553
原创 Day10,什么是自动拆箱和自动装箱,什么情况下应该避免
会抛出异常,在第二行时,会对integer100进行拆箱,也就是对一个null对象执行intValue()方法,当然会抛出空指针异常。内部逻辑:自动装箱时编译器调用valueOf将原始类型值转换成对象,同时自动拆箱时,编译器通过调用类似intValue(),doubleValue()这类的方法将对象转换成原始类型值。自动装箱有一个问题,那就是在一个循环中进行自动装箱操作的情况,如下面的例子就会创建多余的对象,影响程序的性能。拿integer为例,他的自动装箱就是调用了valueOf()方法。
2022-10-27 23:09:32 257
原创 那些类应该私有化构造器,原因是什么
私有构造器,就是用private关键字声明的构造器。与一般公有构造器最大的区别在于,其访问权限是private,于是它只能被包含它的类自身所访问,而无法在类的外部调用,故而可以阻止对象的生成。所以,如果一个类只有一个私有构造器,而没有任何公有构造器,是无法生成任何对象的。那么无法生成对象的带有私有构造器的类究竟有什么作用呢?这样的类在实际应用中最常用的是作为工具类,如字符串的验证、枚举转换之类的,通常只做成静态接口被外部调用即可。工具类正好需要这一特点。
2022-10-27 13:28:44 718
原创 什么是建造者模式,什么情况下应该使用
当我们为其他人设计一个功能代码,拱起之后使用。她不必理解代码的执行流程,和其内部的复杂过程,只需要去new这个对象就ok了。使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。将对象的方法,属性,给与特定的编排,使其在对象创造成功的时候就有强大的功能。
2022-10-25 21:07:54 122
原创 什么是静态工厂方法,能否用静态工厂方法替代构造器
在绝大多数境况中可以替代,在需要继承下有局限:如果类不含有共有的或者受保护的构造器,就不能被子类化。换句话说,如果父类没有公共的构造器,它就不允许被继承。现在只需要调用其获取类的方法,返回值就能得到类。这就是静态工厂方法。原本需要new得到实现类。
2022-10-25 20:58:25 95
原创 组合和继承之间的区别
组合组合是通过对现有对象进行拼装即组合产生新的具有更复杂的功能。像汽车组装一样,将代码组装,向Spring中的注入,让代码交织在一起,而其本身并没有必然联系。继承继承是面向对象三大特征之一,java中的继承描述的是两个类之间的关系,被继承的类称为父类,继承的类成为子类继承使用关键字extends关键字来描述。
2022-10-20 21:46:21 256
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人