java基础加强

来源:互联网 发布:java xss防御 编辑:程序博客网 时间:2024/06/08 08:41

软件的建议:

*建议解压到D盘根目录
*激活问题: 使用java -jar me_active.jar 来运行激活软件.

1.MyEclipse快捷键  CTRL ALT SHIFT 学习

CTRL+1  解决问题快捷键
CTRL+SHIFT+o  快速导包
CTRL+SHIFT+F  格式化代码
CTRL+ALT+上下  快速复制选中行
CTRL SHIFT T  快速打开某个类
CTRL SHIFT R  快速打开某个资源
CTRL +T  查看继承关系
CTRL +O  查看类中的所有属性方法.
ALT+/   自动完成拼写
ALT+SHIFT A   切换到矩形编辑模式
F3 查看源代码
ALT + 左右    前进后退
F2 查看详情
ALT+SHIFT+S 呼出菜单
生成get/set
生成构造空参数
生成有参数的构造
重写父类方法
自动生成 比较方法()
自动生成 toString
CTRL+SHIFT+/ \  多行注释 和取消
CTRL + / 单行注释 和 取消
CTRL+SHIFT + x /+Y 切换大小写

2.DeBUG在运行期间调试代码

resume 运行下去,直到下个断点,没有断点直到结束.
step into(F5) 进入方法
step over(F6) 下一行
step return(F7) 跳出方法

3.Junit

优势1:一个测试类中可以有N个测试方法.
优势2:提供了一些其他辅助测试的功能.
使用junit步骤
 1.新建测试类 命名: 要测试的类名+Test结尾
 2. 新建测试方法
1.测试方法必须是public的
2.测试方法必须是void
3.测试方法名称最好test开头 要测试的方法名称结尾
4.测试方法上必须加注解@Test

4.断言:

断言 第一个参数是运行结果的期望值
第2个参数是运行结果
Assert.assertEquals(5,result);
只运行一个方法:
在方法上点击 运行在Junit Test
@Before:在所有测试方法运行之前调运该方法
@After  // 在所有测试方法运行之后调运该方法
@BeforeClass // 在类加载之前调运该方法 一个测试类只运行一次
@AfterClass // 在类加载之后调用该方法  一个测试类只运行一次

5自动装箱,拆箱

Integer i = 10; //自动装箱   Integer i = Integer.valueOf(10);
int a = i; //自动拆箱   int a = i.intValue();
印证原理
1.断点的方法
2. java ==javac==> .class  ==jvm==>运行  反编译查看.class文件
自动拆箱装箱新特性,是 编译器 做的.
注意:
如果int值在-128~127之间 将会返回缓存好的Integer对象

6,可变参数

public void add(int... array,int... array2){   //变长参数的写法
int result = 0 ; 
for(int len = 0 ; len < array.length ; len ++){
result += array[len];
}
return result;
}
注意:
1.变长参数 必须是最后一个参数.
2.变长参数在一个方法中只能出现一次.
调用:
变长参数会被包装成一个数组.
如果调用时,没有传参数.那么相当于传了一个零长数组.

7.增强for循环

iterator  ==>  List Set  ==> Collenction  ==> Iterable
增强for循环可以遍历什么?
1.可以遍历实现了Iterable接口的.
2.数组.
List list = new ArrayList();
list.add("abc");
list.add("abd");
for(Object o : list ){
System.out.print(o);
}
//------------------------------------------
Iterator it = list.iterator();
while(it.hasNext()){
Object o = it.next();
System.out.print(o);
}
//--------------------------------------------
for(Iterator it = list.iterator();it.hasNext();){
Object o = it.next();
System.out.print(o);
}


增强for循环.遍历集合时,使用的就是Iterator来遍历的.
遍历数组时,使用的就是普通for循环遍历的
增强for循环同样是编译器的增强.


增强for循环的作用:
*简化代码
*效率上没有提高
与普通方式不同点:
*无法获得角标的.
*没有角标,无法选择开始遍历的位置
//======================================================

8.泛型

集合也可以看做是一个坛子.为了规范存取.可以为集合定义规则.定义集合中存取的类型. 以上就是泛型.
*使用泛型将错误提前到了编译期.
非泛型集合
List list = new ArrayList();
list.add(10);
list.add("abc");
list.add(new Object());
泛型集合  
尖括号就相当于坛子上贴的标签.限定了集合中的类型,
List<String> list =new ArrayList<String>();
list.add("abc");
list.add(10);  //报错
定义泛型类
在类名后面指定泛型 class Demo2<T> , 其中T表示 ,接受用户在调用时传来的类型.
在下面的方法中,就可以使用T来表示将来传入 的类型
public T getO() {
return o;
}
public void setO(T o) {
this.o = o;
}
定义泛型方法:
public static <T> T echo(T o);
//隐式指定泛型方法的泛型
Demo2.echo("abc");
//显式指定泛型类型
Demo2.<String>echo("abc");
//------------------------------------------------------------------------------------------

9枚举

*对有限个数的对象.进行列举.
*枚举名称直接在类名下面书写即可.例如 : public enum City2 { bj,gz,sh;} 如果枚举项结尾分号不写,那么分号后面不允许跟其他内容.
*枚举中可以有自己的属性. 属性必须声明在枚举项后面.
*枚举中也可以定义构造方法. 构造方法一定是private
*枚举也可以由自己的方法.
*枚举也可以定义抽象方法(了解) , 需要在枚举项声明处实现该抽象方法.
枚举在编译过后 生成的类名如下
public enum City2 ==> public abstract class City2 extends Enum
枚举实际上就是一个类.该类继承了Enum.所以枚举都是Enum的子类.
所以可以使用Enum中的方法 和 可以被枚举
compareTo 比较枚举项
name 返回枚举变量名称
枚举可以被switch
City2 bj = City2.bj;
switch (bj) {
case bj:
System.out.println("城市是北京");
break;
case sh:
System.out.println("城市是上海");
break;
case gz:
System.out.println("城市是广州");
break;
default:
break;
}
//------------------------------------------------------------

10反射

反射实际上就是剖析类.可以获得类的信息 和 类中 构造方法,方法, 属性的信息.


Class 
获得class的方式
1.类名.class
2.new Car().getClass();
3.Class.forName("完整类名");
获得Class的相关信息
getName();获得完整类名
getSimpleName();获得简单类名
newInstance();调用空参构造方法创建对象
getModifiers()获得类的权限
Constructor
获得Constructor方式
getConstructors() 获得所有构造(不包括私有构造)
getDeclareConstructors()获得所有构造(包括私有)
getConstructor(Class... types) 获得指定的构造器(不包括私有构造)
getDeclareConstructor(Class... types)  获得指定的构造器(包括私有构造)
获得Constructor相关信息
getModifiers()获得构造的权限
getName()获得构造函数名称 
getGenericParameterTypes()获得构造函数的参数列表
getGenericExceptionTypes()获得构造函数的异常抛出信息
运行构造函数创建对象
newInstance();调用构造函数获得对象
Method
获得method
getMethods() 获得包括父类的所有公共方法
getDeclareMethods()获得所有自己的所有构造方法(包括私有)
getMethod(Class... types) 获得指定的方法(不包括私有方法)
getDeclareMethod(Class... types)  获得指定的方法(包括私有方法)
获得method相关信息
getModifiers()获得方法的权限
getName()获得方法名称 
getReturnType(); 获得返回值类型
getGenericParameterTypes()获得方法的参数列表
getGenericExceptionTypes()获得方法的异常抛出信息
运行method
invoke(运行该方法的对象,方法的参数); 运行方法

Field
获得field 
getFields(); 获得包括父类的所有公共属性
getDeclarFields();获得所有自己的所有属性(包括私有)
相关信息
getModifiers()获得属性的权限
getName()获得属性的名称
getType()获得属性的类型
对属性进行读写
get(对象) 获得属性的值
set(对象,要设置的属性值) 设置属性的值
注意:在操作私有属性时 可以通过调用setAccessable() 设置是否可以访问 .(慎用)

作业:

实现如下方法
配置文件 如果是这样: UserDao=UserDaoImpl
实现一个方法如下:
public Object getBean(String str){
}
传入配置中的key. 返回一个对象给我.
UserDao  ud = (UserDao)getBean("UserDao");
思考,该方法如果不需要强转如何来设计?(泛型)


*/
0 0
原创粉丝点击