Java笔记—03

/**************************************/
/*      CoreJava day3 笔记小结       */
/*         项目经理:张新钊       */
/**************************************/
/**************************************************
补充:
 对象的构造过程:
   1>递归的构造父类。
   2>分配本类的空间。
   3>初始化本类的属性。
   4>调用本类的构造方法。
  
  覆盖的定义:方法名相同,参数表相同,返回植相同,访问修饰符与父类相同或者比父类的更宽。
    而且在Java中覆盖时只能是静态对静态,非静态对非静态的。
  重载的定义:方法名相同,参数表不同,返回值无要求。
  遮盖的定义:父类与子类之间的属性和静态方法不存在覆盖,只有遮盖。
 
  数组:数组也是一个对象,而且只有一个属性(length)数组的元素一旦确定就无法再改变,如果要改变只有新建一个空间
  System.arraycopy(a,0,b,0,a.length);
 
  自动类型提升:
      a=b+c;
                                                   结果:
  (1)b与c中有一个Double类型                        double类型
  (2)b与c中有一个Float类型                         float类型
  (3)b与c中有一个Long类型                          long类型
  缺省是int类型。
  byte b=10;(test)
  --
  |  b=b+20;   有自动类型提升,编译时出错。
  |  b+=20;    没有自动类型提升,编译没有错误。
  --
 
 类加载:
   1>创建父类对象时。Animal a=new Dog();
   2>访问父类的静态成员和方法时。
   3>创建子类对象或访问子类静态成员时。
   4>如果调用子类从父类中继承的静态方法时,只加载父类。
   5>Animal a=null;这时不会加载类,虚拟机有延迟加载,即能不加载就不加载。
  
 局部变量的用法:
  1>定义在方法中的变量叫局部变量,而在方法之外的叫成员。
  2>局部变量应先赋值后使用。
  3>局部变量的域是定义它的代码块中,即{}之内。
  4>在一个重合范围内不允许两个局部变量发生命名冲突。
 

多态:

  Animal     a    =    new    Dog();
 引用类型: 编译时类型,主观的类型。
 对象类型: 运行时类型,客观的类型。

引用类型和具体的对象不一致时叫做多态。
定理1:我们可以把子类对象当作父类对象,如果我们这样做了就只能去调用副类中原有定义的属性和方法。
就像我给你一个手机,你只知道这个手机可以打电话,但是这个手机可能还有很多你不知道的用途,所以你就不会去用他的新特性了。
定理2:当我们把子类对象当作父类对象来看的时候,如果子类覆盖了父类中的方法,则调用该方法时调用的是子类覆盖后的方法(静态方法除外)。
就是我们用一个父类的指针指向一个具体的子类,
用instanceof运算符来判断一个子类对象是否属于一个特定的父类对象。

参数多态和返回值多态:今天的例子。
修饰符:
  (1)static用来修饰类的属性和方法,静态代码块,以及内部的静态类。
   当static修饰属性时,说明此属性已经不是实例属性,而是静态属性(类属性,属于整个类的)。与C++里面的全局变量相似。
     1>staic属性在整个类中只有一份,而实例属性每个对象都有自己的一份;
     2>static属性的访问直接通过类名去访问。可以在没有生成任何对象之前旧能访问。
     3>静态方法中只能访问本类的其他静态方法或者静态属性。
     4>静态代码块的加载先于其它的属性和方法。
  (2)final主要用来修饰一个类,还有属性,方法以及方法中的局部变量。
       修饰一个类表示这个类是一个不可继承的类。
       修饰一个属性说明这个属性是一个常量。
         如果在声明一个常量时没有给该属性初始化,那吗就只能在构造方法中给此属性赋值。
       修饰一个方法表示方法是不能被子类覆盖的。
       修饰一个局部变量表示局部变量的直是不能改变的。

   (3)abstract抽象的,可以修饰一个类或者一个方法。
       用于抽象方法时,方法只有声明没有实现内容(由于在父类中没有办法给出具体的实现)。
       一旦一个类中有一个抽象方法,那吗这个类一定是一个抽象类,如果一个类没有包含任何抽象方法,但是这个类也可以声明为抽象类。
       抽象类不能被实例化,但是可以声明为一个引用。例如:Animal a=new Dog();
       如果一个子类继承了这个抽象类,那吗这个子类必须要实现父类所有的抽象方法,否则这个子类也必须为抽象类。
       abstract和final这两个修饰符不能混合使用。
希望同学们能够把下面的代码搞明白:

public class Person {
 static{
  System.out.println("static code block");//在类被加载时就执行的
  biming="tangliang";//由于静态代码块最早初始化,所以可以来构造对象的静态属性.
 }
 static String biming;
 String name;
 int age;
 char gender;
 public Person() {
  // TODO Auto-generated constructor stub
 }
 public Person(String name,int age,char gender){
  this.name=name;
  this.age=age;
  this.gender=gender;
 }
 
 public void say(){
  System.out.println("Hello Person!");
  System.out.println(Math.PI);
 }
 public static void staticTest(){
  System.out.println("this is a static method!");
 }
 public static void sleep(){
  
  System.out.println("Person sleep 8 hours");
  staticTest();
  //System.out.println(name+"  sleep 8 hours");
  //say();
 }

}
public class Teacher extends Person{
 String jineng;
 /**
  * 以下是Teacher的不同的构造方法,
  * 这几个构造方法相互间叫做重载.
  */
 public Teacher() {
  // TODO Auto-generated constructor stub
 }
 public Teacher(String jineng){
  this.jineng=jineng;
 }
 public Teacher(String jineng,String name,int age,char gender){
  super(name,age,gender);
  this.jineng=jineng;
 }
 /**
  * 这个方法覆盖了Person的say()方法
  */
 @Override
 public void say(){
  System.out.println("Hello Teacher!");
 }
 /**
  * 这个方法重载了Person的say()方法,由于Teacher继承了Person类,
  * 所以也可以说重载了Teacher的say()方法.
  */
 public void say(String name){
  System.out.println("Hello "+name);
 }
 
 
 public static void sleep(){
  System.out.println("Teacher sleep 6 hours");
 }
 public String toString(){
  return this.name+" "+this.age+" "+this.gender+" teach:"+this.jineng;
  
 }

}
public class Test {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Person p1=new Teacher();
  Person p2=new Teacher("Java");
  Person p3=new Teacher("Java","zhangxz",24,'M');
  System.out.println(p1);
  System.out.println(p2);
  System.out.println(p3);
  p3.say();
  p3.sleep();    //看看这两个sleep()输出结果有什么不同
  Person.sleep();
  
  System.out.println(Person.biming);//静态变量的演示
  p1.biming="zhangxz";
  System.out.println(p1.biming);
  p2.biming="liuyi";
  System.out.println(p1.biming);
 }

}

 

usb接口
接口的定义:一个接口是一个特殊的类使用interface来定义(而类使用class来定义),用来屏蔽Java中的单继承的缺陷。
      接口是一种特殊的类型,接口中的所有方法都必须为抽象方法,而且默认是公开的方法。
            接口中的所有属性都是final static的,即都是静态常量的。
            接口没有构造方法,不能用来生成对象。
            类与接口之间的代码复用关系叫做实现而不叫继承,使用implements来实现,而类的继承使用extends来实现。
            一个类可以实现多个接口,多个接口之间使用逗号隔开。
            接口之间能通过extends来实现继承关系,而且一个接口可以实现多个接口,每一个接口都将成为这个类的兼容类型
              也就是允许多态的实现。
            一个类如果实现了一个接口,就要实现一个接口中的所有方法,否则这个类就必须为抽象类。
            一个类实现了一个接口,那吗这个类和接口之间的关系也可以使用instanceof来判断一个类是否实现了一个接口。
           
接口的作用:
           1>实现多继承
           区分主类型和次类型,接口的引入就使得我们可以对事物的共性作一个再抽象,抽象出一个副类型。
           2>标准
           标准的制定者,使实现者和调用者分离。
           解耦合的工具。
           标准的使用者和标准的实现者通过接口实现弱耦合。
          
           它能够尽量减低系统的耦合度。(对象要高内聚,低耦合)独立完成一项工作的能力叫内聚性(手机的发展),
          

Object类的方法:
 
  (1)clone();
    作为了解知识,知道对象的拷贝分为深拷贝和浅拷贝。
  (2)equals();
    普通对象实现equals()方法:自己定义两个对象是不是相同,默认的Object的实现方法是比较两个对象的地址是否相同。
    String实现equals()方法:由于String类覆盖了Object的equals方法,所以String类比较两个字符串的内容是否相同。
    Java语言规范要求equals方法具有下面的特征:
    1>自反性:对于任何非空的引用x,x.equals(x)应该返回true;
    2>对称性:对于任何引用x和y,如果x.equeals(y)返回true,那吗y.equals(x)也应该返回true.
    3>传递性:对于任何引用x,y和z,如果x.equals(y)返回true,y.equals(z)返回true,那吗x.equals(z)也应该返回true.
    4>一致性:如果x和y引用的对象没有发生改变,那吗反复调用x.equals(y)应该返回的结果相同。
    5>对于任何非空引用x,x.equals(null)应该返回false;
 
 
  注意:在Java中的==和equals()的区别。

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值