山东省建设部网站网站建设费如何入账怎么摊销

当前位置: 首页 > news >正文

山东省建设部网站,网站建设费如何入账怎么摊销,江苏徐州网站建设,沈阳住房建设局网站文章目录异常写法JVM加载反射访问private调用方法动态代理注解元数据#xff1a;TargetRetention元注解泛型编写泛型擦拭法局限通配符无限定通配符(?)集合重写方法和实现类IO流字节与字符转换同步和异步可以设置编码的类Print*类Files时间与日期时区一种二种三种异常… 文章目录异常写法JVM加载反射访问private调用方法动态代理注解元数据TargetRetention元注解泛型编写泛型擦拭法局限通配符无限定通配符(?)集合重写方法和实现类IO流字节与字符转换同步和异步可以设置编码的类Print*类Files时间与日期时区一种二种三种异常 写法 编译器并不会特别地为InputStream加上自动关闭。编译器只看try(resource …)中的对象是否实现了java.lang.AutoCloseable接口如果实现了就自动加上finally语句并调用close()方法 try(resource..){ }catch(){ }JVM加载 JVM在执行Java程序的时候并不是一次性把所有用到的class全部加载到内存而是第一次需要用到class时才加载 反射 访问private setAccessible(true)可以获取private setAccessible(true)可能会失败。如果JVM运行期存在SecurityManager那么它会根据规则进行检查有可能阻止setAccessible(true) 调用方法 注意null和有参数 静态Integer n (Integer) m.invoke(null, “123”); 非静态:String r (String) m.invoke(s, 6); 为了调用非public方法可以通过Method.setAccessible(true)允许其调用也可能会失败 遵循多态原则调用实际类型的覆写方法 动态代理 动态代理Dynamic Proxy可以在运行期动态创建某个interface的实例而不用实现某个实例。 动态代理实际上是JVM在运行期动态创建class字节码并加载的过程 import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;public class ReflexTest {public static void main(String[] args){InvocationHandler ih new InvocationHandler() {Overridepublic Object invoke(Object proxy,Method method,Object args[])throws Throwable{System.out.println(method.getName());System.out.println(proxy.getClass().getName());System.out.println(args[0]);return null;}};play p (play)Proxy.newProxyInstance(play.class.getClassLoader(), new Class[]{play.class}, ih);p.catPlay();}} interface play{void catPlay(); } 注解 注解是放在Java源码的类、方法、字段、参数前的一种特殊“注释” 注解则可以被编译器打包进入class文件因此注解是一种用作标注的“元数据” 元数据 元数据Metadata又称中介数据、中继数据为描述数据的数据data about data主要是描述数据属性property的信息用来支持如指示存储位置、历史数据、资源查找、文件记录等功能 Target 类或接口ElementType.TYPE 字段ElementType.FIELD 方法ElementType.METHOD 构造方法ElementType.CONSTRUCTOR 方法参数ElementType.PARAMETER。 Retention 仅编译期RetentionPolicy.SOURCE 仅class文件RetentionPolicy.CLASS 运行期RetentionPolicy.RUNTIME。 元注解 有一些注解可以修饰其他注解这些注解就称为元注解meta annotation 泛型 编写泛型 注意: 编写静态方法和普通方法时要使用不同的类型,普通有T静态就用k区分类型。 擦拭法 定义: 虚拟机对泛型其实一无所知所有的工作都是编译器做的 Java的泛型是由编译器在编译时实行的编译器内部永远把所有类型T视为Object处理但是在需要转型的时候编译器会根据T的类型自动为我们实行安全地强制转型。 局限 获取类的Class在转型之前所以获取泛型的Class都是一样的Object MyParaInteger m1 new MyParaInteger(23);MyParaString m2 new MyParaString(ss);Class s1 m1.getClass();Class s2 m2.getClass();//MyParaInteger与MyParaString 是两个不同的类//等于是因为他们都变成了MyParaObjectSystem.out.println(s1s2);不能判断类型
通配符 ? extends T允许调用读方法T get()获取T的引用但不允许调用写方法set(T)传入T的引用传入null除外 ? super T允许调用写方法set(T)传入T的引用但不允许调用读方法T get()获取T的引用获取Object除外extends 表示T的子类而super表示T的父类 我的理解: extends只读(null除外):因为转入一个类型时会因为擦拭法变成Object然后Object是所有的父类不是任何的子类。 super只写(Object除外):因为擦拭法会变成Object是所有类的父类所以可以写返回时只能用Object接受。 可以用PECS(生产者和消费者)原则去理解何时用extends何时用super 无限定通配符(?) 它不能读也不能写一般只用来判断是否为Null 类名?时所有类名的超类都可以向上转型为类名? 集合 只要实现了Iterable接口的集合类都可以直接用for each循环来遍历。 重写方法和实现类 equals: List中 index()contains()这些类型的方法要重写 equals和hashcode: Map要重写 实现Comparable:只要需要排序的加入的类都要实现 Collections创建的集合是不可变集合无法向其中添加或删除元素。 unmodifiableList(List) 返回的List不可变 希望把一个可变List封装成不可变List那么返回不可变List后最好立刻扔掉可变List的引用把null赋值给它既可这样可以保证后续操作不会意外改变原始对象从而造成“不可变”List变化了 IO流 读从外部读进内存操作 写从内存写入外部 File 可以表示一个目录和文件 Out/InputStream 读取文件字节 Writer/Reader 读取字符串 几乎所有new的子类都是input和output超类 File传入inputStream再传入Buffer再传入GZIinput 这种叫做Filter模式或者装饰器模式Decorator 字节与字符转换 Reader是带编码转换器的InputStream它把byte转换为char而Writer就是带编码转换器的OutputStream它把char转换为byte并输出。 InputStream input new FileInputStream(src/readme.txt); // 变换为Reader: Reader reader new InputStreamReader(input, UTF-8);Reader需要从InputStream中读入字节流byte然后根据编码设置再转换为char就可以实现字符流。如果我们查看FileReader的源码它在内部实际上持有一个FileInputStream。 同步和异步 同步IO是指读写IO时代码必须等待数据返回后才继续执行后续代码它的优点是代码编写简单缺点是CPU执行效率低。 而异步IO是指读写IO时仅发出请求然后立刻执行后续代码它的优点是CPU执行效率高缺点是代码编写复杂。 Java标准库的包java.io提供了同步IO而java.nio则是异步IO 可以设置编码的类 FileReader(‘路径’,StandardCharsets.UTF_8) Print*类 System.out是标准输出 System.err是标准错误输出。 我们经常使用的System.out.println()实际上就是使用PrintStream打印各种数据。其中System.out是系统默认提供的PrintStream表示标准输出 Files 从Java 7开始提供了Files和Paths这两个工具类能极大地方便我们读写文件。 缺点: Files提供的读写方法受内存限制只能读写小文件例如配置文件等不可一次读入几个G的大文件。读写大型文件仍然要使用文件流每次只读写一部分文件内容。 时间与日期 时区 一种 是以GMT或者UTC加时区偏移表示例如GMT08:00或者UTC08:00表示东八区 二种 另一种是缩写例如CST表示China Standard Time也就是中国标准时间。但是CST也可以表示美国中部时间Central Standard Time USA因此缩写容易产生混淆我们尽量不要使用缩写。 三种 最后一种是以洲城市表示例如Asia/Shanghai表示上海所在地的时区。特别注意城市名称不是任意的城市而是由国际标准组织规定的城市