黑马程序员_Myeclipse、Class类(Constructor、成员变量、Method、数组)

---------------------- android培训java培训、期待与您交流! ---------------------- 

一个工作空间包括多个project,保留了一个eclipse的一套环境选项的配置,例如所使用的javacjava命令等。

面试:记住写包名。公司网址倒过来写比如:cn.itcast.day1,记住少用没有意义的单词。习惯一旦养成就好了。

Perspective(透视图) 查看某些小窗口的集合

如何查看变量值:debug调试,选中变量,单击右键,watch选择单步调试。

如何设置单个工程的javacjava(基础加强5

高版本的java可以运行低版本的javac,反之则不可。

快捷键的绑定与代码模板:perferences——Editor——templates(插入光标:结束后,光标所在的位置,cursor
import语句可以导入一个类,或者某个包中的所有类。

Importstatic语句导入一个类中的,某个静态方法或所有静态方法 

面试overload(重载)和override(覆盖)的区别?是什么,为什么,并举例说明。

参数不固定的问题?

可变参数的特点:只能出现在参数列表的最后(后面不能在出现参数了);...位于变量类型和变量名之间,前后有无空格都可以;调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。

增强for循环:语法fortype 变量集合变量名){...}

注意事项:迭代变量必须在()中定义!集合变量可以是数组或实现 了iterable接口的集合类。

举例:public static int add(int x ,int ...args){int sum=x;

for (int arg:args){sum+=arg;}return sum;}

基本数据的自动拆装箱及享元设计模式:

自动装箱:integer num1=12;自动拆箱:System.out.println(num1+12);

 面试:享元设计模式(flyweight)(友情提示:内部类考的很多,不能被内部类考晕了)

有很多个小的对象,他们有很多属性相同,把他们变成一个对象,那些不同的属性,把他们变成方法的参数称之为外部状态,相同的属性称为这个对象的内部状态。

枚举的作用介绍:

为什么要有枚举?问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别表示一周,但是有人会写成int weekday=0

枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错,枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。

用普通类如何实现枚举功能,定义一个weekday的类来模拟枚举功能。

私有的构造方法,每个元素分别用一个公有的静态成员变量表示,可以有若干公有方法或抽象方法,例如,要提供nextDay方法必须是抽象的。

好处是,在你编译源程序的时候就发现你的值不合法。

枚举的基本应用:举例:定义一个weekday的枚举;扩展:枚举类的values,valueof,name,tostring,ordinal等方法。总结:枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象。(注意看懂内部类的应用)

枚举的元素列表必须在最前面;创建对象用的是什么构造方法。

举例:public enum TrafficLamp{

RED(30){public TrafficLamp(){return Green;}},Green(45){public TrafficLamp(){return YELLOW;}},YELLOW(5){public TrafficLamp(){return RED;}};

Public abstract TrafficLamp nextLamp();Private int time;(抽象方法)

Private TrafficLamp(int time ){this.time=time;}(构造函数)}

反射的基石——>Class类(大写的C

Java程序中的各个java类属于同一类事物,描述这类事物的java类名就是Class

各个实例对象:对应各个类在内存中的字节码。一个类被加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,不同的类的字节码是不同的,所以他们在内存中的内容是不同的,这一个个的空间可分别用一个个的对象来表示,这些对象显然具有相同的类型,这个类型是什么呢?

那么它描述了那些方面的属性呢?类的名字,类的访问属性,类所属于的包名,字段名称的列表、方法名称的列表,等等。学习反射首先要明白Class这个类。

Class cls1=Person.class//字节码

面试题Class.forName("java.lang.String")的作用?

得到类的(返回)字节码:一个是曾经被加载过,已经呆在java虚拟机里面,直接返回。还有就是java虚拟机没有加载,用类加载器去加载,把加载进来的字节码缓存进虚拟机里面。

如何得到各个字节码对应的实例对象:

类名.class  例如System.class

对象.getclass(),例如 new Date().getclass()

Class.forName("类名"),例如 Class.forName("java.util.Date")<做反射主要用这种>

总之,只要在源程序中出现的类型,都有各自的Class实例对象。

isPrimitive(是否是基本类型的字节码 )

TYPE包装类型所包装的基本类型的字节码?Int.class==Integer.TYPE(true)

 什么是反射?反射就是把java类中的各种成分映射成相应的java类,例如:一个java类中用一个Class的类的对象来表示,一个类中的组成部分:成员变量,方法,构造方法,包等信息也用一个个的java类来表示,就像汽车是一个类,汽车中的发动机,变速箱等等也是一个个的类。表示java类的Class类显然要提供一系列的方法,来获得其中的变量,方法,构造方法,修饰符包等信息,这些信息就是用相应类的实例对象来表示,他们是FieldMethodContructor(构造方法),Package等等

一个类中的每个成员都可以用相应的反射API类的一个实例对象来表示,通过调用Class类的方法可以得到这些实例对象后,得到这些实例对象有什么用呢,怎么用呢,这正是学习和应用反射的要点。

(反射就是把java类中的各种成分(提取)映射成为相应的java类)

JDK1.5的新特性(可变参数)

Constructor 类代表某个类中的一个构造方法:

得到某个类所有的构造方法:

例子Constructor[] contructor=Class.forName("java.lang.String ").getConstructors();

得到某一个构造方法:

Constructor contructor=Class.forName("java.lang.String ").getConstructor(StringBuffer.class);获得方法时要用到类型。

创建实例对象:

通常方式:String str=new String(new StringBuffer("abc"));

反射方式:String str=(String)constructot.newInstance(new StringBuufer("abc"));

调用获得的方法时要用到上面相同类型的实例对象。

Class.newInstance()方法:

例子:String obj=(String)Class.forName("java.lang.String").newInstance();

该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象。

该方法内部的具体代码是怎么样写的呢?用到了缓存机制来保存默认构造方法的实例对象。

成员变量的反射:Field类代表某个类中的一个成员变量,不会对应到变量的具体值。(知识点:暴力反射)

举例:其中定义的变量x是私有的,y是公有的。注意下面代码对二者访问的区别。

ReflectPoint pt1= new ReflectPoint(3,5);

Field fieldY=pt1.getClass().getField("y");//fieldY 的值是多少呢?5吗,错,fieldY不是对象上的变量而是类的。

System.out.println(fieldY.get(pt1));

Field fieldX=pt1.getClass().getDeclaredField("x");

fieldX.setAccessible(true);

System.out.println(fieldX.get(pt1));

重点(21)反射的应用

作业:将任意一个对象中的所有String类型的成员变量所对应的字符串内容中的"b" 改成"a"

Method(代表某个类中的一个成员方法)

得到类中的一个方法:

例子:Method charAt=Class.forName("java.lang.String").getMethod("charAt",int.class);

调用方法:

通常方法:System.out.println(st.charAt(1));

反射方法:System.out.println(charAt.invoke(str,1));

如果传递给Method对像的invoke<调用>()方法的第一个参数是NULL这有着什么意义呢?说明该Method对象对应的是一个静态方法!

理解:为什么要用反射方式执行某个类中的main方法?

并不知道要执行的main方法的类的名字,现在给程序传进来一个参数(字符串),假设这个参数就是就是要启动的那个类的类名。注意类型不对的问题以及解决方案。

数组的反射:具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象。

代表数组的Class实例对象的getSuperClass()方法返回的父类为Object类对应的Class

基本数据类型的一维数组可以被当做Object类型使用,不能当做Object[]类型使用;非基本类型的一维数组,即可以当做Object类型使用,又可当做Object[]类型使用。

 

If this class object represents a class of arrays,then the internal from of the name consists of the name of the element type preceded by one or more [characters representing the depth of the array nesting. 

[I)括号里面的是什么含义:

元素类型

boolean

byte

char

Class or interface

Double

Float

Int 

Long

Short

Encoding(编码)

Z

B

C

Lclassname

D

F

I

J

S

面试小提示:编写程序养成好的编写习惯,注意程序中的细节问题?

---------------------- android培训java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值