1、学习中javaweb01 Java基础加强 一、MyEclipse使用Eclipse的工作空间必须起名为纯英文的。JDK开发环境JRE运行环境java里边类的访问权限有两种:public和default,修饰符:abstract和final。一、Java运行环境的配置第一个问题说明:编译器的版本过高而运行环境版本过低,会导致出现如下错误:注意此时的JRE System Library为MyEclipse6.5两种解决办法:1)将编译器的版本降低2)改变运行环境先选中该工程Projectpropertiesjava build Pathlibraries选中下边的JREremove add Li
2、braryJRE System LibraryNextAlternate JRE制定JRE路径finish完成以后,JRE System Library将变为jdk1.6.0_29。先选中该工程ProjectpropertiesJava Compiler此时即可看到java运行环境也是6.0,如下图所示:最后在运行java程序则正常了。总结1:java build Path可修改编译器;Java compiler可修改运行时环境。2、以断点的方式查看程序问题 Debug As如果程序出现问题,最好以断点的方式去运行程序(Debug As)双击左边部分,会出现一个小蓝点,这就是断点的标志。,如下
3、图:在要设置断点的地方双击行号左边部分,即可增加一个断点,然后 右键/RunDebug AsJava Application在出现的对话框中选YES即可打开Debug视图(Perspective)清除断点(Debug视图下右上角有一个Breakpoints窗口),点击下图中圆圈的叉便可全部删除断点(remove all breakpoints)。快速查找方法:F5跳入(step into),如下图中红圈内的按钮,F6图中右边一个按钮(表示跳过此步,执行下一步)F7跳出此方法并返回开始处。选中变量右键Watch就可以查看变量值在Debug视图下,在增加断点Resume(下图中绿色三角按钮)即可直
4、接定位到下一个断点处。最终一定要关闭断点调试。总结2:F5:step intoF6:step overF7:step returnDrop to frame:跳到当前方法的第一行Resume:跳到下一个断点(如果没有下一个断点,则运行完此程序)Watch:观察变量或表达式的值。断点注意的问题:1.调试完成后,要在breakpoints中清除所有断点2.一定要结束运行断点的JVM3、配置MyEclipse的快捷键Windowpreferences输入key alt+/ :内容提示 快速修复:ctrl+1 格式化代码:ctrl+shift+F 导入包:ctrl+shift+O 向前向后:Alt +
5、 方向键 查看方法说明:F2 更为大写:Ctrl+shift+x 更为小写:Ctrl+shift+y 更换两行的位置:Alt+方向键 查看类的继承关系:ctrl+T 重置透视图:windowReset Perspective 列出所有的快捷键:Ctrl+shift+L 粘贴源码Attach Source若源码以文件夹形式存放时,选External Folder;若源码以文件 形式存放,则选External File。 查看源码:Ctrl+点击内容 或 ctrl+shift+T,会出现如下面板,然后在红框里边输入要查看的内容即可。 二、JDK5.0新特性 静态导入import static 包名
6、.类名.静态属性|静态方法|* 自动装箱、拆箱eg.Integer i=1; /装箱(把基本类型自动转为对象装入i变量中)int j=i; /拆箱(把对象自动转为基本类型) 增强for循环只能用在 数组、或实现Iterator、Iterable接口 的集合类上。for(变量类型 变量:需迭代的数组或集合)。因为Map没有实现Iterable接口,则Map不能直接使用for循环增强来遍历,方法:通过Iterator得到Map的每个key,在通过key,并通用map.get(key)得到key相应的值。 可变参数Class类:public Constructor getConstructor(Cl
7、ass. parameterTypes)Arrays类:public static List asList(T. a) T是对象类型就是 传入数组的时候应传入对象数组eg: int num;不行 ,而 Integer num;就可以,因为Integer修饰的为对象类型的数组,即每一个数组元素都是对象类型。 枚举和定义枚举enum 一个枚举也可有构造函数、字段和方法带抽象方法的枚举:在创建枚举的每个对象的时候,要实现枚举中的抽象方法。枚举值相当于类的对象枚举类的特性:1.枚举类是一种特殊形式的java类;2.其中声明的每一个枚举值代表枚举类的一个实例对象;3.枚举的构造函数必须是私有的.4.枚举
8、类也可实现接口或继承抽象类。5.JDK5.0扩展了switch语句,它除了可接收int,byte,short,char外,还可接收枚举类型。6.若枚举类只有一个枚举值,则可当做单例模式使用。/相当于用单例模式定义了一类enum Only /class Only; /Objectjava.lang类 EnumE extends Enum常用方法:name() 名称 ,ordinal() 序号(从0开始),valueOf(Class enumType,String name),values()此方法在JDK中没有,但每个枚举类都有该方法,它用于遍历所有枚举值。 反射技术反射用在框架中。框架是基于配
9、置文件的一个类有多个组成成分,如:成员变量,方法,构造方法等。反射就是加载类,并解剖出类的各个组成成分。1.加载类:/1. forName(className)-参数必须为完整类路径,但不包括后缀名.java。Class c1 = Class.forName(javaSE.Person);/2. getClass()Class c2 = new Person().getClass();/3. XXX.clsssClass c3 = Person.class;2.剖析类:Class类中:-得到public方法getConstructor(Class. parameterTypes)getFiel
10、d(String name)getMethod(String name,Class. parameterTypes)-得到所有方法,包括private方法getDeclaredConstructor(Class. parameterTypes)getDeclaredField(String name)getDeclaredMethod(String name, Class. parameterTypes)剖析出这些方法以后,有什么用?构造函数-初始化,创建对象字段-封装数据方法-执行某个功能反射类的构造函数利用构造函数创建对象:Constructor类中:newInstance(Object.
11、 initargs)eg1. 对于public方法Class c1 = Class.forName(javaSE.Person); / 参数可控制你想反射的构造函数是哪个/此处得到的构造函数是 public Person(String name)-参数传入.class对象Constructor con1 = c1.getConstructor(String.class); /创建Person的实例Person p1 = (Person) con1.newInstance(xxx);eg2 :对于private方法通过暴力反射可以使外界访问类中的私有方法。Class c4 = Class.for
12、Name(javaSE.Person);Constructor con4 = c4.getDeclaredConstructor(List.class);con4.setAccessible(true);/暴力反射,打开private访问权限,使该私有方法可以被外界访问Person p4 = (Person) con4.newInstance(new ArrayList();反射类的方法通过Class类中的方法getMethod(String name(方法名称),Class. parameterTypes)得到该类中方法。然后通过java.lang.reflect 类 Method中的方法:
13、Object invoke(Object obj, Object. args)调用。eg1:注意传入的参数Person p = new Person();Class c = Class.forName(javaSE.Person); /getMethod(String name(方法名称),Class. parameterTypes)Method m2 = c.getMethod(aa2,String.class,int.class);m2.invoke(p, Lily,34);/注意第一个参数是对象,后边为可变参数,此处传入一个字符串和一个整数反射类的main方法 Test public v
14、oid test5() throws Exception Person p = new Person(); Class c = Class.forName(javaSE.Person); Method m5 = c.getMethod(main, String.class); /* * m5.invoke(p,new Stringa); * 若传入参数为String数组,则会抛出异常: * java.lang.IllegalArgumentException: argument type mismatch * 因为main方法里的参数只有一个(为String类型的参数) */ m5.invoke(p,(Object)new String1); /当传入的参数为Object时,将数组转为Object,就称为了一个参数,就不会报错了 反射类的字段字段-用来封装数据Person p = new Person();Class c = Class.forName(javaSE.Person);Field f1 = c.getField(name);/其中name是Person类中的一个字段名称O
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1