开始学java 09

开始学java 09一、构造方法

构造方法

      作用:给对象进行数据的初始化的!

构造方法格式:

      1)构造方法的方法名和类名一致
      2)没有具体返回值类型
      3)并且连void都没有
          注意:没有提供无参构造方法,系统会默认提供,建议在标准类的时候,永远给出无参构造方法

构造方法的注意事项:

        1)之前一直在使用无参构造方法,
        类名  对象名 = new 类名(); 
        没有报错
        无构造方法
        如果开发者没有给出, 系统会默认提供无参构造方法,给对象进行默认初始化 (建议永远给出无参构造方法)
        2)在开发中,如果给出了有参构造方法,系统不会再默认给出无参构造方法
              作用:给成员变量进行赋值    
        3)构造方法是可以重载的!

举例:
class Student{
public Student(){
System.out.println(“无参构造方法…”) ;
}
}
class ConstructorDemo{
public static void main(String[] args){
Student s = new Student();
//类名 对象名 = new 类名();
System.out.println(s) ;
}
}

标准类的写法

   1)成员变量私有化
   2)提供setxxx()/getXXX()
   3)提供无参构造方法/有参构造方法
   4)创建对象,测试:
                a.通过setXXX方法给成员变量赋值
                b.通过有参构造方法赋值

举例

class Student{ //学生类
private String name ; //成员变量私有化
private int age ;
private String gender ;
public Student(){ //无参构造:永远给出
}
public Student(String name,int age,String gender){ //有参构造
this.name = name ;
this.age = age ;
this.gender = gender ;
}
public void setName(String name){ //提供setXXX()/getXXX()公共访问方法
this.name = name ;
}
public void setAge(int age){
this.age = age ;
}
public void setGender(String gender){
this.gender = gender ;
}
public String getName(){
return name ;
}
public int getAge(){
return age ;
}
public String getGender(){
return gender ;
}
public void study(){ //其他功能
System.out.println(“正在学习JavaSe…”) ;
}
public void sleep(){
System.out.println(“学习困了,需要休息…”) ;
}
public void test(){
System.out.println(“每周要进行自测考试”) ;
}
}

class StudentTest{ //测试类
public static void main(String[] args){
//方式1:无参构造方式+setXXX()/getXXX()
Student s = new Student(); //创建学生对象
s.setName(“高圆圆”);
s.setAge(39) ;
s.setGender(“女”) ;
System.out.println(s.getName()+"—"+s.getAge()+"—"+s.getGender());
s.study();
s.sleep();
s.test();
//方式2:有参构造方式直接赋值 +getXXX()
Student s2 = new Student(“赵又廷”,36,“男”) ;
System.out.println(s2.getName()+"—"+s2.getAge()+"—"+s2.getGender());
s2.study();
s2.sleep();
s2.test();
}
}

文档说明书

a): 使用javadoc 制作工具类的文档说明书步骤:
1)定义类ArrayTool 单独操作数组
2)将构造方法私有化,外界不能创建对象,保证数据安全性
3)给ArrayTool的方法都是加上static修饰,通过类名调用
4)给每一个方法上加入文档注释
该功能描述什么意思
有参数:参数表示的是什么
有返回值:返回值返回的是什么
5)进入dos控制台
在当前目录下,使用javadoc -d 目录名(文件夹名称) -author -version ArrayTool.java
比如: javadoc -d Sort -author -version AlgorithmTool.java
注意事项:
输入上面命令: 可能会出现问题: 非法参数异常xxException
在系统变量中一定要将classpath (删除掉)
举例:
/
这是针对数组操作的一个工具类
@author suyue
@version 1.0
/
public class ArrayTool{
*
/**
构造方法私有化,目的是为了让外界不能创建对象
*/
private ArrayTool(){
}

/**
    该方法是针对数组的遍历的操作,遍历的元素是一种格式[元素1, 元素2, 元素3, ...]
    @param arr 表示需要被遍历的数组
*/
public static void printArray(int[] arr){
    System.out.print("[") ;
    for(int x = 0 ; x < arr.length ; x ++){
        if(x==arr.length-1){
            System.out.println(arr[x]+"]") ;
        }else{
            System.out.print(arr[x]+", ") ;
        }
    }
}
/**
    该方法是获取数组中的最大值
    @param arr 在指定的数组中获取最值
    @return 返回的就是数组中的最大值
*/

b): 什么是API?
Application Programming Interface :应用程序接口
Jdk提供1.6/1.7/1.8相关的帮助文档
成员:
1)字段:类中有哪些成员变量
2)构造方法:有哪些方式可以创建对象,构造方法里面有什么样的参数
3)方法(成员方法):可以查看具体有哪些功能
注意:并且还有看当前是jdk哪个版本之后出现的
c): Math:(JDK1.0版本就已经出现了)
1)含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数.
2)学习一个功能:产生一个随机数
public static double random() :返回double类型
范围:大于等于 0.0 且小于 1.0 的( [0.0,1.0) )

继承

继承的概念:

    将多个类中的共同代码单独提取出来,形成一个独立的类,多个类和当前独立的类产生一种关系: 
    继承关系,用关键字extends

继承的好处:

    1)提高了代码的复用性
    2)提高了代码维护性
    3)类和类产生这种关系,是多态的前提条件!   

标题Java中的开发原则

Java的所有原则以及Java 23种设计模式,都需要遵循低耦合,高内聚 低耦合,高内聚
(降低耦合性,提高内聚性)
耦合:指的是类和类产生的关系(关系越少越好),一旦一个类中有问题了 ,其他类可能都会受牵连!
内聚:完成一件事情的能力(一个类中如果能完成,尽量一个类完成)

Java中继承的特点:

    1)在Java中,只支持单继承,不支持多继承,在别的语言可能有多继承存在    
    2)在Java中,虽然不支持多继承,但是可以多层继承!      (分层初始化:先让父类初始化再是子类初始化)
        注意:在Java中,所有的Java类(自己定义的,Jdk提供的)都继承自 Object类 (上帝)

继承中的注意事项:

    1)子类继承父类,只能继承父类非私有的成员(成员变量,成员方法),但是可以通过公共方法间接的访问!
    2)子类不能继承父类的构造方法,但是可以通过关键字(间接访问父类的构造方法会用到关键字super)
    3)不要为了部分使用功能去使用"继承"

继承中成员的组成:

成员变量、 构造方法、成员方法
 Ⅰ.成员变量
    1)子类继承父类,子类中的成员变量名称和父类中的成员变量不一致的情况:比较简单,分别输出!
    2)子类继承父类,子类中的成员变量名称和父类中的成员名称一致的情况:(重点)
        a)先在子类的局部位置中找,如果存在,就使用
        b)如果在类的局部位置没有,那么在子类的成员位置找,如果存在,就使用
        c)如果子类的成员位置没有,那么在父类的成员位置找,如果存在,就使用
        d)如果父类的成员位置都没有,那么就报错!

super关键字

代表父类的空间标识(父类对象的地址值引用)
this和super的使用:
1)访问成员变量
this.成员变量:访问的当前类的成员变量
super.成员变量:访问的父类的成员变量
2)访问构造方法:
this()/this(…):访问本类中构造方法
super()/super(…):访问父类中的构造方法
3)访问成员方法
this.成员方法名():访问本类中的成员方法
super.成员方法名():访问父类中的成员方法

继承中构造方法初始化的特点

 分层初始化!
   1)继承中,子类不能继承父类的构造方法,但是可以通过super访问父类的构造方法
   2)子类的构造方法中(无参/有参),都会默认访问父类的无参构造方法,  
   3)由于子类继承父类,子类可能会用到父类中数据,所以先让父类进行初始化,再让子类初始化!(分层初始化!)       
   4)关于super():访问无参构造方法,必须写在子类构造方法中第一句话

继承中使用构造方法的注意事项:

    1)需求:子类继承父类的时候,子类的构造方法都会默认访问父类的无参,如果父类中不存在无参构造

会出现什么现象? 编译报错
如何解决?
1)手动显示的给出父类的无参构造方法
2)如果父类的无参构造方法不给出,只能通过super(…)间接的访问父类的有参构造
3)可以在子类有参构造方法中通过this(),访问本类的无参,然后在通过本类的无参间接的通过super(…)访问父类的有参
注意:
子类有参构造或者无参构造的一个,必须让父类进行初始化!

tips:

在Java中使用,{}包起来的内容,称为代码块
1)代码块分为:
局部代码块
在类中的局部位置(方法中定义)
作用:限定当前该局部变量的生命周期,仅仅是在当前代码块作用域中有效
构造代码块
在类中的成员位置使用{}定义,每次执行构造方法之前,先执行构造代码块如果有构造代码块
作用:可以将多个构造方法中的相同的代码可以放到构造代码块中,给对象进行初始化!
静态代码块
在类中的成员位置,static{} ,特点每次只执行一次,优先于对象存在
作用:给类进行初始化的
注意实行:
静态代码块只加载一次!
优先级:
静态代码块> 构造代码块>构造方法

 举例:
     class Fu4{
           static{
                 System.out.println("静态代码块Fu");
           }
           {
                System.out.println("构造代码块Fu");
           }
           public Fu4(){
                  System.out.println("构造方法Fu");
           }
           }
      class Zi4 extends Fu4{
           static{
                System.out.println("静态代码块Zi");
           }
          {
                System.out.println("构造代码块Zi");
          }
                public Zi4(){
                System.out.println("构造方法Zi");
         }
         }
     class Test{
              public static void main(String[] args){
              Zi4 zi = new Zi4();
      }

  }

执行结果是:
静态代码块Fu
静态代码块Zi
构造代码块Fu
构造方法Fu
构造代码块Zi
构造方法Zi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值