Java--面相对象 下

构造方法概述和格式

  • 构造方法概述和作用
    创建对象,给对象中的成员进行初始化
  • 构造方法格式特点:
    1.方法名与类名相同
    2.没有返回值类型,连void都没有
    3.没有具体的返回值
  • 构造方法注意事项:
    1.如果我们没有给出构造方法,系统将自动提供一个无参构造方法。
    2.如果我们给出了构造方法,系统将不再提供默认的无参构造方法
    注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法
  • 给成员变量赋值的两种方式:
    1:setXxx()方法
    2:构造方法
  • 输出成员变量值的方式:
    1:通过getXxx()分别获取然后拼接
    2:通过调用show()方法搞定

创建一个对象的步骤

  • 步骤:
    (1):加载Student.class文件进内存
    (2):在栈内存为s开辟空间
    (3):在堆内存为学生对象开辟空间
    (4):对学生对象的成员变量进行默认初始化
    (5):对学生对象的成员变量进行显示初始化
    (6):通过构造方法对学生对象的成员变量赋值
    (7):学生对象初始化完毕,把对象地址赋值给s变量

构造方法求长方形周长及面积

public class MyTest{
  public static void main(String[] args)
       Rectangle rectangle = new Rectangle();
       rectangle.setHeight(10);
       rectangle.setLength(5);
       double zhouChang = rectangle.getZhouChang();
       double mianji = rectangle.getMianji();
       System.out.println("周长:"+zhouChang);
       System.out.println("面积:"+mianji);
       System.out.println("----------------------");
       Rectangle rectangle1 = new Rectangle(19,35);
       System.out.println(rectangle1.getZhouChang());
       System.out.println(rectangle1.getMianji());
       }
}

class Rectangle{
   private double length;
   private double height;
   public Rectangle(){
   }
   public Rectangle(double length,double height){
     this.length = length;
     this.height = height;
   }
   public double getLength(){
     return length;
   }
   public void setLength(double length){
     this.length = length;
   }
   public void setHeight(double height){
     this.height = height;
   }
   public double getZhouChang(){
     return (height+length)*2;
   }
   public double getMianji(){
     return height*length;
   }
}       

static关键字

  • static关键字的特点:
    1:随着类的加载而加载
    2:优先于对象存在
    3:被类的所有对象共享
    4.可以通过类名调用,也可通过对象名调用,推荐使用类调用
  • static的注意事项:
    1:在静态方法中是没有this关键字的
    如何理解呢?
    静态是随着类的加载而加载,this是随着对象的创建而存在。
    静态比对象先存在。即先存在的不能访问后存在的,后存在的可以访问先存在的
    2:静态方法只能访问静态的成员变量和静态的成员方法

静态变量和成员变量的区别

  • 所属不同:
    静态变量属于类,所以也称为类变量
    成员变量属于对象,所以也称为实例变量(对象变量)
  • 内存中位置不同:
    静态变量存储于方法区的静态区
    成员变量存储于堆内存
  • 内存出现时间不同:
    静态变量随着类的加载而加载,随着类的消失而消失
    成员变量随着对象的创建而存在,随着对象的消失而消失
  • 调用不同:
    静态变量可以通过类名调用,也可以通过对象调用
    成员变量只能通过对象名调用

如何使用JDK提供的帮助文档

  • 步骤:
    1:找到文档,打开文档
    2:点击显示,找到索引,出现输入框
    3:你应该知道你找谁?举例:Scanner
    4:看这个类的结构(需不需要导包)
    java.lang包下的内容不需要我们手动导入
    其它包下的内容需要我们手动导入
    类 API文档
    成员变量 字段摘要
    构造方法 构造方法摘要
    成员方法 方法摘要
    5:看这个类的说明(简单的了解一下)
    6:看开始版本
    7:看构造方法
    8:看成员方法
    看左边:
    是否是static的,如果是我们就不需要创建对象,直接可以使用类名调用该方法;看返回值,返回值是什么我就使用什么接收
    看右边:
    看参数列表: 参数的个数 , 参数的类型 ; 要什么参数我是用的时候,就传递什么参数
    9:然后使用

学习Math类的随机数功能

打开JDK提供的帮助文档学习

  • Math类概述
    类包含用于执行基本数学运算的方法
  • Math类特点
    由于Math类在java.lang包下,所以不需要导包。
    没有构造方法,因为它的成员全部是静态的。
  • 获取随机数的方法
    public static double random():返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
  • 我要获取一个1-100之间的随机数,怎么办?
    int number = (int)(Math.random()*100)+1;

Math类的随机数功能的应用

import java.util.Scanner;

public class GuessNumberGame{

public static void main(String[] args){
    int num = (int)(Math.random()*100+1);
    Scanner scanner = new Scanner(System.in);
    for(int i = 1;i<=5;i++){
        System.out.println("请输入一个整数 范围1---100,包含1和100");
        int userNum = scanner.nextInt();
        if(userNum>num){
            System.out.println("猜大了");
        }else if(userNum<num){
            System.out.println("猜小了");
        }else{
            System.out.println("恭喜你猜对了");
            beak;
        }
        if((5-i))>0{
            System.out.println("你还剩余:"+(5-i)+"次机会");
        }else{
            System.out.println("GameOver");
        }
      }
  }
}

代码块的概述和分类

  • 代码块概述:
    在Java中,使用{}括起来的代码被称为代码块。
  • 代码块分类:
    根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块
  • 常见代码块的应用
    1:局部代码块 :
    在方法中出现;限定变量生命周期,及早释放,提高内存利用率
    2:构造代码块 :
    在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
    3:静态代码块:
    在类中方法外出现,加了static修饰
    在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次。

继承的概述

  • 继承概述:
    多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。
  • 继承格式:
    通过extends关键字可以实现类与类的继承
    class 子类名 extends 父类名 {}
    单独的这个类称为父类,基类或者超类;这多个类可以称为子类或者派生类。

继承的好处、弊端及特点

  • 继承的好处:
    1:提高了代码的复用性
    2:提高了代码的维护性
    3:让类与类之间产生了关系,是多态的前提
  • 继承的弊端:
    类的耦合性增强了,开发的原则:高内聚,低耦合。
    耦合:类与类的关系
    内聚:就是自己完成某件事情的能力
  • Java中类的继承特点:
    1:Java只支持单继承,不支持多继承。(只有一个父类)
    有些语言是支持多继承,格式:extends 类1,类2,…
    2:Java支持多层继承(继承体系)

继承的注意事项和什么时候使用继承

  • 继承的注意事项
    1:子类只能继承父类所有非私有的成员(成员方法和成员变量)
    2:子类不能继承父类的构造方法,但是可以通过super(待会儿讲)关键字去访问父类构造方法。
    3:不要为了部分功能而去继承,不然容易增加类与类之间的耦合性。
  • 什么时候使用继承:
    如果有两个类A,B。只有他们符合A是B的一种,或者B是A的一种,就可以考虑使用继承。

继承中成员变量的关系

  • 子类中的成员变量和父类中的成员变量名称不一样
  • 子类中的成员变量和父类中的成员变量名称一样时
    在子类中访问一个变量的查找顺序(“就近原则”)
    1: 在子类的方法的局部范围找,有就使用
    2: 在子类的成员范围找,有就使用
    3: 在父类的成员范围找,有就使用
    4:如果还找不到,就报错

this和super的区别和应用

  • this和super的区别:
    this 代表的是本类对象的引用
    super代表的是父类存储空间的标识(可以理解成父类的引用,可以操作父类的成员)
  • this和super的使用:
    1:调用成员变量
    this.成员变量 调用本类的成员变量
    super.成员变量 调用父类的成员变量
    2:调用构造方法
    this(…) 调用本类的构造方法
    super(…) 调用父类的构造方法
    3:调用成员方法
    this.成员方法 调用本类的成员方法
    super.成员方法 调用父类的成员方法

继承中构造方法的关系

  • 子类中所有的构造方法默认都会访问父类中空参数的构造方法,因为每一个构造方法的第一条语句默认都是:super()
  • 继承中构造方法的注意事项:
    super(…)或者this(….)必须出现在第一条语句上

方法重写概述及其应用

  • 什么是方法重写:
    子类中出现了和父类中一模一样的方法声明(方法名,参数列表,返回值类型),也被称为方法覆盖,方法复写。
  • 方法重写的应用:
    当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。
    这样,即沿袭了父类的功能,又定义了子类特有的内容。
  • Override和Overload的区别
    方法重写就是子类不满足父类的方法,进行重新编写
    而方法重载是参数类型不同或者参数个数不同
  • 方法重写注意事项:
    1:父类中私有方法不能被重写
    因为父类私有方法子类根本就无法继承
    2:子类重写父类方法时,访问权限不能更低
    最好就一致
    3:父类静态方法,子类也必须通过静态方法进行重写, 子类重写父类方法的时候,最好声明一模一样。

继承 猫狗案例

public class MyTest{
   public static void main(String[] args){
       Dog dog = new Dog();
       System.out.println(dog.name);
       System.out.println(dog.age);
       dog.eat();
       dog.run();
       System.out.println("-----------------------------");
       Cat cat = new Cat();
       System.out.println(cat.name);
       System.out.println(cat.age);
       cat.eat();
       cat.run();
       }
 }
 class Animal{
     String name;
     int age;
     public void run(){
         System.out.println("跑步");
     }
}
class Dog extends Animal{
    String name = "来福";
    int age = 4;
    public void eat(){
        System.out.println("狗吃骨头");
    }
}
class Cat extends Animal{
    String name = "汤姆";
    int age = 3;
    public void eat(){
        System.out.println("猫吃鱼");
    }
}

final关键字概述

  • final概述:
    final关键字是最终的意思,可以修饰类,变量,成员方法。
  • final修饰特点:
    修饰类: 被修饰类不能被继承
    修饰方法: 被修饰的方法不能被重写
    修饰变量: 被修饰的变量不能被重新赋值,因为这个量其实是一个常量
    修饰基本数据类型时,是值不能被改变
    修饰引用数据类型时,是地址值不能被改变
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值