Java随心记

1,数组,ArrayList, HashSet,  HashMap

数组:有序,长度一定不可变

ArrayList: 有序的,但数组有限定的长度,list功能更强大,长度可变。

HashSet:无序,长度可变,装数据按照key-value规则,不重复,配合Iterator使用。

Iterator it =set.iterator();
while(it.hasNext()){
    sysout(it.next());
}

HashMap:无序,长度可变,装数据按照key-value规则,key不重复

方法1:先获取所有key,然后根据key去map中取value
Set<String> keySet = map.keySet();
for(String key:keySet){
    Integer value = map.get(key);
    System.out.println(key + "," +value)
}

方法2:先获取所有Entry<String,Integer>
Set<Entry<String,Integer>>   entrySet = map.entrySet();
for(Entry<String,Integer> ent:entrySet){
    sysout(ent.getKey() + "," + ent.getValue());
}

2,泛型

泛型就是用来代表一个类型名的参数,可以用于类,也可用于方法,如 public class SortUtil<T>{......},在使用时为SortUtil<String> sort = new SortUtil<>();

3,文件IO

创建文件夹:File file = new File("d:/aaa/bbb/ccc");  file.mkdirs();  判断是否为文件夹: file.isDirectory();

访问文件:File file = new File("d:/aaa/bbb/ccc/d.jpg"); 判断是否为文件: file.isFile();

创建文件:file.createNewFile();

文件输入流:FileInputStream   fis.read();//读一个字节,并将这个字节转成整数返回,文件末尾返回-1;

读取文本文件的封装工具:BufferedReader

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("d:/aaa.txt"),"UTF-8"));

String line = br.readLine();//读一行,如果文件读完后还读,就返回null

4,抽象类

抽象类一般用来做父类,用abstract修饰符修饰,表示是抽象类,抽象类中可以有抽象方法(只有方法定义,没有方法体),子类必须继承抽象方法。

public abstract class AbstractPerson {
    
    public String name;
    public int age;
    
    //abstract 声明这个方法是一个抽象方法
    public abstract void say();
    
    public void eat() {
        System.out.println("正在吃饭......");
    }
    
}

5,反射

主要用来构造一个类的对象,可以根据一个“类全名字符串”,获得代表这个类的class对象,然后根据这个class对象构造出这个类的真正实例对象

String classname = "com.doit.pojo.Person";
Class<?> forName = Class.forName(classname);//forName代表Person.java这个类
Person o = (Person)forName.newInstance();//根据类全名构造类的实例,o代表Person的一个对象

//从forName这个class模板中获取到指定的方法

Method method = forName.getMethod("say");//say方法不需要传什么参数

Method method2 = forName.getMethod("eat",String.class,)//String.class和Class.forName(“java.lang.String”)一样,eat方法需要传一个String类型的参数

//将method在对象上执行

method.invoke(o);

method2.invoke(o,"饺子");

6,continue·和break的区别

for循环中,continue是跳出单次循环,但是会继续执行剩下的循环,break是跳出整个for循环。

7,匿名内部类的使用

new Person(){...};//表示一个匿名内部类的类体  多态:用父类的变量来引用

也可以对接口使用匿名内部类,如常常使用的ICallBack.

8,动态代理

//构造一个LoginService接口的动态代理对象

Proxy.newProxyInstance(LoginService.class.getClassLoader,new Class<?>[LoginService.class]{},new InvocationHandler());

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章