java基础加强

来源:互联网 发布:北京应聘求职软件 编辑:程序博客网 时间:2024/06/05 11:14

day 01

1、快捷键的绑定:windows-->general-->keys-->content assist

2、perspective和view:前者指透视图(多个视图的模块化组合机和显示界面);视图,就是界面一个个的小块界面;

3、工作间和工程:file-->switch workspace,每一个工作间,其公有配置对其所拥有的所有工程起作用;工程就是单个工程。

4、设置单个工程的javac和java:编译和运行。编译配置(windows-->preferences-->java-->compiler);运行环境配置(windows-->preference-->java-->install jar)

5、设置编码模板:java-->editor-->Templates

day 02

1、静态导入:在java 1.5之后的新特性。import static java.lang.Math.max;

2、可变参数:public staic add(int x, ... args){参数是一个数组};

3、自动拆装箱:基本类型和原型之间的自动转换;(享元模式:flyweight)自动装箱只占一个字节的数字的就缓存在内存中,那么就是同一个东西。

4、枚举:抽象类的抽象方法代替每一个if else;抽象方法的每个常量是本身抽象类的匿名内部类实例。

day 03

1、反射

获取一个类的字节码有三种方法:A、知道类名:类名.class;B、有类的实例p,那么p.getClass();C、基本数据类型装载并且返回字节码:Class.forName("java.lang.String");

总之,只要是在源程序中出现的类型都有Class示例对象。比如:int

A、构造方法反射

获取一个类的所有构造方法:Constructor[] constructor = String.class.getConstructors();

获取一个类里面指定的构造方法:Constructor constructor = String.class.getConstructor(StringBuffer.class);括号内使用了可变参数

String str = constructor.newInstance(new StringBuffer("abc"));

B、成员变量反射(将一个类的String类型成员变量值里面的a换成b)

ReflectPoint point = new ReflectPoint(3,5);

Field[] fields = point.getClass.getFields();

for(Field field:fields){

if(field.getType()==String.class){}

String oldValue =(String) field.get(point);

String newValue = oldValue.replace('a','b');

field.set(point,newValue);

}

C、成员方法反射

Method method = String.class.getMethod("charAt",int.class);

System.out.println(method.invoke(str1,1));                                     //invoke方法是调用方法对象的方法。假如str1对应的是null,那么调用的是静态方法

package com.day1;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Collection;
import java.util.Properties;
public class ReflectTest {
 public static void main(String[] args) throws Exception {
  //web开发基本用的是这个,eclipse自动将classpath下的文件自动按照目录结构添加到java的.class文件夹下
  /**
   * 使用类加载器加载配置文件
   */
  InputStream ips0 = ReflectTest.class.getClassLoader().getResourceAsStream("config.properties");
  /**
   * 对于自己这个类来说
   *   相对路径,不加/
   *   绝对路径,加/
   */
  //相对于本类的路径来说
  InputStream ips1 = ReflectTest.class.getResourceAsStream("sources/config.properties");
  //相对于本类的绝对路径来说
  InputStream ips2 = ReflectTest.class.getResourceAsStream("/com/day1/sources/config.properties");
  
  //如果需要保存的话,就用这种方式
  InputStream ips = new FileInputStream("config.properties");
  //InputStream ips = new FileInputStream("src/config.properties");
  Properties props = new Properties();
  props.load(ips);
  ips.close();
  
  String className = props.getProperty("className");
  Collection col = (Collection)Class.forName(className).newInstance();
  ReflectPoint point1 = new ReflectPoint(3, 3);
  ReflectPoint point2 = new ReflectPoint(3, 5);
  ReflectPoint point3 = new ReflectPoint(3, 3);
  //Collection col = new HashSet();
  col.add(point1);
  col.add(point2);
  col.add(point3);
  point1.y = 7;
  col.remove(point1);//其实没有除掉,内存泄露
  System.out.println(col.size());
 }
}

 

原创粉丝点击