Java基础加强

1、MyEclipse的使用
工作空间(workspace)、工程(project)
在eclipse下Java程序的编写和运行,及java运行环境的配置。
快捷键的配置,常用快捷键:
内容提示:Alt + /
快速修复:Ctrl + 1
导包:Ctrl + shift + O
格式化代码块:ctrl + shift + F
大小写转换:变大写 Ctrl+Shift+x 变小写Ctrl+Shift+Y
添加注释 Ctrl+Shift+/
除去注释 Ctrl+Shift+\

2、Debug的使用
断点调试模式
(1)跟踪程序的运行状态;(2)方便查看程序的源代码.
设置断点:双击该行
Step Over : 跳过 F6
Resume:跳到下一个断点 如果没有 程序执行结束. F8
Step Into : 跳入(压栈) F5
Drop to Frame:回到方法的最定端
Step Return:跳出方法(弹栈) F7
去除断点:
在debug视图中 右上角 breakpoints

3、Junit的使用
测试方法:必须是 public void 不能传入任何的参数 public void demo1(){}

@Test :标识这个方法 需要进行测试.
@Ignore :忽略 这个方法不参与测试.
@Before :标记在每个测试方法之前都会执行
@After :标记在每个测试方法之后都会执行
@BeforeClass:标记 会在测试方法之前执行一次 这个方法必须是static
@AfterClass:标记 会在测试方法之后执行一次 这个方法必须是static

4、JDK5.0新特性
泛型
枚举
静态导入
自动装箱/拆箱
for/in语句(增强for循环)
可变参数
注解、字符串格式化、Java5线程并发库

5、泛型(Generic) —泛形的作用
JDK5以前,对象保存到集合中就会失去其特性,取出时通常要程序员手工进行类型的强制转换

JDK5中的泛形允许程序员使用泛型技术限制集合的处理类型
List<String> list = new ArrayList<String>();

注意:泛型是提供给javac编译器使用的,它用于限定集合的输入类型,让编译器在源代码级别上,即挡住向集合中插入非法数据。但编译器编译完带有泛形的java程序后,生成的class文件中将不再带有泛形信息,以此使程序运行效率不受到影响,这个过程称之为“擦除”。

泛形的基本术语,以ArrayList<E>为例:<>念着typeof
ArrayList<E>中的E称为类型参数变量
ArrayList<Integer>中的Integer称为实际类型参数
整个ArrayList<Integer>称为参数化类型ParameterizedType

使用Type-Safe的集合对象
List
Set
Map

泛型的类型转换
List<Integer> ints = new LinkedList<Integer>();
List<Number> nums = new LinkedList<Integer>();

6、自定义泛型——泛型方法
Java程序中的普通方法、构造方法和静态方法中都可以使用泛型。方法使用泛形前,必须对泛形进行声明,语法:<T> ,T可以是任意字母,但通常必须要大写。<T>通常需放在方法的返回值声明之前。例如:
public static <T> void doxx(T t);
练习:
编写一个泛形方法,实现指定位置上数组元素的交换。
编写一个泛型方法,接受任意一个数组,颠倒数组中所有元素
注意:
只有对象类型才能作为泛型方法的实际参数(Integer)。
在泛型中可以同时有多个类型,例如:
public static <K,V> V getValue(K key) { return map.get(key);}

泛型类
如果一个类多处都要用到同一个泛型,这时可以把泛形定义在类上(即类级别的泛型),语法格式如下:
public class GenericDao<T> {
private T field1;
public void save(T obj){}
public T getId(int id){}
}

注意,静态方法不能使用类定义的泛形,而应单独定义泛形。

7、枚举类
为什么需要枚举?
一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决
JDK 5新增的 enum 关键字用于定义一个枚举类
创建枚举格式:
enum 枚举类型名称 {
枚举对象1名称,
枚举对象2名称,
… ,
枚举对象n名称;
}
员工、角色案例

枚举类具有如下特性:
枚举类也是一种特殊形式的Java类。
枚举类中声明的每一个枚举值代表枚举类的一个实例对象。
与java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有的(这点不难理解)。
枚举类也可以实现接口、或继承抽象类。
JDK5中扩展了swith语句,它除了可以接收int, byte, char, short外,还可以接收一个枚举类型。
若枚举类只有一个枚举值,则可以当作单态设计模式使用。

枚举类API
Java中声明的枚举类,均是java.lang.Enum类的孩子,它继承了Enum类的所有方法。常用方法:
name() 返回枚举对象名称
ordinal() 返回枚举对象下标
valueof(Class enumClass, String name) 转换枚举对象
自定义的枚举类 在编译阶段自动生成下面方法
valueof(String name) 转换枚举对象
values() 获得所有枚举对象数组
思考
枚举对象、枚举对象下标、枚举对象名称表示之间的转换

8、静态导入
JDK 1.5 增加的静态导入语法用于导入类的某个静态属性或方法
使用静态导入可以简化程序对类静态属性和方法的调用。
语法:
Import static 包名.类名.静态属性|静态方法|*
例如:
import static java.lang.System.out;
import static java.util.Arrays.sort;
import static java.lang.Math.*;

9、自动装箱
JDK5.0的语法允许开发人员把一个基本数据类型直接赋给对应的包装类变量, 或者赋给 Object 类型的变量,这个过程称之为自动装箱。
自动拆箱与自动装箱与之相反,即把包装类对象直接赋给一个对应的基本类型变量。
典型应用:
List list = new ArrayList();
list.add(1);
int j = (Integer)list.get(0);

10、for/in语句
引入增强for循环的原因:抛弃Iterator
for/in语句的适用范围
遍历数组
遍历实现Iterable接口的集合类
语法格式:
for(变量类型 变量 :需迭代的数组或集合){

}

11、可变参数
从JDK 5开始, Java 允许为方法定义长度可变的参数
public void foo(int … args){ }
注意事项:
调用可变参数的方法时, 编译器将自动创建一个数组保存传递给方法的可变参数,因此,程序员可以在方法体中以数组的形式访问可变参数
可变参数只能处于参数列表的最后, 所以一个方法最多只能有一个长度可变的参数
可变参数方法的要求
一个方法最多只能有一个可变参数;
可变参数必须是最后一个参数;
可变参数只能出现在方法的形参中,局部变量或属性是不能使用这种东西的。

12、反射
JavaSE中的高级特性
什么是反射?
剖析Java类中的各个组成部分映射成一个个java对象
类 java.lang.Class
java.lang.reflect
构造方法 Constructor
成员变量 Field
方法 Method

反射用在哪里
多用于框架和组件,写出复用性高的通用程序

13、Class类
Java中java.lang.Class类用于表示一个类的字节码(.class)文件

如何得到某个class文件对应的Class对象
已知类和对象的情况下
类名.class
对象.getClass() ---- Object类提供
未知类和对象的情况下
Class.forName(“包名.类名”)

Class类代表某个类的字节码,并提供了加载字节码的方法:forName(“包名.类名”)
forName方法用于加载类字节码到内存中,并封装成一个Class对象

14、Constructor类
Constructor类的实例对象代表类的一个构造方法

得到某个类所有的构造方法
Constructor [] constructors= Class.forName("java.lang.String").getConstructors();

得到指定的构造方法并调用
Constructor constructor = Class.forName(“java.lang.String”).getConstructor(String.class);
String str = (String)constructor.newInstance(“abc”);

Class类的newInstance()方法用来调用类的默认构造方法
String obj =(String)Class.forName("java.lang.String").newInstance();

15、Field类
Field类代表某个类中的一个成员变量,并提供动态的访问权限
Field对象的获得
得到所有的成员变量
Field[] fields = c.getFields(); // 取得所有public属性(包括父类继承)
Field[] fields = c.getDeclaredFields(); // 取得所有声明的属性
得到指定的成员变量
Field name = c. getField("name");
Field name = c. getDeclaredField("name");
设置Filed变量是否可以访问
field. setAccessible(boolean);
Field变量值的读取、设置
field.get(obj)
filed.set(obj,value);

16、Method类
Method类代表某个类中的一个成员方法
Method对象的获得
获得所有方法
getDeclaredMethods()
getMethods()
获得指定的方法
getDeclaredMethod(String name, Class<?>... parameterTypes)
getMethod(String name, Class<?>... parameterTypes)

通过反射执行方法
invoke(Object obj, Object... args)
如果执行static方法 ,第一个参数obj 传入 null

五、Java基础加强的更多相关文章

  1. Java基础学习笔记五 Java基础语法之面向对象

    面向对象 理解什么是面向过程.面向对象 面向过程与面向对象都是我们编程中,编写程序的一种思维方式.面向过程的程序设计方式,是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程.例如:公司打扫卫生( ...

  2. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  3. Java基础知识陷阱系列

    Java基础知识陷阱系列 今天抽空把Java基础知识陷阱有关的文章汇总于此,便于大家查看. Java基础知识陷阱(一) Java基础知识陷阱(二) Java基础知识陷阱(三) Java基础知识陷阱(四 ...

  4. java基础解析系列(五)---HashMap并发下的问题以及HashTable和CurrentHashMap的区别

    java基础解析系列(五)---HashMap并发下的问题以及HashTable和CurrentHashMap的区别 目录 java基础解析系列(一)---String.StringBuffer.St ...

  5. JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题

    JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...

  6. Java基础 String 裸暴力算法- 五个小练习

      之间的博客,承上启下:    Java基础 String/StringBuff 常用操作方法复习/内存分析 Java数组直接选择排序.sort()排序 Java基础 String 算法 - 五个练 ...

  7. 推荐五个java基础学习网站,小白必备

    不知道去哪找java基础资料?推荐几个学习网站,小白必备 Java经过20多年的发展,仍然是世界上最受欢迎的编程语言之一,有无限多种方法使用Java.拥有庞大的客户群.并且java应用范围很广,基本只 ...

  8. Java实习生常规技术面试题每日十题Java基础(五)

    目录 1.启动一个线程是用run()还是start()? . 2.线程的基本状态以及状态之间的关系. 3.Set和List的区别,List和Map的区别? 4.同步方法.同步代码块区别? 5.描述Ja ...

  9. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  10. JAVA基础第五章-集合框架Map篇

    业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...

随机推荐

  1. Visual Studio进行Web性能测试- Part II

    Visual Studio进行Web性能测试- Part II 2012-08-31 14:34 by 知平软件, 7557 阅读, 5 评论, 收藏, 编辑 原文作者:Ambily.raj 对于一个 ...

  2. DES算法原理完整版

    1.所需参数 key:8个字节共64位的工作密钥 data:8个字节共64位的需要被加密或被解密的数据 mode:DES工作方式,加密或者解密 2.初始置换 DES算法使用64位的密钥key将64位的 ...

  3. 【C++】C++中const与constexpr的比较

    先说结论相同点:const和consexpr都是用来定义常量的.不同点:const声明的常量,初始值引用的对象不一定是一个常量:constexpr声明的常量,初始值一定是常量表达式. constexp ...

  4. TLB的作用及工作原理

    TLB的作用及工作过程 以下内容摘自<步步惊芯——软核处理器内部设计分析>一书 页表一般都很大,并且存放在内存中,所以处理器引入MMU后,读取指令.数据需要访问两次内存:首先通过查询页表得 ...

  5. mysql存储过程详解 mysql存储过程和函数

    第20章:存储程序和函数 目录 20.1. 存储程序和授权表 20.2. 存储程序的语法 20.2.1. CREATE PROCEDURE和CREATE FUNCTION 20.2.2. ALTER ...

  6. glide引出恶心的git submodule

      起因 某一天一个同事,在看那个glide,然后我路过,看到他为何不编译“glide”项目(他说,编译中出错,反正都是看源码而已,所以就懒得搞,然后我出于“好心”,给他弄一下,我擦) 报错: Pro ...

  7. 检查linux的磁盘空间占用

    先初步看看哪个目录占用最大$ df -h 然后细看遍历某目录的占用情况:$ sudo du -a /data  | sort -nr | less(单位是KB)

  8. iOS开发之duplicate symbols for architecture x86_64错误

    [主要内容:] 1. 错误提示 2. 分析错误原因 3. 解决问题办法 一.错误提示   在我们写代码过程中可能会经常遇到这样一个错误: <span style="font-size: ...

  9. vue element-ui 的奇怪组件el-switch

    https://segmentfault.com/q/1010000010008343

  10. C# SMTP 邮件发送之QQ邮箱篇

    邮件发送大家都已经非常熟悉了,微软自带的System.Net.Mail也很好用,那为什么还要说呢? QQ邮箱的SMTP以前是非SSL,用未加密的25端口,后来发送都改成SSL了,端口为465或587( ...