黑马程序员_java中的小知识

eclipse及IDE开发工具介绍:

IDE开发工具都支持使用工程化方式 管理一个项目的程序开发过程。一般来说一个相对独立的项目就是一个工程。一个项目中涉及多个Java文件,资源文件等用一个工程进行管理。 一个workspace 可以包含多个 project ,一个workspace 保留了 Eclipse 的一套环境选项的配置。如果要为Eclipse再配置一套环境选项,可以再创建一个workspace。

   所以:eclipse 工作台中的所有工程继承工作台的配置,其中某个工程也可以覆盖工作台的配置,Java面向对象的思想。

   1、在Eclipse 中如何设置快捷键:

   Windows->Preferences->General -> Editors ->Key (Content Assist:内容助理) 这样的设置对一个工作台中的所有项目应用。

   注意:设置快捷键时,要解除原来的绑定关系。

   2、设置代码模版:如输入syso,则可以自动补全System.out.println();

   Windows->Preferences->General -> Editors ->Templates

   3、在MyEclipse如何调试: 

  右键->Debug as 便会跳到调试透视图。观看一个变量的值:右键->watch

   关于透视图:很多小窗口的集合。Eclipse 将很多功能小窗口集合成一个透视图,作用于相应的功能。

   4、配置Eclipse 中的编译和运行环境:

  Windows->Preferences->java ->Complier 配置Java程序编译版本     

静态导入与编译器语法设置

package com.itcast.day1;  
import static java.lang.Math.*;//导入全部   
import static java.lang.Math.max;//导入一个   
public class StaticImport {  
    public static void main(String[] args) {  
        //sop(random());   
    }  
    public static void sop(Object obj){  
        System.out.println(obj);  
    }  
}  

实现带有构造方法的枚举,当枚举只有一个成员时,就可以作为一种单例的实现模式

public class EnumTest {  
    public static void main(String[] args) {  
        WeekDay mon = WeekDay.MON;  
        System.out.println(mon);//名称为MON   
        System.out.println(mon.name());//名称为MON   
        System.out.println(WeekDay.valueOf("YYY"));//增加枚举,将"YYY"变为枚举类型   
        System.out.println(WeekDay.values().length);//返回枚举值   
    }  
    public enum WeekDay{  
        //成员列表必须写在所有成员之前   
        SUN,MON,TUE,WED,THI,FRI,SAT;//MON和MON(1)就是表示在构造   
        private WeekDay(){}  
        private WeekDay(int day){}  
          
    }  
    public enum TrafficLamp{  
        RED(30){  
            public TrafficLamp nextLamp() {  
                return GREEN;  
            }  
        },GREEN(45){  
            public TrafficLamp nextLamp() {  
                return YELLOW;  
            }  
        },YELLOW(5){  
            public TrafficLamp nextLamp() {  
                return RED;  
            }  
        };  
        public abstract TrafficLamp nextLamp();  
        private int time;  
        private TrafficLamp(int time){  
            this.time = time;  
        }  
    }  
}  

基本数据类型的自动拆箱和装箱以及FlyWeight设计模式

public class AutoBox {
    public static void main(String[] args) {
//        在1.5以前:一下操作是不行的。
        Integer iObj = 3 ;
//        在1.5以后,自动装箱:将基本数据类型int,自动封装给一个Integer对象
//        类似于:Integer iObj = new Integer(3) ;  
        
        System.out.println(iObj + 10);
        /*        
        自动拆箱:如上操作相当于:
        iObj = new Integer(iObj.intValue() + 10) 
         */        
        
        Integer i1 = 13 ; 
        Integer i2 = 13 ; 
        System.out.println(i1==12);
        /*        
         享元设计模式:flyweight
        有很多个小对象,他们有很多相同的属性,那么将它们封装成一对象,相同的属性称为
        内部属性;不同的属性作为方法的参数。
         */ 
    }
}

泛型

 public class GenericTest {
     public static void main(String[] args) throws IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
         List<Integer> arr = new ArrayList<Integer>() ; 
        //通过反射来验证:泛型只是在编译阶段帮助编写程序时避免存储集合时类型出错。
         arr.getClass().getMethod("add", Object.class).invoke(arr, "abc") ; 
        System.out.println(arr.get(0));
     }
 }

反射

反射不是jdk1.5的新特性。反射就是把Java 类中的各种成分映射成相应的Java类。例如。一个Java类中用一个Class类的对象来表示一个类中的组成部分:成员变量,方法,构造方法,包等信息也

用一个个Java类来表示,就像汽车是一个类,汽车中的发动机,变速箱等等也是一个个的类。表示Java类的Class类显然要提供一系列的方法,来获得其中的变量,方法,构造方法,修饰符,包等信息。

这写信息就是用相应的实例对象来表示,它们是Field、Method、Contructor、Package等。

 

  1、反射的基石->Class 类。

  注意:class 表示类,而Class则是一个类名。Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class。

  Class类描述了哪些方面的信息呢?类的名字,类的访问属性,类所属于的包名,字段名称的列表,方法名称的列表,等等。

 

  问:如Person 类代表人,那么它的实例对象就是张三,李四这样一个个具体的人,Class类代表Java类,他的各个实例对象又分别对应什么呢?

  Class的各个实例对应在内存中的字节码,例如Person 类的字节码,ArrayList 类的字节码等等。一个类被加载器加载到内存中,占用一片存储弓箭,这个空间里面的内容就是类的字节码,不同的类的字节码是不同的,所以它们在内存中的内容是不同的,这一个个的空间可分别用一个个的对象来表示,这些对象显然具有相同的类型

 

  问:如果得到各个字节码对应的实例对象:

  类名.class , 例如System.class 

  对象.getClass() , 例如 new Data().getClass() ;

  Class.forName("类名")

   九个预定义Class对象:booleanbytecharshortintlongfloat 和 double和关键字 void 也表示为 Class 对象。

  > public boolean isPrimitive()

    :判定指定的 Class 对象是否表示一个基本类型。有九种预定义的 Class 对象,表示八个基本类型和 void。这些类对象由 Java 虚拟机创建,与其表示的基本类型同名,即 booleanbytecharshortintlongfloat 和 double

  > Int.Class == Integer.TYPE

数组与Object的关系及其反射类型

import java.lang.reflect.*;  
public class ReflectTest {  
    public static void main(String[] args) throws Exception{  
        int[] a1 = new int[3];  
        int[] a2 = new int[4];  
        int[][] a3 = new int[2][3];  
        String[] a4 = new String[3];  
        System.out.println(a1.getClass()==a2.getClass());  
        System.out.println(a1.getClass().getName());  
        System.out.println(a1.getClass().getSuperclass().getName());  
        System.out.println(a2.getClass().getSuperclass().getName());  
        System.out.println(a3.getClass().getSuperclass().getName());  
        System.out.println(a4.getClass().getSuperclass().getName());  
        System.out.println(String.class.getSuperclass().getName());  
        System.out.println(StringBuffer.class.getSuperclass().getName());  
        //发现a1,a2,a3,a4的super都是objcet所以可以   
        Object aObj1 = a1;  
        Object aObj2 = a4;  
        //Object[] aObj3 = a1;不对 int 不可以直接转为object   
        Object[] aObj4 = a3;  
        Object[] aObj5 = a4;  
    }  
}  
成员方法的反射
public class ReflectMethod {
     public static void main(String[] args) throws  Exception {
         Method charAt = String.class.getMethod("charAt", int.class) ;
 //        反射方法:方法对象调用对象的方法。
         System.out.println(charAt.invoke("abcd", 1)) ; 
     }
 }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值