![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
吴冬冬
此处省略300字
展开
-
java遗珠之泛型类型擦除
擦除规则泛型的作用之前已经介绍过了只是用于编译之前更为严格的类型检查,其他的一些特性也都是编译之前的,在编译之后泛型是会被擦除掉的。类型擦除所做的事情如下:如果是无界限的则会把类型参数替换成Object,如果是有界限的则会把类型参数替换为界限类型。插入一些类型转换来保证类型安全为了保证从泛型类型继承的多态性会增加一些桥接方法。泛型类型的擦除无边界类型擦除public class...原创 2018-10-12 12:19:27 · 407 阅读 · 0 评论 -
java遗珠之泛型不可靠类型
不可靠类型可靠类型是在运行时包含所有完整信息的类型,包括原始类型,非泛型类型,原生类型和无边界通配符的调用。不可靠类型是编译时类型擦除移除了一些信息,比如不是无边界通配符的其他情况。一个不可靠类型在运行时没有完整可用的信息,堆污染当参数化的变量引用不是该参数化类型的时候就会产生堆污染,如果程序执行某些操作,编译器给出unchecked警告时,就会发生这种情况。如果unchecked警告产生...原创 2018-10-12 16:09:03 · 731 阅读 · 0 评论 -
java遗珠之泛型七大限制
泛型的七大限制:不能使用原始类型实例化泛型类型参数化类型如下:public class OrderedPair<K, V> implements Pair<K, V> { private K key; private V value; public OrderedPair(K key, V value) { this.ke原创 2018-10-12 17:39:53 · 421 阅读 · 0 评论 -
java遗珠之接口默认方法
默认方法因为设计接口的时候不可能总是面面俱到,不用更改的。当接口需要增加一些方法的时候,那么实现接口的类就必须要重写来实现它,但是如果增加的功能仅仅通过接口原来的方法调用就可以实现的话,那么这种影响就更为多余,这正是默认方法需要解决的事情。示例如下:public interface TimeClient { void setTime(int hour, int minute, int...原创 2018-09-28 14:43:15 · 324 阅读 · 0 评论 -
java遗珠之异常种类
异常总共分三种已检查异常,比如java.io.FileNotFoundException错误,java.io.IOError运行时异常,NullPointerException错误和运行时异常又统称为未检查异常已检查异常必须被处理或者throws,未检查异常不需要。但要注意的是未检查异常也是可以捕获处理的public class UncheckedException { ...原创 2018-10-13 21:25:55 · 364 阅读 · 0 评论 -
java遗珠之泛型的作用
泛型总共有三个作用编译时进行更强大的类型检查编译时错误比运行时错误更好发现和处理消除类型转换List list = new ArrayList();list.add("hello");String s = (String) list.get(0);使用泛型之后去掉转换List<String> list = new ArrayList<String>...原创 2018-10-08 16:07:11 · 263 阅读 · 0 评论 -
java遗珠之多异常
catch可以同时捕获多个异常,示例如下: public void writeList() { // The FileWriter constructor throws IOException, which must be caught. PrintWriter out = null; try { System.out...原创 2018-10-15 14:33:56 · 422 阅读 · 0 评论 -
java遗珠之接口方法
接口中的默认方法和抽象方法像示例方法一样可以被继承,当类的超类或者接口提供多个相同签名的默认方式时,java编译器就会用继承规则来解决命名冲突,这些规则遵循两个原则。实例方法优先于接口默认方法看下面的例子class Horse { public String identifyMyself() { return "I am a horse."; }}int...原创 2018-09-29 19:50:01 · 275 阅读 · 0 评论 -
java遗珠之try-with-resources
try-with-resources语句自动关闭实现了AutoCloseable或者 Closeable接口的资源,示例如下:public static void writeToFileZipFileContents(String zipFileName, String outputFileName) throws java.io.IOException { java.nio.chars...原创 2018-10-15 15:53:38 · 489 阅读 · 0 评论 -
java遗珠不做多继承的原因
类和接口一个显著的区别就是类有字段,而接口没有,如果多继承的两个超类有同样的字段,或者对同字段进行操作,那设计上就会很很混乱,再比如有同样的方法,给超类增加一个方法,还要考虑其他超类会不会重名,这无疑增大了coder的负担。但是多接口就不会,因为没有字段,因此处理上就简单很多,遇到同名的方法按照继承规则处理就可以了。因此不做多继承更多考虑的还是超类在字段上的访问冲突会增大coder的心智负担。...原创 2018-09-30 09:40:58 · 267 阅读 · 0 评论 -
java遗珠之泛型多边界
泛型的类型参数可以有多个边界<T extends B1 & B2 & B3>当其中一个边界是class的时候需要写在前面。class A { /* ... */}interface B { /* ... */}interface C { /* ... */}public class D<T extends A & B & ...原创 2018-10-09 10:07:17 · 679 阅读 · 0 评论 -
java遗珠之泛型继承
当给定两个具体的类型A和B,MyClass&lt;A&gt;和MyClass&lt;B&gt;没有任何关系,不管A和B是什么关系。你可以通过扩展泛型类或者实现泛型接口的interface PayloadList&lt;E,P&gt; extends List&lt;E&gt; { void setPayload(int index, P val); //...原创 2018-10-09 20:29:44 · 235 阅读 · 0 评论 -
java遗珠之重复注解
重复注解有时候你需要相同的注解在同一种类型或者定义上,这时候重复注解就发挥作用了。我来看个定时执行的代码@Componentpublic class ScheduledTasks { private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class); private stati...原创 2018-09-27 15:48:48 · 330 阅读 · 0 评论 -
java遗珠之lambda与方法重载
当lambda的目标类型不是很明确时,就需要根据一些特征来判断lambda的目标类型,比较常见的就是在方法重载的时候。与接口中的方法名无关,即使不同名,仍会同时匹配到两个接口public class OverloadLambda { interface Runable { void run(); } interface Runable2 { ...原创 2018-09-21 20:46:14 · 1337 阅读 · 0 评论 -
java遗珠子之父类构造器
子类必定会调用父类的构造器这里分三种情况,都会显示或隐式的调用到父类的构造器子类的构造器中没有使用this和super,那么会隐式的调用父类的无参构造器子类使用super显示的调用父类的构造器子类可以使用this,但是this总会调用到一个隐式调用父类无参构造器的构造器,或者一个super显示调用父类,英文两个构造器互相this调用的话就会有递归调用构造器的错误。 ...原创 2018-09-12 10:32:33 · 217 阅读 · 0 评论 -
java遗珠之协变返回类型
子类重写父类的方法时返回类型和父类方法的返回类型可以不同,但是子类的返回类型必须是父类方法返回类型的子类。父类public class Bicycle { private int cadence; private int gear; private int speed; public Bicycle(int startCadence, int ...原创 2018-09-12 11:04:03 · 347 阅读 · 0 评论 -
java遗珠之类成员
类成员包括类变量和类方法,相对于实例变量和实例方法来说,区别是加了static关键字,所有对象使用同一份内存,访问规则如下package com.sweetop.studycore.classes;/** * Created with IntelliJ IDEA. * User: lastsweetop * Date: 2018/9/9 * Time: 下午10:37 * T...原创 2018-09-12 12:00:58 · 202 阅读 · 0 评论 -
java遗珠之字段初始化
字段初始化相对简单只是定义的时候设置初始化的变量就OK了public class BedAndBreakfast { // initialize to 10 public static int capacity = 10; // initialize to false private boolean full = false;} ...原创 2018-09-12 17:39:21 · 309 阅读 · 0 评论 -
java遗珠之嵌套类
使用内部类的原因1.合乎只在一个地方备用的逻辑: 如果一个类仅仅被一个别的类使用,那么把这个类嵌入到使用它的类中非常符合逻辑,嵌套这样的帮助类是的package变得简洁。2.有益于封装: 如果两个类A和B,如果B需要访问A定义为private的成员,那么B嵌套到A类中,即使A的成员是private的B也可以访问,另外B类也可以被隐藏起来,不被外部访问。3.可读性好且易于维护 在顶级...原创 2018-09-12 21:00:39 · 332 阅读 · 0 评论 -
java遗珠之前言
这几年都在使用golang和C++,对java基础性概念性的东西有些模块掉,或者与其他语言混淆掉了。重新整理一下java的一些基础概念,达到温故而知新的作用,文中不是系统的记载,大多是一些已模糊概念的再次清晰,所以名为java遗珠。...原创 2018-09-11 09:45:12 · 214 阅读 · 0 评论 -
linux搭建ftp的两个坑
如果是内网的话搭建起来很容易,如果是公网环境那就会遇到两个坑,第一个坑PASV回传地址。1.PASV默认回传的地址是内网地址,这时候你就需要使用 pasv_address=xxx.xxxx.xxx.xxx指定一个ip地址。2.第二个坑就是指定了并不生效,这才是一个大坑,以为会是第一步的设置问题,其实不然,而是默认listen_ipv6=YES,同时默认了listen=YES,默认启用的是ip6...原创 2018-09-26 14:36:00 · 643 阅读 · 0 评论 -
java遗珠之变强了的Comparator
一个更为强大的Comparator,可以说再也不用写侵入式的Comparable接口,而且连Comparator的lambda都可以不写了。我先来看需要排序的类:public class Person { public enum Sex { MALE, FEMALE } private String name; private LocalDat...原创 2018-09-26 16:05:26 · 364 阅读 · 0 评论 -
java遗珠之泛型通配符
我们在之前说过明确指定了泛型类型的参数之后,会把参数限制的很严格,通配符的作用就是放宽这种限制,有上限有界通配符&lt;? extends A&gt;,下限有界通配符&lt;? extends B&gt;,无界通配符&lt;?&gt;。上限有界是in变量,而下限有界是out变量,虽然通配符可以使用在字段,本地变量和方法中,但是类和外界的交互主要是方法,就限定的意义本身还是主要通过方法来体现,因...原创 2018-10-11 11:49:11 · 463 阅读 · 0 评论 -
java遗珠之effectively final
在早期的版本中,本地类,匿名类访问本地变量都需要是final的。但是1.8版本中,本地类和匿名类,还有lambda表达式访问本地变量已经不用声明为final了,仅仅是不用明确写为final,其实还是final的,这种不明确性可以称之为effectively final,也就是你声明的是一个非final的变量,但是你只要不改变它就可以了。 void methodInFirstLevel(int...原创 2018-09-21 09:17:36 · 2195 阅读 · 0 评论 -
java遗珠之隐藏和覆盖
1.只有实例方法有覆盖,类方法,类变量和实例变量都是隐藏。2.覆盖的意思就是会调用具体的子类,而隐藏就看谁去调用。3.类变量可以隐藏实例变量,实例变量也可也隐藏类变量。4.类方法和实例方法无法相互覆盖和隐藏。例子如下:class Father { int a = 1; static void b() { System.out.println(&amp;quot;fathe...原创 2018-09-26 18:36:23 · 252 阅读 · 0 评论 -
java遗珠之@SafeVarargs
当使用泛型作为可变参数时,因为可变参数是数组类型,在编译之后泛型会被擦出掉,那么传入参数就成了unchecked的警告:如下例子public class VarargsWaring { private static List&amp;lt;String&amp;gt; useVarargs(List&amp;lt;String&amp;gt;... args) { return args.lengt...原创 2018-09-27 10:27:34 · 1516 阅读 · 0 评论 -
java遗珠之泛型类型推断
类型推断类型推断是java编译器的一种能力,通过查看方法调用和相应的声明来决定什么样的类型参数或者参数是更为合理的调用。推断算法先确定参数的类型,分配结果或者返回的类型,最终推断算法查找适合所有参数最适合的类型。为了说明这点,来看下面的例子:public class Util { static &lt;T&gt; T pick(T a1, T a2) { retu...原创 2018-10-10 10:35:56 · 1470 阅读 · 1 评论