黑马程序员_java中的小知识

来源:互联网 发布:java web classpath 编辑:程序博客网 时间:2024/05/17 22:24

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)) ;      }
 }



0 0
原创粉丝点击