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

  • Post author:
  • Post category:其他


———————-

android培训



java培训

、期待与您交流! ———————-

一个工作空间包括多个

project


,保留了一个


eclipse


的一套环境选项的配置,例如所使用的


javac





java


命令等。


面试

:记住写包名。公司网址倒过来写比如:

cn.itcast.day1,


记住少用没有意义的单词。习惯一旦养成就好了。

Perspective

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

如何查看变量值:

debug


调试,选中变量,单击右键,


watch


选择单步调试。

如何设置单个工程的

javac





java


(基础加强


5



高版本的

java


可以运行低版本的


javac


,反之则不可。

快捷键的绑定与代码模板:

perferences


——


Editor


——


templates


(插入光标:结束后,光标所在的位置,


cursor





import

语句可以导入一个类,或者某个包中的所有类。

Importstatic

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


面试



overload


(重载)和


override


(覆盖)的区别?是什么,为什么,并举例说明。

参数不固定的问题?

可变参数的特点:只能出现在参数列表的最后(后面不能在出现参数了);




位于变量类型和变量名之间,前后有无空格都可以;调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。

增强

for


循环:语法


for





type


变量


:


集合变量名)


{…}

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

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


类显然要提供一系列的方法,来获得其中的变量,方法,构造方法,修饰符包等信息,这些信息就是用相应类的实例对象来表示,他们是


Field





Method





Contructor


(构造方法),


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



版权声明:本文为wswdd5460原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。