今天是就业班的第一天,状态感觉还不错吧,听课的时候感觉脑袋清楚一点了,没有像在基础班那样的迷茫了,今天感觉很不错,加油啦~~~
上午讲了关于Eclipse的使用,工欲善其事,必先利其器。那就先回顾回顾一下Eclipse的工具使用情况吧。

1,快捷键

Alt+/:辅助功能,联想语块,内容辅助,自动导包
Ctrl+shift+上下键:复制单行或多行
Ctrl+shift+o:导入代码区中所有类或者接口
Ctrl+d:删除所选行
Ctrl+i:让光标到默认代码位置
Alt+上下键:移动一行代码
Ctrl+/:注释或取消单行注释
Ctrl+shift+/:对所选区域进行多行注释
Ctrl+shift+/:取消多行注释。只要将光标放在多行注释内即可
Ctrl+shift+f:格式化代码
Ctrl+m:将当前视窗最大化与原始状态切换
Ctrl+1:在选中的出错位置给出解决方案
f3:列出指定类或者方法的源码
f4:列出指定类的层次关系。打开层次视窗
f2:显示方法或者类的注释描述信息
Alt+shift+s:调出source菜单
Ctrl+shift+x:变成大写
Ctrl+shift+y:变成小写

2,Eclipse基本设置

window---preferences

3,外挂插件的步骤:

a,在Eclipse的目录下建立links目录
b,在links目录下,建立一个文件,内容为插件Eclipse目录的父目录;path=插件Eclipse目录的父目录 path=f://Eclipse//NLpack1-eclipse-SDK-3.2.1-win32
c,打开Eclipse进行验证

扩展:如果外挂多个插件,重复第二步骤,可配置多个连接文件。
通过Eclipse的目录的configuration/org.eclipse.update目录下的platform.xml文件可以看到配置的路径
将连接文件删除,即可卸载插件。
注意:如果执行eclipse.exe出现对话框提示jre or jdk无效
解决:配置一下path环境变量将jdk的目录下的bin目录配置其中。

4,在工程中导入jar包

两种方式:
a,右键项目--选择properties--Java build path--选择liberiers标签
add external jars--选择要导入的jar包即可
这样做有个问题就是如果jar的路径发生变化,项目就不能使用到这个jar包

b,在项目中建立一个lib目录,专门用于存放项目所使用的jar工具包,将要使用到的jar包复制粘贴进来,并在jar上点右键--选择builder path--add to build path,即可
这是jar包中的对象,就可以使用了
这样做的好处是项目移动,jar随项目移动

5,debug

通过加入端点可以让程序执行停止在端点位置上,通过debug as,运行调试程序,同时打开debug视图
f5:进到某一方法中
f6:执行下一步
f7:返回原被调试程序,没有进入任何方法内,f7不可以用
Ctrl+r:直接执行到指定的行位置进行调试
_

右边的Variables视窗
显示了运行时产生的对象,以及对象的属性和值。它的出现方便于对程序的调试。

6,JDK1.5之后出现的新特性
自动装箱,拆箱:

基本数据类型对象包装类。私有不是封装。
Integer a=123;//a=new Integer(123);装箱
a=a+4;//a.intvalue();拆箱//并装箱
需要注意的是:在使用时,Integer x=null;上面的代码就会出现NullPointerException
取值在一个字节范围之内不会开辟新的空间

细节1:
Integer x=new Integer(100);
Integer y=new Integer(100);
x==y?---->false
x.equals(y)?---->true

细节2:
Integer x=100;
Integer y=100;
x==y?---->true
x.equals(y)?---->true

静态导入:import static
JDK1.5版本的新特性
为了简化程序书写而出现
import的出现可以简化类名的书写
为了简化对静态的调用
新的导入方式:import static java.lang.System.*;
常用的工具类:Collections,Arrays(全是静态方法)
导入的是静态方法。
import导的是包中的类;import static导的是类中的方法

泛型:(Generic)
特点:提高程序的安全性;将运行期遇到的问题转移到了编译期;省去了类型强转的麻烦
      泛型类的出现优化了程序设计
泛型类的定义:当类中的成员使用的类型是同一种时,可以将类型定义在类上
泛型方法的定义:每个方法操作的类型不同时,将泛型单独定义在方法上(通常都是静态)
泛型就是在给类或者方法的<>中传递类型参数
什么时候使用泛型?当操作的引用数据类型不确定的时候,就使用泛型

泛型要注意的一些问题:
ArrayList<String> list=new ArrayList<Object>();

ArrayList<Object> list=new ArrayList<String>();

ArrayList<String> list=new ArrayList();

ArrayList list=new ArrayList<String>();

(使用泛型注意两边都要一致,不要考虑多态的问题了,但是后两个又可以了,据说这是高手和菜鸟的问题)

其实使用泛型时,如果两边都要指定类型,那类型就必须一致,也可以说只有一边指定类型,这种方法比较灵活。

public static void main(String[] args){
 int[] arr={1,2,3};
 chang(arr,0,2);

public void swap(T arr[],int i,int j)
{
 T temp=arr[i];
 arr[i]=arr[j];
 arr[j]=temp;
 //x y值交换,经典做法
 int x=0;
 int y=1;
 //第一种方法
 x=x^y;
 y=x^y;
 x=x^y;
 //第二种方法
 x=y-0*(y=x);
 }
}

//面试题
public static <T> void reverse(T arr[])
{
 int i=0;
 int j=arr.length-1;
 while(true){
 if(i>=j){
 break;
        }
 T temp=arr[i];
 arr[i]=arr[j];
 arr[j]=temp;
 i++;
 j--;
    }
}

for each语句:
Collection在JDK1.5后出现的父类接口Iterable就是提供了这个for语句
格式:
for(数据类型 变量名:数组或集合)
{
 执行语句;
}
简化了对数组,集合的遍历
遍历数组,取出元素,里面没有增量,必须有被遍历的目标(集合,数组)

函数的另一种表现形式:

返回值类型 函数名(参数类型... 形式参数)
{
 执行语句;
}
其实接收的是一个数组,可以指定实际参数个数
简化了程序的编写
注意:当有不同参数类型时,可变参数必须定义在最后一个参数位置上

反射:Reflect
动态获取类中的成员
如何获取类对象:
 对象.getClass();
 类名.class
 Class.forName("全类名");
获取到类文件对象就可以通过指挥对象的方法获取类文件的内容
对比以前:
Person p=new Person();
p.show();
反射机制:
Class clazz=Class.forName("Person");
Person p=(Person)clazz.newInstance();
p.show();//还可以获取方法对象
获取类中的方法:
Method[] getMethods();
Method getMethod(methodName,params);
获取类中的构造函数:
Constructor getConstructor(params);
反射的好处:增强了程序的扩展性,后期的可维护性
其实就是把Java类中的各种成分映射成一个个的Java对象,得到要反射的类的对象,有三种方式:比如反射student类name,age

1,得到student类的第一种方式
Class clazz=Student.class;启动类装载器,装载字节码
2,第二种方式
clazz=new Student().getClass();
3,第三种方式
clazz=Class.forName("cn.itcast.Student");
关于Java面向对象的思想,想想下面的问题:
关门,是人的方法,还是门的方法?
把人的心脏拿给医生做手术,这是谁的方法?
开电脑是谁的方法?

test1
反射无参的方法
//调用对象的方法,得到一个方法的对象
Method m=clazz.getMethod("方法名",参数null);
//指定对象运动起来
m.invoke(new Student(),null);

test2
反射有参数方法
Class clazz=Class.forName();
Method m=class.getMethod("doaa",String.class);
m.invoke(new Student(),"bbb");

test3
多参 有返回值
Student s=new Student();
Class clazz=s.getClass();
Method m=clazz.getMethod("dobbb",String.class,List.class,int[].class);
Object o=m.invoke(s,"bbb",new ArrayList(),new int[1]);

test4
静态方法
Class clazz = Student.class;
Method m = clazz.getMethod("doccc",null);
m.invoke(null,null);

test5
私有方法
Class clazz = Student.class;
//Method m = clazz.getMethod("wc",null);
//m.invoke(new Student(),null);

//反射默认是拿不到私有成员的. 但是有一种除外哈哈
Method m = class.getDeclaredMethod("wc",null);

m.setAccessible(true);  这就是传说中的暴力反射

Class clazz = Student.class;
Method m = clazz.getMethod("main",String[]);
String str[] ={"ab","bb"};
m.invoke(null,(Object)str);  //JDK1.5中,如果是数组javac则会自动拆开,那么为了兼容1.4,

把数组强转成一个Object对象,就不会拆了
m.invoke(null,new Object[] {str});

//另外一种写法, 就是把数组封装在例外一个数组里面传进来 ,

拆开以后正好是数组

能看懂下面的意思么
main(String arg1,String arg2)

public (int i , int j)
      Method.invoke(Object,Object[] args) ;

run.invoke(obj, new int[]{1,2})

===================
Demo3
test1
反射Student类的age字段
Class clazz = Student.class;
Student s  = new Student();

//通过反射设置属性值想想,在javabean中,什么事类的属性,又是由什么来决定的呢?
Field f = clazz.getField("age");

f.set(s,13);
System.out.println(s.age);

//通过反射设置属性值
Object obj = f.get(s);
System.out.println(s);

test2
//反射类的私有属性
Class clazz= Student.class;
//class.getField(name);

Field f = clazz.getDeclaredField("name");
f.setAccessible(true); //暴力破解私有属性,很多书中都写,私有属性是不能被外界所访问的,那么这种情况呢?

f.set(s,"zsf");

=============
Demo4

Person类 属性, 方法

tes1
反射类 反射类的构造方法的目的是为了创建类的对象
反射无参构造方法  Person(){}

Class clazz = Person.class;
Constructor c = clazz.getConstructor(null); //注意这里不是返回属性和方法类了

而是返回了一个Constructor对象
Person p = c.newInstance(null);            //注意了返回一个Person对像
p.doxx();     //用得到的对象去调用类中的方法

但是Class类内部提供这样的方法,查API可以直到可以直接调用newInstance()方法

class类本身就代表某个类的字节码文件
Class clazz = Person.class
p =(Person)clazz.newInstance()  //因为直到反射类,直接强转了,如果不知道的情况下用

//Object obj = clazz.newInstance(); 比较方便
p.doxx();

test2

反射有参的构造方法 Person(String name){}
Class clazz = Person.class;
Constructor c = clazz.getConstrutor(String.class);
Person p  = c.newInstance("aaa");
p.doxx();

=========================
Demo5 看看框架是怎么反射的吧
config.properties //配置文件

FileInputStream in = new FileInputStream("src/config.properties");
Properties prop = new Properties();
prop.load(in);

String classname = prop.getProperty("classname");
String method = prop.getProperty("method");

//运行classname所对应的类的method方法
Class clazz = Class.forName(classname);
Object obj = clazz.newInstance();

Method m = clazz.getMethod(method,null);
m.invoke(obj,null);

不理解,就记住吧

字节码文件class只装载一次, 所以静态变量在class装载后就自动装载,且只装载一次
========================

Demo6

Class c1 = Class.forName("cn.itcast.reflect.Person");
Class c2 = Person.class;
Class c3 = new Person().getClass();
System.out.println(c1 == c2);  结果呢?

System.out.println(c2 == c3);  结果呢?

=====================
内省
Person类
1 JavaBean 作用就是封装对象

2 JavaBean 到底有什么属性,不是由字段决定的,而由拥有的setter或getter方法决定的
public class Person()
{
 private String name;//字段
 private String password;
 private int age;
 pulic String getName() //属性读取器
 {
     return name;
 }
 public void setName(String name)//属性获取修改器
 {
     this.name = name;
 }
}

===============================================
test1

通过传统方法访问Person类的属性

Person p = new Person();

p.set()..

p.get()..

通过内省(introspector)操作javabean  API : PropertyDescriptors属性描述器

PropertyDescriptor pd = new PropertyDescriptor("name",Person.class);
Method set=pd.getWriterMethod();
set.invoke(p,"aaa");

Method get=pd.getReadMethod();
get.invoke(p,null);

test2
BeanInfo info = Introspector.getBeanInfo(Person.class);
PropertyDescriptors pds[]=info.getPropertyDescriptors();

for(PropertyDescriptors pd: pds)
{
   System.out.println(pd.getName());
}

上面拿到的属性里面 还隐藏了一个class属性 为什么这么说呢  因为任何类都是object类的子类
而API中 object类本身就设计了getClass()方法, 而根据javabean中属性的定义,提供了getter方法就必然有这个属性

===================================
BeanUtils
导入jar包  需要日志记录包log4j.jar 和beanutils.jar , commons-logging.jar
Person p =new Person();
BeanUtils.setProperty(p,"name","aaa");       //虽然只支持8中基本数据类型的自动转换
BeanUtils.setProperty(p,"password","aaa");   //但是支持自定义转化器
BeanUtils.setProperty(p,"age","12");

不再提醒:

出现(NoClassDefFoundError)是因为没有导入相应的开发包

自定义转化器 实现方法 匿名内部类 new Converter() 必须实现Converter接口中的方法
ConvertUtils.regsiter(new Converter()

{
  public Object convert(Class arg0, Object arg1)  throws Exception
  {

try 
   {
      DateFormat df =DateFormat.getDateInstance();
      Date date = df.parse(String arg1);      //arg1代表需要转换的数据
      reurn date;   //找到了就返回date
   }catch(ParseException e)
   {
      throw new RuntimeException(e);
   }
   return null;    //没找到 就返回null

}, Date.class);

以上代码,是自定义转化器的实现代码 其实用下面这个BeanUtils API中已有的方法就可以解决(api中已有很多写好的方法了)

ConverUtils.register(new DateLocaleConverter(),Date.class);

=============================================================

//通过BeanUtils拷贝bean的属性
//假如客户端提交给服务器的数据

表单提交的 name password age birthday

开发一个bean对象 FormBean 封装提交过来的数据
除了set get方法,在写一个boolean validate方法

FormBean bean = new FormBean();
bean.set();
...
if(bean.validate()!=true)
BeanUtils.copyProperties(p ,bean); //拷贝到p  来自bean

====================================================
//首先来看枚举类

class  enumeration
{
 public static void main(String[] args)
 {
  System.out.println("Hello World!");

public void
 if (grade.matches("[ABCDE]"))  注意这种写法
 {
  this.grade = grade;
  return
 }
 throw new RuntimeException("对不起,您传入的参数有误!!!")异常的问题,,就不用说了吧?

}
}

class Grade //在jdk1.5以前.. 枚举类的写法是这样的
{
 //在设计grade类时,要保证别人只能拿到grade类的abcde这5个对象.
 private Grade(){};
 public final static Grade A= new Grade();
 public final static Grade B= new Grade();
 public final static Grade C= new Grade();
 public final static Grade D= new Grade();
 public final static Grade E= new Grade();
}

//枚举就是一个java类
enum Grade  //枚举的值还可以这么定义
{

A(" 100-90"),B(" 89-80"),C(" 79-70"),D(" 69-60"),E(" 60-0");
}

class Student()
{
 private Grade grade;
 public void setGrade(String name)
 {
     this.name = name;
 }
 public void getGrade(String name)
 {
     return name;
 }
}

class enumeration2
{
  public static void main(String[] args)
  {
       System.out.println(Grade.A.getName());
       System.out.println(Grade.A.getInfo());
   }
}

enum Grade implements A
{
 //枚举也可以实现接口
 A("100-90"){
    public String getInfo()//匿名内部类的方式实现接口 五个对象 每个对象自己把方法实现了
   {
       return "优";
   }

}
 ,B("89-80"){

public String getInfo()

{

return "良";

}

},....... //看明白了么?  这是匿名的内部. 枚举也可以实现接口A,但是是采用的匿名内部类的方法

//Grade枚举类中自定义的构造方法
 private String name;
 Grade(String name)
 {
    this.name=name;
 }
}

//接口A

interface A
{
   public String getInfo();
}

怎么用单态设计模式设计一个类呢???  呵呵如果不会一定要记住啊
 1 构造函数私有化
 2 类自己创建一个实例对象 并使用static类型的变量
 3 定义一个静态方法,返回一个类的实例

class Xxx
{
 private Xxx(){ }
 private final static Xxx xx = new Xxx();
 public static Xxx getInstance()
 {
   return xx;
 }
}
定义一个枚举其实就是定义了一个类,其实枚举也是java中的类.这就是jdk1.5的特性
enum Xxx{
 xx;
}

//遍历枚举类的枚举值 枚举中的一个类
Grade[] gs = grade.values();
又是一个jdk1.5的特性加强的for循环注意:加强for循环只能用在数组和实现Iterator接口的集合类上

for(Grade g : gs)
{
  System.out.println(g);
}

枚举的原理是什么呢?
是一种引用数据类型,枚举中的每一个值都是一个实体,它的出现限定了数据的内容和范围。
每一个枚举都是Java.lang.Enum的子类
自定义枚举特有的方法:
values():获取枚举实例数组
valueOf(String name):通过名称获取枚举实例
枚举的构造函数:
不可以定义public修饰的构造函数
避免直接将枚举类型实例化
枚举类型的抽象方法覆盖
每一个枚举值都是一个枚举类型的实例对象
当一组常量,都可以用于特定数据类型,就使用枚举类型。如:星期,性别,月份等。

注解:
通过toString();equals();hashCode()示例引出注解
通过示例发现,只有到了运行时才出现结果
加上注解,在编译时期出现提示
格式:
@interface注解名称
注解中没有构造函数
可以定义无参数,没有主体的函数
该函数可以作为注解应用时的属性
该函数支持的类型:8种基本数据类型,String,Class,enum。Annotation,数组
可以在函数后通过关键字default定义默认值
注解中的注解成为原注解
获取注解对象要通过反射的形式。

感觉在传智的每一天都很充实吧,我每天精力都挺充沛,呵呵,上课也不会偷偷睡觉了哦~~时间久了。我觉得上课真是件惬意的事情,觉得毕老师讲课讲得真好~~五一的时候反复的看之前我们上课毕老师的视频~~觉得之前一点都听不懂的东西,现在全都明白了,感觉真好~~~虽然只学了一个月,但是我还是决定来就业班了,加油啦~~

今天我的就业班的生活开始啦~~~相关推荐

  1. 开班倒计时!12月1日—CDA数据分析就业班火热报名中

       CDA数据分析就业班火热报名中 !  "为什么要学习数据分析?如果你想到找一个拥有大量需求的职业,你需要为一些越来越常见以及廉价的东西提供稀缺且附带额外价值的服务.什么东西正变得越来越 ...

  2. 第74期CDA数据分析就业班即将在北京、成都、重庆 三校同步开课,欢迎咨询!...

    前言 "为什么要学习数据分析?如果你想到找一个拥有大量需求的职业,你需要为一些越来越常见以及廉价的东西提供稀缺且附带额外价值的服务.什么东西正变得越来越常见和飞速积累?数据.什么是为数据提供 ...

  3. 传智播客学习之就业班有感

    今天终于走入了就业班的课堂,听到这个班级的名字--"就业班",似乎有些紧张,虽然是四个半月后的事情,但是当走进教室的那一霎那,有点窒息的感觉,教室的学习气氛比预热班更浓厚了,早上八 ...

  4. 花费我一个月实习的工资买了一个软件测试就业班课程,成功转行了算是

    本人24岁刚毕业三四年,转行进来,包装个1-2年的经验,还是非常容易落地的.讲讲我前期要做好哪些准备.首先要明确的是,24岁入行不算晚,但是也是没有太多的时间容你去试错,所以每一步都必须走对. 26岁 ...

  5. 买了一个软件测试就业班课程,不知道值不值

    本人26岁刚毕业三四年,转行进来,包装个1-2年的经验,还是非常容易落地的. 讲讲我前期要做好哪些准备. 首先要明确的是,26岁入行不算晚,但是也是没有太多的时间容你去试错,所以每一步都必须走对. 2 ...

  6. 2017最新整理传智播客JavaEE第49期 基础就业班

    2017最新整理传智播客JavaEE第49期 基础就业班 可以说是一套不可多的的教程,有条件的同学建议报名培训,效果更佳,没有条件的朋友就买个培训课堂上录制的视频吧. 视频教程推送门:http://b ...

  7. 2007年IT企业定向培养就业班

    (点击图片进入) 北大青鸟湘计立德中心2007年IT企业定向培养就业班招生公告 背景资料     北大青鸟 APETECH广州湘计立德培训中心是广东励康信息技术有限公司( [url]www.leadc ...

  8. 传智Python视频_基础班+就业班

    传智的Python视频,包括就业班视频和基础班视频, 是Python入门学习的好资源 所属网站分类: 资源下载 > python视频教程 作者:慧雅 链接: http://www.pythonh ...

  9. java就业班学什么呀_传智播客JAVA就业班学习心得

    传智播客JAVA就业班学习心得 4月26日CVS---4月27日UML 连续两天状态很是不好,上课总是不能够集中精神.不知为什么听这两天课的时候精神很涣散,也不知道自己在想什么,一整天的课,似听非听的 ...

最新文章

  1. linux 下获取程序的绝对路径
  2. 新闻资讯小程序开发实践
  3. 【LeetCode OJ】Remove Duplicates from Sorted List
  4. [Java设计模式]期末作业参考
  5. Spring注解 (更新中)
  6. 《走遍中国》珍藏版(十)
  7. 计算机的发展经历了选择题,计算机发展历程的相关选择题.doc
  8. 面向对象-属性查找与绑定方法
  9. php面向对象精要(3)
  10. 华为OJ之奥运会金牌排名显示国家名称
  11. 一个基于QT的开源串口调试工具
  12. linux中tar命令怎么用,linux tar命令使用详解
  13. python 会议室预约系统解决方案_快思聪FUSION会议预约系统
  14. 各种手持式条形码扫描仪的优缺点
  15. win10开机推送的壁纸寻找
  16. 通信行业名词解释ID、MD、HW、SW
  17. 半小时学会什么是分布式一致性算法——Paxos
  18. Pandas 对数值进行分箱操作的4种方法总结对比
  19. python计算两个坐标点之间的距离
  20. be idle sometimes to_关于好习惯的英语名言

热门文章

  1. 网站被恶意篡改了,这样去解决就好
  2. 黄峥为拼多多拼了五年多
  3. 自我总结前端vue笔记
  4. NB-IOT MT2625平台驱动开发工具包介绍
  5. 这是属于交接工作还是处理工作
  6. win32俄罗斯方块c++语言 vs2012源代码,C++实现俄罗斯方块
  7. 教你在WinXP上安装pyinstaller
  8. android elevation 白色,使用android:elevation在LinearLayout上投射阴影
  9. unity3d MVC设计模式
  10. 高德地图markevents_高德地图markers生成和点击