java对象和类

来源:互联网 发布:免费工程造价软件 编辑:程序博客网 时间:2024/06/04 23:25

1.类之间的关系:uses-a依赖,has-a聚合,is-a继承。

  • uses-a:依赖,一个类的方法操纵另外一个类的对象,尽可能减少,耦合。
  • has-a: 聚合,类A的对象包含类B的对象。
  • Is-a: 特殊与一般的关系。

2.初始化:程序开始时,main方法进栈,在堆内存中分配空间创建的成员变量,局部变量保存在栈中,注:创建数组则是在堆中,分配空间后默认初始化值。

  • 成员变量会初始化,byte,short,int会初始化为0,Long初始化为0L,char会初始化为空格(\u0000),float初始化为0.0f,double为0.0d,boolean为false,引用类型(class,interface,array)为nul。
  • 局部变量不会自动地初始化,必须通过调用new或者其他初始化方法。

3.日期类:

  • Date类:getDay/getMonth/getYear方法,before/after方法
  • GregorianCalendar类(set/get/add方法 getTime()/setTime(time)方法)
  • 常用getTime()/setTime(time)方法进行Date和GregorianCalendar的转换,已知年月日要构造Date对象,先创建GregorianCalendar对象,然后调用getTime方法获得一个日期;
    GregorianCalendar ca=new GregorianCalendar(year,month,day);
    Date da=ca.getTime()

4.获得这个月第一天是星期几

     GregorianCalendar d=new GregorianCalendar();     int doday=d.get(Calendar.DAY_OF_MONTH)     int month=d.get(Calendar.MONTH)     d.set(Calendar.DAY_OF_MONTH,1);     int weekday=d.get(Calendar.DAY_OF_WEEK);     //设置不同的时区:在main方法的第一行中添加代码     Locale.setDefault(Locale.ITALY)

5.遍历数组方法

    Employee[] staff=new Employee[3];    //方法1    for(Employee e:staff){        e.raiseSalary(5);    }    //方法2    Iterator it = staff.iterator();    while(it.hasNext()){        it.raiseSalary(5);    }    //方法3    for(Iterator it2 = staff.iterator();it2.hasNext();){        it2.raiseSalary(5);    }    //方法4    for(int i=0;i<staff.size();i++){        staff.get(i).raiseSalary(5);    }

6.遍历map的方法

//方法1.要遍历键和值的方法,要求JDK5以上    Map<Integer, Integer> map = new HashMap<Integer, Integer>();    for (Map.Entry<Integer, Integer> entry : map.entrySet()) {        System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());    }//方法2.只需要键和值的方法Map<Integer, Integer> map = new HashMap<Integer, Integer>();    for (Integer key : map.keySet()) {        System.out.println("Key = " + key);    }    for (Integer value : map.values()) {        System.out.println("Value = " + value);    }//方法3.遍历键和值的方法,同时可以在遍历时删除entries    Map<Integer, Integer> map = new HashMap<Integer, Integer>();    Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();    while (entries.hasNext()) {        Map.Entry<Integer, Integer> entry = entries.next();        System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());    }//方法3 不使用泛型    Map map = new HashMap();    Iterator entries = map.entrySet().iterator();    while (entries.hasNext()) {        Map.Entry entry = (Map.Entry) entries.next();        Integer key = (Integer)entry.getKey();        Integer value = (Integer)entry.getValue();        System.out.println("Key = " + key + ", Value = " + value);    }

7.概念理解

  • 有多个类的文件中,以public类的名字作为文件名,在一个源文件中,只能有一个公有类,但可以有任意数目的非公有类。编译源代码的时候,会创建多个class文件
  • 封装性:不要编写返回引用可变对象的访问器方法。如果需要返回一个可变对象的引用,应该首先对其进行clone,对象clone是指存放在另一个位置上的对象副本。return date.clone();
  • final实例域:构建对象时,必须初始化这样的域,并且在后面的操作中,不能再修改(没有set方法);
  • 静态域:static,每个类中只有一个这样的域,而每一个对象对于所有实例域都有一份自己的拷贝。都可以操作它。
  • 静态常量:例如Math.PI,如果定义的关键字static去掉,Pi就变成了Math类的一个实例域,需要通过Math类的对象访问PI,并且每一个Math类的对象都需要有自己的一份PI拷贝。
  • 静态方法:是一种不能向对象实施操作的方法,例如Math.pow(x,a),没有隐式的参数,可以认为静态方法是没有this参数的方法,静态方法不能操作对象,所以不能在静态方法中访问实例域,但是静态方法可以访问自身类中的静态域。可以用类名调用静态方法。
  • Static:属于类而不属于类对象的变量和函数,为了表示退出一个块之后依然存在的局部变量。
  • Main:每一个类都可以有一个main方法,这是一个常用于对类进行单元测试的技巧。如果小类是大类应用中的一部分,那么执行时不会执行小类的main方法。
  • 方法参数:
    • 一个方法不能修改一个基本数据类型的参数(数值型和布尔型,局部变了,方法结束没有变)
    • 一个方法可以改变一个对象参数的状态(对象.属性改变)
    • 一个方法不能让对象参数引用一个新的对象(交换)
  • 函数重载:多个函数有相同的名字,不同的参数。返回类型不是函数重载签名的一部分,也就是说,不能有两个名字相同、参数类型也相同却返回不同类型值得方法。
  • 如果类中提供了至少一个构造器,但是没有提供无参数的构造器,则构造对象时,如果没有提供参数就会被视为不合法。
  • java有自动的垃圾回收器,不需要人工回收内存,所以不支持析构器。如果对象使用了内存之外的资源,例如文件或者系统资源的另一个对象的句柄,当资源不再需要时,要将其回收。
    可以为任何一个类添加finalize方法,在垃圾回收器清除对象之前调用。
    System.runFinalizersOnExit(true)方法能够确保finalizer方法在java关闭前被调用。不过这个方法并不安全。
    代替方法:Runtime.addAhutdownHook添加关闭钩
  • 包:如果两个程序员同时建立了Employee类,只要将这些类放置在不同的包中,就不会产生冲突。一个类可以使用所属包中的所有类,以及其他包中的公有类。
  • 编译器编译源文件的时候不检查目录结构,即使目录下没有文件,也可以进行编译,如果他不依赖其他包就不会出现编译错误,但是最终的程序也无法运行,因为虚拟机找不到类文件。
  • 如果没有指定public或者private,那么这个类/方法/变量就可能被同一个包中所有的方法访问,访问修饰符是default。
  • import不仅可以导入类,还增加了导入静态方法和静态域的功能。
import static java.lang.System.*; //就可以使用System类的静态方法和静态域.out.println();  exit()
0 0
原创粉丝点击