黑马程序员_高薪技术(一)

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


1、 常见缩写:
        IDE -->Itegrity development environment 集成开发工具

        GUI -->Graphical User Interface 图形化界面

        CLI -->Command Line Interface 命令行方式

        JVM -->Java Virtual Machine Java虚拟机

        JRE -->Java Runtime Environment Java运行环境

        JDK -->Java Development Kit Java开发工具包

        API -->Application Programming Interface 应用程序接口

        Awt -->Abstract Window ToolKit 抽象窗口工具包

        DNS  -->域名解析服务
        
        DOM  -->document object model 文档对象模型

        TCP -->Tracsmission Control Protocol 传输控制协议

        UDP -->User Datagram Protocol 用户数据报协议

        OSI -->Open System Interconnection 开放系统互联参考模型

2、 面试经验:
        a. 规范代码,规范书写变量
        b. 随和做人,认真做事
        c. 答出别人答不出的两点
            overlord与override
            特点之一:当父类的方法是私有时,子类写了一个和父类一样的方法,不叫覆盖
        d. 升级的单个因素:
            1. 提高效率;
            2. 简化书写;
            3. 提高安全性;

3、 eclipse操作:
        a. myeclipse是eclipse的一个插件
        b. eclipse是基于JDK的
        c. 配置快捷键:window--->preferences--->General--->Keys--->contents
        d. 一个工作空间Workspace里面有多个工程Project
        e. 视图与透视图
        f. 高版本的JDK开发的程序低版本的JRE不能运行,高版本的JRE能运行低版本JDK开发的程序
        g. 注意快捷键的使用和设置,在Template中设置快捷键
        h. 通过build path中设置库版本
        i. 选中需要打印的语句Alt+/

4、 静态导入:jdk1.5提供的
        (1)import语句可以导入一个类或某个包中的所有类
        (2)inport static 语句导入一个类中的某个静态方法或所有静态方法。

5、 JDK1.5新特性:
        a. 静态导入类库
        b. 可变参数:
            1. 只能出现在参数类表的最后;
            2. ...位于变量类型和变量名之间,前后有无空格都可以;
            3. 调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形访问可变参数。
        c. 增强for循环
            语法:
                for(type 变量名 : 集合变量名){...}    
            注意事项:
                迭代变量必须在()中定义;
                集合变量可以是数组或实现了Iterable接口的集合类;
        d. 基本数据类型的自动拆箱与装箱:
            自动装箱:Integer num=12;
            自动拆箱:System.out.println(num+12);

            Integer num1=12;//129;//Integer.valueof(12);
            Integer num2=13;//129;//Integer.valueof(12);
            System.out.println(num1==num2);true//false//true
            -128~127在一个字节内的数字,一旦被封装成Integer对象后,就会缓存池中,下次有要把一个数封装成Integer对象时,首先会在池中找
            这是一种设计模式:享元模式 flyweight

        e. 枚举
        f. StringBuilder 1.5版本之后出现的
        g. invoke中传的参数1.5版本中是可变数组的形式,1.4版本是把参数列表封装成一个数组再传进来
        i. Map[] map={name:"zss",age:18};java7新特性
        j. 注解
        k. 泛型
6、 享元模式:flyweight
        如果很多很小的对象,有很多相同的东西,可以把它变成一个对象,那些不同的属性把他们变成方法的参数,称之为外部状态,那些相同的属性称之为内部状态

7、 枚举:
        a.为什么要有枚举?
        枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。
        枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
        
        b.扩展:枚举类的value, valueof, name, toString, ordinal等方法
        c.总结:枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象
        一个枚举类实例:

	public class EnumTest {

		public static void main(String[] args) {

			System.out.println(WeekDay.valueOf("SUN").toString());

			System.out.println(WeekDay.values().length);

			System.out.println(TrafficLamp.valueOf("RED").nextLamp());

		}

		public enum WeekDay {

			SUN(1), // 指定参数列表
			MON(), STU, WED, THT, FRI, SAT;// 后面有方法必须有“;”隔开,方法必须位于枚举元素之后

			private WeekDay() {
				System.out.println("first");
			}// 构造方法必须是私有的

			private WeekDay(int day) {
				System.out.println("second");
			}
		}

		public enum TrafficLamp {
			RED(30) {
				public TrafficLamp nextLamp() {
					return GREEN;
				}
			},
			GREEN(45) {
				public TrafficLamp nextLamp() {
					return YELLOW;
				}
			},
			YELLOW(5) {
				public TrafficLamp nextLamp() {
					return RED;
				}
			};
			public abstract TrafficLamp nextLamp();

			private int time;

			private TrafficLamp(int time) {
				this.time = time;
			}
		}
	}
        d. 枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。

        e. 枚举元素必须位于枚举体中的最开始部分,枚举元素列表的最后要有分好与其他成员分隔。
           把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。

        f. 带构造方法的枚举:
            构造方法必须定义成私有的
            如果有多个构造方法,该如何选择哪个构造方法?
            枚举元素MON和MON()的效果一样,都是调用默认的构造方法。

        g. 带方法的枚举:
            定义枚举TrafficLamp
            实现普通的next()方法
            实现抽象的next()方法:每个元素分别是由枚举类的子类来生成实例对象,这些子类采用类似内部类的方式进行定义。
            增加上表示时间的构造方法
        h. 枚举只有一个成员时,就可以作为一种单利的实现方式。

8、反射的基石--->Class类

        Class--->代表一类什么样的事物
        Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class

        Person p1=new Person();
        Person p2=new Person();
        
        获取字节码对应的实例对象(Class类型)
        1. Class cls1= Person.class;//字节码1;
        2. Class cls2= p2.getClass();//字节码2;
        3. Class.forName("类名")//反射实用的主要是这一种

        九个预定义Class实例对象:
        Intclass==Integer.TYPE...
        
        数组类型的的Class实例对象
        Class.isArray();

        总之,只要是在源程序中出现的类型,都有各自的Class实例对象,例如:int[],void,

9、 反射就是把java类中的各种成分映射成相应的java类。

10、 Constructor类:
        Constructor类代表某个类中的一个构造方法
        得到某个类所有的构造方法:
        Constructor Constructors[]=Class.forName("java.lang.String").getConstructor(StringBuffer.class);

        创建一个实例对象:
        通常方式:String str=new String(new StringBuffer("abc"));
        反射方式:String str=(String)constructor.newInstance(new StringBuffer("abc"));

11、 Field类 字段
        Point pt1 = new Point(3, 5);

        Field fieldY=pt1.getClass().getField("y");
        //fieldY不代表具体的值,只是一个变量
        System.out.println(fieldY.get(pt1));
        
        Field fieldX=pt1.getClass().getDeclaredField("x");
        fieldX.setAccessible(true);//取消权限校验,暴力访问
        System.out.println(fieldX.get(pt1));

12、 Method类
        Method类代表某个类中的一个成员方法
        得到类中的某一个方法:
        Method charAt=Class.forName("java.lang.String").getMethod("charAt",int.class);

        调用方法:
        通常方式;System.out.println(str.charAt(1));
        放射方式:System.out.println(charAt.invoke(str,1));
        如果传递给Method对象的invoke()方法的一个参数为null,就就意味着什么样的意义呢?
        说明该Method对象对应的是一个静态方法

13、 用放射方式去调用某个类中的main方法
        String startingClassName = args[0];
        Method mainMethod = Class.forName(startingClassName).getMethod("main",String[].class);
        mainMethod.invoke(null,new Object[]{new String[]{"123","456","789"}});

14、 数组反射:
        Object[]a=new Object[]{"a",1};
        a[0].getClass.getName();

15、 ArrayList、hashSet的比较及Hashcode分析
        注意内存泄漏,不用的东西,没有被释放,还一直占用着内存空间

16、 类加载器
        配置文件的加载也是用类加载器
        RefectDemo.class.getClassLoader().getResourceAsStream(目录);
        RefectDemo.class.getResourceAsStream(目录);
        在classpath指定的目录下逐一的查找需要加载的类文件

17、 内省(IntroSpector)---JavaBean
        JavaBean--->是一种特殊的Java类,他的方法的名字按照一定的规则起名字
        如:int getAge();
            void setAge(int age);
        
        当方法中有以set...,get...开头的方法名,该类就可以当作JavaBean类使用。
        
        特点:去掉set,get,剩下的属性名Age--->如果第二个字母是小写的,则把第一个字母变成小写的-->age
        gettime--->time
        setTime--->time
        setCPU--->CPU
        为了好看考虑

        当作JavaBean类处理,比较方便
	public class JavaBeanDemo {

		public static void main(String[] args) throws Exception {

			Point p = new Point(3, 5);

			String propertyName = "x";
			// "x"-->"X"-->"getX"-->MethodGetX-->

			// 属性描述类,获取一个类中的某个属性
			PropertyDescriptor pd = new PropertyDescriptor(propertyName,
					p.getClass());
			// 通过属性获取bean类型类的方法
			Method methodGetX = pd.getReadMethod();

			Object retVal = methodGetX.invoke(p);
			System.out.println(retVal);

			Method methodSetX = pd.getWriteMethod();
			methodSetX.invoke(p, 8);
			System.out.println(p.getX());
		}
	}
---------------------------------------------------------------------------
	public static void main(String[] args) throws Exception {

		Point p = new Point(3, 5);
		String propertyName = "x";
		BeanInfo beanInfo = Introspector.getBeanInfo(p.getClass());
		PropertyDescriptor[]pds=beanInfo.getPropertyDescriptors();
		for(PropertyDescriptor pd : pds){
			if(pd.getName().equals(propertyName)){
				Method methodGetX=pd.getReadMethod();
			}
		}
	}

---------------------- android培训 、 java培训 、 期待与您交流! ----------------------
详细请查看:www.itheima.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值