java高新技术视频学习1

来源:互联网 发布:如何在手机淘宝上退货 编辑:程序博客网 时间:2024/05/16 14:43

04.eclipse视图管理与程序调试

 

视图就是一个个的小窗口,透视图就是以某种应用功能的视图的集合,如调试透视图,编程透视图,这样便于切换

 

调试:双击添加断点,右键选择debug,选择要查看的变量值,右键选择watch就可以看到了

 

05.配置eclispe的编译与运行环境

 

设置javacjava 选择首选项,编译器属性compiler,运行环境版本要对应或比编译器版本高即java版本要与javac的对应或比javac的高

 

06.eclispe中配置java模板代码

模板代码的应用 右键选择Surround With->try/catch Block 选择配置好的模板

 

添加java模板代码:首选项Preferences->java->Editor->Templates->New

nametryf patterntry${line_selection}(表示选择的内

 

)finally${cursor}(光标停靠位置)

 

07.eclipse中导入已有的工程

把工程放到工作台目录下,在eclipse下选择File->Import...

选择General->Existing Project into Workspace

选择工程目录就行了

同时要考虑原来的运行环境,jre system library 就有区别

如果原来的jre和现在jre版本不同

就要选择工程右键选择build path->Configure build path...

jdk的库删掉,然后添加自己的库

 

 

==========3单元:java5的一些简单新特性===============

08.java5的静态导入与编译器语法设置

 

import语句可以导入一个类或某包的所有类,只是为了少写前缀

import static导入一个类中的某个静态方法或所以静态方法

import static java.lang.Math.max;这样就可以直接调用max()而不加Math前缀了

还有就是jdk1.4是没有这个特性的

 

09.可变参数与OverLoad相关面试题分析

OverloadOverride的区别

Overload是重载的意思,Override是覆盖的意思,也就是重写。

可变参数举例:

             add(int x,int... args){

              int sum = x;

              for(int i=0;i<args.length;i++){

                     sum += args[i];

              }

              return sum;

       }

10.java5的增加for循环

语法:for(type 变量名:集合变量名){}

如:add(int x,int... args){

              int sum = x;

              for(int arg : args){

                     sum += arg;

              }

              return sum;

       }

11.基本数据的自动拆装箱及享元设计模式

装箱:自动把一个基本数据类型装成一个对象。如:Integer  iObj=2

拆箱:把对象转换成基本数据类型如:println(iObj+12);因为Integer不支持加法。

 

享元模式(flyweight):有很多很小对象,他们有很多相同的东西,那你就可以把他们变成一个对象,还有一些不同的东西变成外部的属性作为方法的参数来传入。

举例:

                 Integer i1 = 13;

                       Integer i2 = 13;

                 Integer i3 = 137;

                       Integer i4 = 137;

                       System.out.println(i1 == i2);//整数是一个字节就共享一个对象

                      System.out.println(i3 == i4);

             结果:true

                  false

 

 

 

=================4单元:java5的枚举==================

12.枚举的作用介绍

 

就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就报错

 

13.用普通类模拟枚举的实现原理

 

采用抽象方法定义nextday()将大量的if.else语句转移成了一个个独立的类

 

14.java5的枚举的基本应用

 

public enum WeekDay{

              SUN,MON,TUE,WED,THI,FRI,SAT;

              }

              WeekDay weekDay = WeekDay.FRI;

              System.out.println(weekDay);

              System.out.println(weekDay.name());

              System.out.println(weekDay.ordinal());//排行    

              System.out.println(WeekDay.valueOf("SUN").toString());//转换为枚举元素

              System.out.println(WeekDay.values().length);//把枚举元素放到数组

 

15.实现带有构造方法的枚举

public enum WeekDay{

 

              SUN(1),MON(),TUE,WED,THI,FRI,SAT;

              private WeekDay(){System.out.println

 

("first");}

              private WeekDay(int day)

 

{System.out.println("second");}

16.实现带有抽象方法的枚举

 

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

       }

 

=================5单元:反射的深入讲解===============

17.透彻分析反射的基础_Class

 

描述java类的这类事物的类名就叫Class

字节码的实例对象(Class类型):1、类.class  2、对象.getClass()  3Class.forName("类名")

9个预定义Class实例对象如:

int.class==integer.TYPE

void.class

总之,只要是在源程序中出现的类型都有各自Class实例对象。如int[],void...

18.理解反射的概念

反射技术把java类中的各种成分映射成相应的java

java类的Class类显然提供一系列方法来获取其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用应用类的实例对象来表示,,它们是Field Mothed Contructor Package

一个类中的每个成员都可以用相应的反射API类的一个实例对象来表示,通过调用Class类的方法可以得到这些实例对象后,有什么用,怎么用,这正是学习和应用反射的要点。

 

我就在想,我们可以从内存中获得了字节码,那我们就应该可以再从字节码当中获取其中包含的方法、变量等,只要我们提供足够的信息

 

19.构造方法的反射应用

举例:

   Constructor constructor1 =

String.class.getConstructor(StringBuffer.class);

              String str2 = (String)constructor1.newInstance(new StringBuffer("abc"));

              System.out.println(str2.charAt(2));

注意:StringBuffer.class(类型)和new StringBuffer("abc")

 

和上面类型相同的实例对象)对应

 

20.成员变量的反射

ReflectPoint pt1 = new ReflectPoint(3,5);

              Field fieldY = pt1.getClass().getField("y");

              //fieldY的值是多少?是5,错!fieldY不是对象身上的变量,而是类上,要用它去取某个对象上对应的值

              System.out.println(fieldY.get(pt1));

 

获取私有的成员变量:

Field fieldX = pt1.getClass().getDeclaredField("x");//看得到却取不到

              fieldX.setAccessible(true);//暴力反射

              System.out.println(fieldX.get(pt1));

 

21.成员变量反射的综合案例

将任意一个对象中的所有String类型的成员变量所对应的字符串的

 

b”改成“a”:

private static void changeStringValue(Object obj) throws Exception {

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

              for(Field field : fields){

                     //if(field.getType().equals(String.class)){

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

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

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

                            field.set(obj, newValue);

22.成员方法的反射

举例:

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

              System.out.println(methodCharAt.invoke(str1, 1));

              System.out.println(methodCharAt.invoke(str1, new Object[]{2}));

 

23.对接收数组参数的成员方法进行反射

 

我为什么用反射的方式调:我写程序的时候并不知道这个类,但是到我运行的时候可以通过传递参数的方式调用这类

举例说明:

String startingClassName = args[0];

Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class);

              //mainMethod.invoke(null, new Object[]{new String[]{"111","222","333"}});

              mainMethod.invoke(null, (Object)new String[]{"111","222","333"});

 

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

        int [] a1 = new int[]{1,2,3};

              int [] a2 = new int[4];

              int[][] a3 = new int[2][3];

              String [] a4 = new String[]{"a","b","c"};  

        Object aObj1 = a1;

              Object aObj2 = a4;

              //Object[] aObj3 = a1;Object[]数组中的元素是Objectint []数组中的元素是int。这两个就不能划等号了

              Object[] aObj4 = a3;

              Object[] aObj5 = a4;

                System.out.println(Arrays.asList(a1));//显示不正常

              System.out.println(Arrays.asList(a4));  //调用List Arrays.asList(Object[] a)Object[] a=a4,所以可以调用

25.数组的反射应用(Array()

举例:

private static void printObject(Object obj) {

              Class clazz = obj.getClass();

              if(clazz.isArray()){

                     int len = Array.getLength(obj);

                     for(int i=0;i<len;i++){

                            System.out.println

 

(Array.get(obj, i));

                     }

              }else{

                     System.out.println(obj);

              }

             

       }

原创粉丝点击