JavaSE入门:面向对象(二)

目录

4.面向对象的三大特性

1.static

1.static

2.代码块运行顺序机制

2.封装

1.用无参和有参输出两个人信息

2.输出长方形和正方形面积

3.初始化定义box的长宽高属性值,然后用有参构造做颜色,输出这个盒子

4.分别用有参和无参输出片名以及评分导演

3.继承

1.object类

2.super

3.重写

4.猫狗继承

4.多态

1.多态

2.instanceof  

3.(类型转换)引用转换

4.final修饰符


4.面向对象的三大特性

1.static

存在的主要意义

  • static的主要意义是在于创建独立于具体对象的域变量或者方法。以致于即使没有创建对象,也能 使用属性和调用方法!
  • static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置 于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执 行每个static块,并且只会执行一次。
  • 为什么说static块可以用来优化程序性能?是因为它的特性:只会在类加载的时候执行一次。因此, 很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行

static的独特之处

  • static是静态的意思,可以用来修饰成员变量、成员方法。static修饰成员变量之后称为静态成员变量(类变量),修饰方法之后称为静态方法(类方法)。
  • static修饰后的成员变量,可以被类的所有对象共享(访问、修改)。
  • 在该类被第一次加载的时候,就会去加载被static修饰的部分而且只在类第一次使用时加载 并进行初始化,注意这是第一次用就要初始化,后面根据需要是可以再次赋值的。
  • static变量值在类加载的时候分配空间,以后创建类对象的时候不会重新分配。赋值的话,是 可以任意赋值的,取最后值
  • 被static修饰的变量或者方法是优先于对象存在的,也就是说当一个类加载完毕之后,即便没 有创建对象,也可以去访问

static注意事项

  • 静态成员变量,(内存中只有一份、只加载一次、属于类)输出时,默认访问类中静态成员最后一次出现的值,建议用类名访问,也可以用对象访问.
  • 静态方法中是不可以出现this关键字的。 

静态方法和实例方法与成员的区别

  • 静态方法只能访问静态的成员,不能访问实例成员和实例方法
  • 实例方法可以访问静态的成员,也可以访问实例成员。
  • 实例成员变量只能用对象触发(new)访问及使用更改。
  • 在外部调用静态方法时,可以通过类名.方法名的方式也可以使用对象.方法名的方式,而 实例方法只有后面这种方式
  • 成员方法表示对象自己的行为的,且方法中需要直接访问实例成员,则该方法必须申明成实例方法。
  • 成员方法如果该方法是以执行一个通用功能为目的,或者需要方便访问,则可以申明成静态方法.

1.static

例:
package java_jichu.mianxiangduixiang.demo09;
//static
public class Student {
    private static int age;//静态变量   多线程会经常使用
    private double score;//非静态变量

    public void run(){
        //非静态方法可以直接调用静态方法
        go();
    }
    public static void go(){
        //静态方法可以调用静态方法
        System.out.println("我是1");
    }
    public static void main(String[] args) {
        go();
//        run();静态方法不能直接调用非静态方法,
        new Student().run();//需要new一个Student.run()得到run()
    }
}
package java_se.java_jichu.zuoye8_10;

public class Test {
    public static void main(String[] args) {
        System.out.println(User.name);//静态变量可以直接调用
//        System.out.println(User.age);//报错

        User u =new User();
        System.out.println(u.age);
        System.out.println(u.name);

        User u1=new User();
        u1.age=23;
        u1.name="黑马程序员";

        User u2=new User();
        u2.age=35;
        u2.name="传递教育";

        System.out.println(u1.age);//23  new的对象的age所以不变
        System.out.println(u1.name);//传递教育  这里的name始终是调用的static的静态成员,而不是用new调用的,所以u1或者u2或者un个数都是看最后一次改的值
    }
}
/*
package java_se.java_jichu.zuoye8_10;

public class User {
    static String name;
    int age;
}

 */

2.代码块运行顺序机制

代码块是类的5大成分之一(成员变量、方法,构造器,代码块,内部类),定义在类中方法外。
在Java类下,使用 { } 括起来的代码被称为代码块 。

代码块分为
静态代码块: 
格式:static{}
特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发、只执行一次
使用场景:在类加载的时候做一些静态数据初始化的操作,以便后续使用。

构造代码块(了解,见的少):
格式:构造器{}
特点:每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并且在构造器执行前执行
使用场景:初始化实例资源。

局部代码块:用于限定变量生命周期,及早释放,提高内存利用率

例:
package java_jichu.mianxiangduixiang.demo09;

public class Person {
    //第三个执行
    public Person() {
        System.out.println("构造方法");
    }
    //第二个执行,赋初始值
    {
        System.out.println("匿名代码块");
    }
    //第一个执行,只能执行一次
    static {
        System.out.println("静态代码块");
    }

    public static void main(String[] args) {
        Person person1 = new Person();//静态、匿名、构造
        System.out.println("==========");
        Person person2 = new Person();//匿名、构造
    }
}

2.封装

  • 我们程序设计要追求“高内聚,低耦合" 高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。
  • 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界 访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个 类也没有什么意义了

记住这句话就够了:属性私有,/get/set

例:
package java_jichu.mianxiangduixiang.demo02;

//封装
//类private:私有    public 公有
public class Student {
    //属性私有
    private String name;//名字
    private int id;//学号
    private char sex;//性别
    private  int age;
//    提供一些可以操作这个属性的方法!
//    提供一些public的get、set方法
    //get(获得这个属性)
    public String getName() {
        return this.name;
    }
    public int getId() {
        return this.id;
    }
    public char getSex() {
        return this.sex;
    }
    public int getAge() {
        return this.age;
    }
    //set(给这个属性赋值)
    public void setName(String name) {
        this.name = name;
    }
    public void setId(int id) {
        this.id = id;
    }
    public void setSex(char sex) {
        this.sex = sex;
    }
    public void setAge(int age) {
        if (age>120||age<0){//不合法
            this.age=3;
        }else {
        this.age = age;
        }
    }
}
/*
        Student s1 = new Student();
        s1.setName("雙馬");
        //方法名,参数列表
        System.out.println(s1.getName());
        s1.setAge(999);
        System.out.println(s1.getAge());

1.提高程序的安全性,保护数据
2.隐藏代码的实现细节
3.统一接口
4.系统可维护增加了
 */

1.用无参和有参输出两个人信息

package java_se.java_jichu.zuoye8_5;

import java.util.Random;

public class TestStudent {
    /*
    (1)编写一个Java程序,创建一个Student类,其中有属性name、gengder、age三个字段,
    定义一个无参的构造方法和带三个参数的构造方法,分别对属性进行赋值,定义一个成员方法show,
    将三个属性的内容输出。创建主类TestStudent,分别用无参构造方法和有参构造方法创建两个Student类型对象,
    并输出成员属性的值。
     */
    public static void main(String[] args) {
        Student s1 = new Student("雙馬","你猜",20);
        s1.show();
        Student a1=new Student();
        a1.setName("双马");
        a1.setGengder("
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值