Java方法参数的使用情况:

  1. 一个方法不能修改一个基本数据

对象析构与finalize方法

Java有自动的垃圾回收器,不需要人工回收内存,例如,文件或使用了系统资源的另一个对象的句柄。在这种情况下,当资源的不再需要时,将其回收和再利用将显得十分重要。可以为任何一个类添加 finalize 方法。finalize 方法将在垃圾回收器清除对象之前调用 。在实际应用中,不要依赖于使用finalize 方法回收任何短缺的资源 , 这是因为很难知道这个方法什么时候才能够调用。(这点其实是和net机制是一样的)

Java包概念其实就是net中命名空间

  1. 静态导入,这样就可以使用静态方法和静态域,比如out.println() import static java . lang . System . * ;

Javadoc生成文档

继承

  1. 通过super调用父类方法,相当于net中的base
  2. 静态绑定是 private 方法 、 static 方法或 final 方法,除此是动态绑定
  3. 在 Java 中 ,不需要将方法声明为虚拟方法 。动态绑定是默认的处理方式 。如果不希望让一个方法具有虚拟特征 ,可以将它标记为 final
  4. 每次调用方法都要进行搜索,时间开销相当大。因此,虚拟机预先为每个类创建了一个方法表( method table ) , 其中列出了所有方法的签名和实际调用的方法。这样一来 ,在真正调用方法的时候 , 虚拟机仅查找这个表就行了。
  5. 在 C # 中 ,如果没有特别地说明(virtual) ,所有的方法都不具有多态性 。这两种做法可能都有些偏激 。
  6. 综上所述 : • 只能在继承层次内进行类型转换 。 • 在将超类转换成子类之前 ,应该使用instanceof 进行检查。

  7. abstract中可以包含具体实现,不能被实例化,同C#是一样的。

Java 中它允许在运行时确定数组的大小

对象中的数据称为实例域 ( instance field ) , 操纵数据的过程称为方法 ( method )

泛型数组列表

  1. 数组列表(ArryList)的容量与数组的大小有一个非常重要的区别。如果为数组分配 100 个元素的存储空间,数组就有100 个空位置可以使用 。而容量为 100 个元素的数组列表只是拥有保存 100 个元素的潜力 ( 实际上,重新分配空间的话 , 将会超过100 ) , 但是在最初 ,甚至完成初始化构造之后 ,数组列表根本就不含有任何元素 。

  2. 一旦能够确认数组列表的大小不再发生变化,就可以调用 trimToSize 方法 。这个方法将存储区域的大小调整为当前元素数量所需要的存储空间数目。垃圾回收器将回收多余的存储空间。

包装器

有时,需要将 int 这样的基本类型转换为对象。所有的基本类型都冇一个与之对应的类。。例如,Integer 类对应基本类型 int.通常,这些类称为包装器( wrapper )

装箱和拆箱是编译器认可的,而不是虚拟机。编译器在生成类的字节码时,插人必要的方法调用。虚拟机只是执行这些字节码 。

继承的设计技巧

  1. 将公共操作和域放在超类
  2. 不要使用受保护的域
  3. 使用继承实现“is-a”关系(父子关系)
  4. 除非所有继承的方法都有意义,否则不要使用继承

  5. 在覆盖方法事,不要改变预期的行为 假如我就是要这样设计,Holiday类继承GregorianCalendar类,那么我只能把共有方法add覆盖成合理的代码,或者什么都不做,或者抛出一个异常。但是add方法变味了,变的不像我当初设计的那样了。这里作者的意思是:不要这样,在覆盖父类中的方法时,不要偏离最初的设计想法。

  6. 使用多态,而非类型信息

  7. 不要过多地使用反射

接口

有了抽象类为什么还要引入接口?

使用抽象类表示通用属性存在这样一个问题:每个类只能扩展于一个类。 接口可以提供多重继承的大多数好处,同时还能避免多重继承的复杂性和低效性。

jdk1.8新特性

  1. 接口中支持静态方法

    public interface InterfaceA {
    static void getName() {
    System.out.println("6666");
    }
    }
  2. 默认方法

    public interface InterfaceA {
    default void getName() {
    System.out.println("6666");
    }
    }
  3. 默认方法解决冲突

  4. 超类优先

  5. 接口冲突

内部类

  1. 一个方法可以引用调用这个方法的对象数据域,内部类既可以访问自身的数据域, 也可以访问创建它的外围类对象的数据域。
  2. 外围类的引用在构造器中设置,编译器修改了所有内部类的构造器,添加了一个外围类的引用参数。
  3. 内部类是一种编译器现象,与虚拟机无关。编译器将会把内部类翻译成用$分隔外部类名与内部类名的常规类文件,而虚拟机则对此一无所知。

    TalkingClock$TimePrinter.class

内部类:https://www.cnblogs.com/chenssy/p/3388487.html

代理类

https://segmentfault.com/a/1190000011291179

异常分类

  1. 所有异常都是派生自Throwable类,分为Error和Exception
  2. Error类层次结构描述了Java运行时系统的内部错误和资源耗尽错误,应用程序不应该抛出这类错误。
  3. 应用程序出错需要关注Exception
  1. 如果出现RuntimeException异常,那么就一定是你的问题。
  2. Java语言规范将 派生于Error类或RuntimeException类的所有异常称为非受( unchecked ) 异常。
  3. 所有其它的异常称为受查异常。

如果在子类中覆盖了超类的一个方法,子类方法中声明的受查异常不能比超类方 法中声明的异常更通用( 也就是说,子类方法中可以抛出更特定的异常,或者根本不抛出任何异常。特别需要说明的是,如果超类方法没有抛出任何受查常,子类也不能抛出任何受查异常。

带资源的try语句 try - with - resources ) 的最简形式为 : try ( Resource res = . . . ) { work with res }

try块退出时,会自动调用res.close。

堆栈轨迹

静态的Thread.getAllStackTrace()方法,它可以产生所有线程的堆栈轨迹。

Map<Thread,StackTraceElement[ ]> map = Thread.getAl1StackTraces();
for ( Thread t : map .keySet())
{
StackTraceElement[ ] frames = map.get( t ) ;
analyze frames
}

日志

  1. 全局日志记录器

    Logger.getClobal().info()

  2. 关闭/开启所有级别记录

    Logger.getClobal().setLevel(Level.OFF)

    Level.ALL

  3. 获取记录器

    private static final Logger myLogger = Logger.getLogger("com.mycompany.myapp")

  4. 修改日志管理器配置

    配置文件地址:jre/lib/1ogging.properties

日志管理器在VM启动过程中初始化,这在 main 执行之前完成。如果在main中调用 System.setProperty("java.util.logging.config.file",file) ,也会调用LogManager.readConfiguration( )来重新初始化曰志管理器。

 

泛型

前期泛型程序设计是用继承实现的,ArrayList类只维护一个Object引用的数组:

public class ArrayList{
private Object [ ] elementData;
public Object get ( int i ) { }
public void add ( Object o ) { }
}

问题

这种方式存在的问题:

  1. 当获取一个值时必须进行强制类型转换
  2. 这里没有错误检査。可以向数组列表中添加任何类的对象对于这个调用,编译和运行都不会出错。然而在其他地方,如果将 get 的结果强制类型转换为 String 类型,就会产生一个错误。

泛型约束

public static <T extends Coiparab1e> T min(T[] a)
{ }

一个类型变量或通配符可以有多个限定,T extends Comparable & Serializable 限定类型用 “ & ” 分隔,而逗号用来分隔类型变量

Net泛型和Java泛型区别

  • 1. net泛型

https://www.cnblogs.com/DebugLZQ/archive/2012/09/03/2669383.html

  • 2. java泛型

https://www.cnblogs.com/drizzlewithwind/p/6101081.html

  • 3. 本质区别

https://blog.csdn.net/tianshiainiforever/article/details/51698863

  1. 不能创建参数化类型的数组
  2. 泛型类的静态上下文中类型变量无效

Java泛型系列

  1. 基本用法与类型擦除
  2. 泛型与数组
  3. 通配符的使用

https://segmentfault.com/a/1190000005337789

集合

Iterator 接口的 remove 方法将会删除上次调用 next 方法时返回的元素。 在决定删除某个元素之前应该先看一下这个元素是很具有实际意义的。然而,如果想要删除指定位置上的元素,仍然需要越过这个元素。如果调用remove之前没有调用 next 将是不合法的。如果这样做,将会抛出一个 IllegalStateException 异常。

Iterator<String> it = c.iterator();
it.next();
it.remove();

链表

数组列表

散列表

树集

队列与双端队列

优先级队列

优先级队列使用了一个优雅且高效的数据结构,称为堆( heap )。堆(可不是jvm中的堆)是一个可以自我调整的二叉树,对树执行添加( add ),和删除 ( remore ) 操作,可以让最小的元素移动到根,而不必花费时间对元素进行排序。

  1. PriorityQueue

Java核心技术1的更多相关文章

  1. Java核心技术点之泛型

    1. Why ——引入泛型机制的原因 假如我们想要实现一个String数组,并且要求它可以动态改变大小,这时我们都会想到用ArrayList来聚合String对象.然而,过了一阵,我们想要实现一个大小 ...

  2. Java核心技术点之集合框架

    1. 概述     Java集合框架由Java类库的一系列接口.抽象类以及具体实现类组成.我们这里所说的集合就是把一组对象组织到一起,然后再根据不同的需求操纵这些数据.集合类型就是容纳这些对象的一个容 ...

  3. Java核心技术点之内部类

    1. 为什么要使用内部类     内部类就是定义在一个类内部的类,那么为什么要使用内部类呢?主要原因有以下几点:第一,内部类中定义的方法能访问到它所在外部类的私有属性及方法:第二,外部类无法实现对同一 ...

  4. Java核心技术点之动态代理

    本篇博文会从代理的概念出发,介绍Java中动态代理技术的使用,并进一步探索它的实现原理.由于个人水平有限,叙述中难免出现不清晰或是不准确的地方,希望大家可以指正,谢谢大家:) 一.概述 1. 什么是代 ...

  5. 读《java核心技术卷一》有感

    过去一个多月了吧.才囫囵吞枣地把这书过了一遍.话说这书也够长的,一共706页.我从来不是个喜欢记录的人,一直以来看什么书都是看完了就扔一边去,可能有时候有那么一点想记录下来的冲动,但算算时间太紧,很多 ...

  6. java核心技术学习笔记之一程序设计概述

    Java 核心技术之一程序设计概述 一.   Java语言的特点 简单行 :取经于C++,排除了C++不常用的指针.结构等,增加垃圾回收. 面向对象:与C++不同是单继承,但是可以继承多接口.完全面向 ...

  7. java核心技术之流与文件

    InputStream和OutputStream构成了输入/输出类层次结构的基础.用于按字节进行读写.而与之处在同一等级的Reader/Writer同样作为抽象类定义了用于对字符进行读取的类层次结构, ...

  8. 一种公认提供toString的方法_JAVA核心技术卷轴Ⅰ

    从JAVA核心技术卷轴Ⅰ:基础知识中整理得到. import java.lang.reflect.AccessibleObject; import java.lang.reflect.Array; i ...

  9. Java核心技术第五章——1.类、超类、子类(2)

    继上一篇Java核心技术第五章——1.类.超类.子类(1) 6.重载解析 假如调用ClassName.Method(args) 1.编译器列出类ClassName所有名为Method的方法. 2.编译 ...

  10. 《Java核心技术卷1》拾遗

    之前对Java的基础知识有过学习,现在开始学习<Java核心技术卷1>,将一些新学的知识点,做简要记录,以备后续回顾: 1.double (1)所有的“非数值”都认为是不相同的 if(x= ...

随机推荐

  1. 12v继电器驱动电路

  2. GitHub的Fork 是什么意思

    现在有这样一种情形: 有一个叫做Joe的程序猿写了一个游戏程序,而你可能要去改进它.并且Joe将他的代码放在了GitHub仓库上. 下面是你要做的事情 fork并且更新GitHub仓库的图表演示 Fo ...

  3. 多线程-Thread、Runnable、Callbale、Future

    Thread:java使用Thread代表线程,所有的线程对象都必须是Thread类或其子类,可以通过继承Thread类来创建并启动多线程. package org.github.lujiango; ...

  4. 怎样使用Debussy+ModelSim快速查看前仿真波形

    引子:ModelSim是HDL仿真软件,Debussy是波形查看软件:搭配使用,相当爽.此处所谓快速查看前仿真波形仅为抛砖引玉,大家不要拘泥于此.两款软件的功能都很强大,请自行研究. 注:本篇博文的软 ...

  5. 【项目总结】:怎样做一个牛逼的Team leader?

    随着ITOO高校云平台3.1项目的结束,我们各种各样的总结也被提上了日程. Java版本号的全部开发者和Donet版本号的全部开发者坐在一起进行了关于项目开发管理的头脑风暴,尽管我仅仅是Donet开发 ...

  6. HTML5之语音识别实例

    HTML5之语音识别实例 代码 <input type="text"  x-webkit-speech id="d1" lang="zh-CN& ...

  7. python学习笔记1--python简介

    Python翻译中文是蟒蛇.发明人guido喜欢蟒蛇马戏团,故起名python. python发展简史: --CNRI时期.CNRI资助Python发展的重要单位,python1.5版之前的成果大部分 ...

  8. Mysql下Union注入Bypass安全狗过程

    文章转载于:http://www.0aa.me/index.php/archives/95/ 一次众测发现个注入,然后有安全狗就顺带看了下安全狗. 先fuzz看看安全狗拦截什么关键词union sel ...

  9. 如何使用 PsExec 执行远程命令

    前言 这紧紧只是一篇纯技术分享.我们的程序在运行时需要连接多台目标机器,并拷贝目标机器上特定文件夹中的文件.为了方便访问,要在每台目标机器上建立一个特定用户,所以 PsExec 成了实现此功能的一个方 ...

  10. pl/sql 实例精解 08

    1: EXCEPTION 2: WHEN EXCEPTION_NAME THEN 3: ERROR-PROCESSING STATEMENTS; 写在 begin 与 end 的之间的处理异常块. 常 ...