黑马程序员_基础加强_1
来源:互联网 发布:js中= 和==和===的区别 编辑:程序博客网 时间:2024/06/04 19:51
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
MyEclipse 是Eclipse的插件 拓展了功能,使其可以用JavaEE的功能
Eclipse关不掉怎么办?
进程javaw 杀掉
JavaEE
ide 集成开发环境
jms
jmx
jndi
缩写。。
IDE开发工具都支持使用工程化方式管理一个项目的程序开发过程,一般来说一个相对独立的项目就是一个工程,一个项目中涉及的多个java文件,资源文件等用一个工程进行管理。
eclipse的使用技巧
Workspace与project
必须会切换工作间与导入项目
Perspective与view
透视图与视图,每一个小窗口叫视图,特定几个窗口的已有布局,叫做透视图
关掉视图后,点击Window-Show View
设置整个workspace的javac与java
设置单个工程的javac与java
(高版本的java可以运行低版本的javac,
但低版本的java不能运行高版本的javac。)
Eclipse中 Window-Preferences-java-Compiler
可以选择用哪个版本编译
Java-Installed JREs 运行时用的哪个版本
各自的工程可以设置不同的快捷键
Window-Preferences
因为快捷键是针对所有开发项目的,所以选通用
General-Keys
Content Assist(补全)
解除快捷键,选中-Remove Binding
在下面的Binding框中,按下自己设定的快捷键
Apply(应用)-OK
搜索下,是否有重复,将其余的解除掉
一个工作间包含多个工程,工作间的设置可以适用于多个工程
Eclipse界面中,右上角有Java和MyEclipse 就是透视图,可切换
Package
报名一般都是公司名:
(去哪儿面试写哪儿的网址 - -)
cn.itcast.interview
类名
StaticImport
若不想叫这个名字了,可以重构
右键,Refactor-Rename
在Eclipse下怎么调试?
双击左侧的标记
右键Watch
(切换到了Debug透视图,右上角)
在eclipse中配置java模板代码
右键 Surround With-Try/catch Block
希望有try finally
Windows-Preferences-Java-Editor(编辑)
Templates(模板)
New 创建新模板
tryf
内容写代码
$(line_selection) 原来的那行写在这里
$(cursor)是光标,函数中内容可以预先设置
导入已有工程
File-Switch Workspace 是切换工作间
方法之一:
工程拷贝到工作间
File-Import-Existiong Projects into Workspace
选择目录,确定
若jdk安装路径不同,需要重新设置
右键-Build Path-Configure Build Path-Libraries
Remove
增加自己的JDR库(等于增加了很多JAR包)
Add JARs
Add External JARs 导入单独的jar包
静态导入与编译器语法设置
使用求两个数的最大值和相减结果的绝对值进行举例,这个例子本身也有学习价值:
Systme.out.println(min(3,9));
System.out.println(abs(3,9));
javac 无意中改成1.4 则静态导入到jdk1.5报错
//import static java.lang.Math.max;
import static java.lang.Math.*;
Math.max(3,6); 选中,按下补全按钮,会有输出语句的选项
可变参数
问题:若一个方法接受的参数个数不固定,例如
add(2,3,5);
add(1,2,3,4);
overload vs override
public static int add(int x,int ...args)
{
...
}
增强for循环
for(type 变量名: 集合变量名)
{。。。}
自动拆箱及享元设计模式(flyweight)
什么是享元模式?
很多个小的对象,他们有很多属性相同,把他们变成一个对象,那些不同的属性,将他们变成方法的参数,称之为外部状态。相同的则为内部状态。
Integer i1=14;
Integer i2=14;
i1==i2? true
Integer i1=137;
Integer i2=137;
i1==i2? false
Integer i3 = Integer.valueOf(3);
Integer i4 = Integer.valueOf(3);
i3==i4? true
枚举
为什么要有枚举
问:要定义星期几或性别的变量,该如何定义?
假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday=0;
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能
私有的构造方法
每个元素分别用一个公有的静态成员变量表示
可以有若干公有方法或抽象方法,例如,要提供nextDay方法必须是抽象的
枚举的基本应用
举例:定义一个Weekday的枚举
扩展:枚举类的Values,ValueOf,name,toString,ordinal等方法
总结:枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象,假如可以调用WeekDay.SUN.getClass().getName和WeekDay.class.getName().
Weekday weekday = "Sunday";
选中Weekday,右键,产生Weekday类
public abstract class WeekDay
{
private WeekDay(){}
public static final WeekDay SUN=new WeekDay(){
public WeekDay nextDay()
{
return MON;
}
};
//WeekDay子类 覆盖父类nextDay方法,直接给返回值
/**
public static final WeekDay MON=new WeekDay(){};
...
public abstract WeekDay nextDay()
{
if(this==SUN)
return MON;
else
if(this==MON)
...
}
**/
public String toString()
{
return this==SUN?"SUN":"MON";
}
}
14 枚举的基本应用
public enum WeekDay
{
SUN,MON,TUE,WED,THI,FFRI,SAT;
}
带有构造方法的枚举
交通灯
public enum WeekDay
{
SUN(1),MON,TUE,WED,THI,FFRI,SAT;
//若要调用第二个,括号中加数字即可。
private WeekdDay(){}
//定义的所有方法,都需放在元素列表之后
private WeekDay(int day){}
public enum TrafficLamp
{
RED(30)(public TrafficLamp nextLamp()
{return GREEN;}
),
GREEN(45)(public TrafficLamp nextLamp()
{return YELLOW;}),
YELLOW(5)(public TrafficLamp nextLamp()
{return RED;});
abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time)(this.time = time;)
}
}
枚举只有一个成员时,可以作为一个单例的实现方式
反射
反射的基石- Class类
Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class
对此提问:众多的人用一个什么类表示?众多的Java类用一个什么类表示?
人:Person
java类:Class
对此提问:Person类代表人,他的实例对象就是张三,李四这样一个个具体的人;Class类代表Java类,他的各个实例对象又分别对应什么呢
对应各个类在内存中的字节码,例如:Person类的字节码,ArrayList类的字节码,等等。
一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,不同的类的字节码是不同的,所以他们在内存中的内容是不同的,这一个个的空间可分别用一个个的对象来表示,这些对象显然具有相同的类型,这个类型是什么呢?
如何得到各个字节码对应的实例对象(Class类型)
1、类名.Class eg:System.Class
2、getClass() eg:new Date().getClass()
3、Class.forName("类名")
eg:Class.forName("java.util.Date");
//反射时常用的,因为可能不知道类名,是传递过来的。
九个预定义Class实例对象:
八个基本类型:(也对应着Class对象)
boolean
byte
char
short
int
long
float
double
+
void
Class cls1=Date.class; //Date对象的字节码;
Class cls2=Person.class; //Person对象的字节码;
p1.getClass();
//得到对象,也可以得到字节码;
Class.forName("java.lang.String");
//也可以得到字节码
//forName的作用是返回字节码
返回字节码的方法有两种:
1、已经被加载过,在JVM中
2、JVM中没有,用类加载器加载进JVM,以后不用再加载了。
System.out.println(cls1.isPrimitive());
//判断是不是基本类型
//String是一个类,不是基本类型
//Int和Integer各有各的字节码
int.class==Integer.TYPE? true
9基本类型:
Boolean.TYPE
Character.TYPE
Byte.TYPE
Short.TYPE
Integer.TYPE
Long.TYPE
Float.TYPE
Double.TYPE
Void.TYPE
数组也是一种类型,但不是基本类型
判断Class是不是数组
int[].class.isArray();
反射的概念
反射就是把Java类中的各种成分映射成相应的java类
例如:一个Java类中用一个Class类的对象来表示,一个类中的组成部分:成员变量,方法,构造方法,包等等信息也用一个个的Java类来表示,就像汽车是一个类,汽车中的发动机,变速箱等等也是一个个的类。表示java类的Class类显然要提供一系列的方法,来获得其中的变量、方法、构造方法、修饰符、包等信息,这些信息就是用相应类的实例对象来表示,他们是Field、Method、Contructor、Package等等
一个类中的每个成员都可以用相应的反射API类的一个实例对象来表示,通过调用Class类的方法可以得到这些实例对象后,很
Constructor 类
Constructor类代表某个类中的一个构造方法
得到某个类所有的构造方法:
例子:Constructor constructors[]=
Class.forName("java.lang.String").getConstructors();
得到某一个构造方法:
Constructor constructor = Class.forName("java.lang.String").getConstructor(StringBuffer.class);
创建实例对象
通常方式:String str=new String(new StringBuffer("abc"));
反射方式:String str = (String)constructor.newinstance(new StringBuffer("abc"));
eg:
Constructor constructor1 = String.class.getConstructor(StringBuffer.class);
String str2 =(String)constructor1.newInstance(new StringBuffer("abc"));
//运行时,才知道constructor1返回的是String类型,所以要加强转(String)才会编译通过。
public class ReflectPoint
{
private int x;
public int y;
右键 Source- Generate Constructor using Fields。。。 选择构造方法源代码
public ReflectPoint(int x,int y)
{
super();
this.x=x;
this.y=y;
}
}
//对其进行反射
ReflectPoint pt1=new ReflectPoint(3,5);
Field fieldY = pt1.getClass().getField("y");
//fieldY不代表具体值
System.out.println(fieldY.get(pt1));
//用fieldY取出pt1对应的值
访问私有化的x
Field dieldX = pt1.getClass().getDeclearedField("x");
fieldX.setAccessible(true);
//将其设置为可以访问(暴力反射)
Field类代表某个类中的一个成员变量
演示用eclipse自动生成Java类的构造方法
问:得到的Field对象时对应到类上的成员变量,还是对应到对象上的? 类只有一个,而该类的实例对象有多个,若是与对相关联,那关联的是哪一个对象呢?所以字段fieldX代表的是x的定义,而不是具体的x变量。
示例代码:
ReflectPoint point = new ReflectPoint(1,7);
Field y = Class.forName("cn.itcast.corejava.ReflectPoint").getField("y");
System.out.println(y.get(point));
//Field x =Class.forName("cn.itcast.corejava.ReflectPoint").getDeclareField("x");
x.setAccesible(true);
System.out.println(x.get(point));
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
- 黑马程序员_基础加强_1
- 黑马程序员_java基础加强_1
- 黑马程序员_基础加强
- 黑马程序员_基础加强
- 黑马程序员_基础加强_枚举
- 黑马程序员_基础加强_反射
- 黑马程序员_基础加强_注解
- 黑马程序员_基础加强_代理
- 黑马程序员_基础加强_枚举
- 黑马程序员_基础加强_注解
- 黑马程序员_基础加强_反射
- 黑马程序员_基础加强_注解
- 黑马程序员_Java基础加强_1.5的新特性
- 黑马程序员_java基础加强_代理
- 黑马程序员_基础加强path1
- 黑马程序员_基础加强path2
- 黑马程序员_基础加强path3
- 黑马程序员_基础加强小结
- Android源代码下载--Memo
- arm平台Linux内核制作
- linux下使用javac java编译运行java工程
- OpenCV学习之CvMat的用法详解及实例
- Infragistics控件使用
- 黑马程序员_基础加强_1
- CocoStudio试用
- ASP.NET整体请求详解
- 黑马程序员_基础加强_2
- 空格导致equals两端不相等问题
- Fedora 14下的vim显示中文乱码解决方法
- struts2中struts.xml 的result 和param
- Vector
- 黑马程序员_交通灯管理系统