---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流流! ----------------------
高新技术(1)知识点
1,Eclipse使用技巧:
插件的关系。扩展Eclipse的功能.
Eclipse是用Java开发出来的,启动时实际上运行的是Java.exe,Java.exe启动一个Java类,
Java类运行效果是一个界面。
小知识:假如Eclipse关不掉,可以进入进程管理,将javaw.exe结束 就可以关掉。
Eclipse是一种IDE开发工具。
2),Java ee的简写:Java 2 Platform Enterprise Edition
ide(集成开发环境)的简写:Integrated Development Environment的英文缩写
jms的简写:Java Message Service,Java消息服务
jmx的简写:(Java Management Extensions,即Java管理扩展)
jndi的简写:(Java Naming and Directory Interface,Java命名和目录接口)
3),NetBeansIDE:
NetBeans 由Sun公司(2009年被甲骨文收购)在2000年创立,它是开放源运动以及开发人员和
客户社区的家园,旨在构建世界级的Java IDE。NetBeans当前可以在Solaris、Windows、Linux
和Macintosh OS X平台上进行开发,并在SPL(Sun公用许可)范围内使用。
4),JBuilder(收费的用的人不多):
Jbuilder是一个可视化JAVA开发工具。它是在Java2平台上开发商业应用程序、数据库、
发布程序的优秀工具。它支持J2EE,所以程序员可以快速的转换企业版Java应用程序。
第三方的类以jar包的形式存。
5),工程:
一般来说一个相对独立的项目就是一个工程,一个项目中涉及的多个Java文件,资源文件等用
一个工程进行管理。在不使用工程管理的情况下,如果一个项目中包括多个Java源文件,编程
人员需要精心维护这些源文件之间,以及源文件与其他文件的目录关系,需要逐一编译这些源
文件,需要手工启动运行编译后的结果,如果每一个程序的所有源文件用一个工程来组织,开
发工具能对所有源文件集中管理,记住每个源文件的位置和相互关系,工程中有那几个源文件
,启动类是那个,启动参数设置等配置信息在工程中都有记录。
2,静态导入:
import static 语句导入一个类中的某个静态方法或所有静态方法。
可变参数的特:
只能出现在参数列表的最后。
...位于变量类型和变量名之间。前后有无空格都可以;
调用可变参数的方法时候,编译器为该可变参数隐含创建一个数组,
在方法体上以数组的形式访问可变参数。
public class VarableParameter {
public static void main(String[] args) {
System.out.println(add(2,3));
System.out.println(add(2,3,5));
}
public static int add(int x,int ... args){
int sum = x;
for (int i = 0; i < args.length; i++) {
sum+=args[i];
}
return sum;
}
}
4,增强for循环:
注意事项:
1,迭代变量必须在()中定义。
2,集合变量可以是数组或实现了Iterable接口的集合类。
举例:
public static int add(int x,int...args){
int sum= x;
for(int arg:args){
sum+=arg;
}
return sum;
}
5,基本数据类型的自动装箱与拆箱:
由来:当对象数量太多时,将导致运行代价过高,带来性能下降等问题,享元模式为解决这一类
问题而诞生的。享元模式通过共享技术实现相同或相似对象的重用。
优点:提高程序效率和性能的模式,会大大的增加程序的运行速度。极大的减少了内存中,对象
的数量,使得相同对象在内存中只保存一份。
1),常量:
可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
Java代码 :
public enum Color {
RED, GREEN, BLANK, YELLOW
}
2),定义一个枚举类:
public enum WeekDay{
SUN(1),MON(),TUR,WED,THI,FRI,SAT;
private WeekDay(){
System.out.println("frist");
}
private WeekDay(int Day){
System.out.println("sencod");
}
}
3),枚举中的抽象方法的应用
public enum TracfficLamp{
RED(30){
public TracfficLamp nextLamp() {
return GREEN;
}
},
GREEN(45){
public TracfficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(10){
public TracfficLamp nextLamp(){
return RED;
}
};
public abstract TracfficLamp nextLamp();
private int time;
private TracfficLamp (int time ){
this.time = time;
}
}
例如:众多的人用Person类来描述,而众多的Java类则用Class来描述。
加载到内存中,接着才可以用它创建出对象。当我们程序中用到了很多的Java类,我们的内存
中就应该有与之对应的字节码。
得到一个类的字节码有两种情况:
第一种:这个类的字节码已经加载到内存中来了,不需要加载了,直接找到字节码返回即可。
第二种:这个类的字节码在虚拟机中还没有字节码,于是用类加载器加载,加载以后就把那份字节码缓
存起来,同时这个方法返回刚才加载那份字节码。
4),得到字节码的方法有三种:
1,)类名.class 例如:System.class
2,)对象.getClass(),例如:new Date().getClass()
3,)Class.forName("类名"),例如Class.forName("Java.util.Date");
反射中主要使用的是第三种。
5),九个预定义Class实例对象:
(boolean,byte,char,short,int,long,float,double,void)
参看Class.isPrimitive方法的帮助
基本数据类型使用的Class实例对象是 int class = Integer.TYPE.
数组类型的Class示例对象使用的是Class.isArray()
总之只要是在源程序中出现的类型,都有各自的Class实例对象。
6),反射的概念:
反射就是把Java类中的各种成分映射成相应的Java类。
7),Constructor类:
Constructor类代表某个类中的一个构造方法。
Constructor中的newInstance 和Class类中的newInstance方法有什么关系?
关系是:提供便利。
例如可乐的例子:你每天要喝可乐,我每天都要去买可乐给你喝,那还不如 我把可乐
买回来,直接给你喝一样了。提供了便捷
反射比较占用性能。
8),Field类:
比较字节码 一定要用 == 号 不要用equals方法。
set方法暴力访问;
9),Method类:
JDK1.4和JDK1.5中的方法invoke区别:
JDK1.5是有可变参数的,而JDK1.4不支持可变参数
ReflectPoint pt1 = new ReflectPoint (3,5);
Field filed = pt1.getClass().getField("y");
//filed Y的值是多少?是5就是错的。filed Y 不是对象身上的变量,而是类上的,要用它去取某个对象上对应的值
System.out.println(filed.get(pt1));
Field filed1 = pt1.getClass().getDeclaredField("x");
filed1.setAccessible(true);//暴力访问
System.out.println(filed1.get(pt1));
1),Method charAt=String.getMethod("charAt",int.class);//方法名为charAt参数为int
调用方法:
通常方式:String.charAt(int);
反射方式:charAt.invoke(String,1);当invoke()的第一个参数为null,说明该Method对象对应的是一个静态方法。
//invoke执行方法
2),用反射方式执行某个类中的main方法
即public static void main(String[] args),通过反射方式来调用这个main方法
jdk1.5,整个数组是一个参数,jdk1.4 数组中的每个元素对应一个参数,为了向下兼容,还是采用jdk1.4的方式。
mainMethod.invoke(null,new Object[](new String[]{}));
或mainMethod.invoke(null,(object)new String[]{});
编译器会作特殊处理,编译时不把参数当作数组看待。
10),数组的反射:
基本类型的一维数组可以被当作Object类型使用,不能当作Object[]类型使用;
具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象
非基本类型的一维数组,即可以当作Object类型使用也可以当作Object[]类型使用。
Arrays.asList()处理int类型数组和String类型数组的差异。
int用System.out.print()打印的还是地址。而String可以打印对象的属性值。
Array工具类用于完成对数组的反射操作
11),ArrayList和HashSet的 比较以及Hashcode的分析:
Hashcode方法的作用:提高性能。
内存泄露的问题:
当一个对象被存储进hashset集合以后,就不能再修改对象中的那些参与计算哈希算法的那些字段,
否则会造成内存泄露。表面上程序代码在不断增加对象,删除对象,但实际内存中并没有删除,
该对象以后不再用了,可是内存中却一直存在,造成浪费,最终导致内存泄露。
例子:
public static void main(String[] args) {
Set<Person> set = newHashSet<Person>();
Person p1 = new Person("小强",25);
Person p2 = new Person("旺财",26);
Person p3 = new Person("猪猪",27);
set.add(p1);
set.add(p2);
set.add(p3);
System.out.println("总共有:"+set.size()+" 个元素!"); //结果:总共有:3个元素!
p3.setAge(2); //修改p3的年龄,此时p3元素对应的hashcode值发生改变
set.remove(p3); //此时remove不掉,造成内存泄漏
set.add(p3); //重新添加,居然添加成功
System.out.println("总共有:"+set.size()+" 个元素!"); //结果:总共有:4个元素!
for (Person person : set)
{
System.out.println(person);
}
}
12),反射的作用——>实现框架功能:
工具类和框架的区别:工具类是被用户所调用,而框架则是调用用户提供的类。
示例演示:
public static void main(String[] args) throws IOException,InstantiationException, IllegalAccessException,ClassNotFoundException {
//模拟一个框架
//定义一个文件字节流来读取文件
FileInputStream ips = newFileInputStream("config.properties");
//定义一个properties对象。
Properties props = new Properties();
//将Properties对象和流想关联
props.load(ips);
//关闭资源
ips.close();
//反射
String className = props.getProperty("className");
Collection coll =(Collection)Class.forName(className).newInstance();
//创建ReflectPoint类对象
ReflectPoint pt1 = new ReflectPoint(3,3);
ReflectPoint pt2 = new ReflectPoint(5,5);
ReflectPoint pt3 = new ReflectPoint(3,3);
//将ReflectPoint类对象添加到Collection集合中
coll.add(pt1);
coll.add(pt2);
coll.add(pt3);
coll.add(pt1);
// System.out.println(pt1 ==pt1);
// System.out.println(pt1.equals(pt1));
// System.out.println(coll.size());
// pt1.y =1;
// coll.remove(pt1);
// coll.add(pt1);
System.out.println(coll.size());
}
8,JavaBean(内省):
2,JavaBean的属性:
一个符合JavaBean的特点的类可以当作普通类一样进行使用,但把它当JavaBean用肯定需要带来一些额外的
好处,我们才会去了解和应用JavaBean。
3,JavaBean的好处:
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------