JavaSE基础语法--傻瓜笔记--1021(第三章:面向对象2)

第三章:面向对象

面向对象2

1.对象与引用

Java语言中除基本类型之外的变量类型都称之为引用类型。

Java中的对象是通过引用对其操作的。

Car baoma = new Car( );这句语句的目的是创建一个对象,它包含了三个动作:

new Car();是以Car类为模板,调用Car类的构造函数,在堆栈中以复制的形式创建一个Car类对象。

②单单创建一个对象是不能用的,需要再创建一个Car类引用变量,就是以后可以用来指向Car类对象的对象引用。

③“=”操作符使得对象引用指向刚创建的那个Car对象。

在这条语句中有两个实体,一个是对象引用变量,二是对象本身。

基本类型和引用类型的区别

基本数据类型引用数据类型
概念变量(单纯地值)对象(引用)
存储位置在栈中存 值在栈中存引用,在堆中存具体对象的属性值。
值传递与引用传递

Java中进行方法调用传递参数时,参数传递有两种:

值传递:(形式参数是基本数据类型):方法调用时,实际参数把它的值传递给形参,形参只是用实参传来的值初始化自己的内容,实参与形参是两个不同的存储单元,因此方法中的形参值的改变不会影响到实参的值。

引用传递:(形参数据类型是引用类型):也称传地址。方法调用期间,实际参数是对象,这个时候实际参数与形式参数指向同一个地址,在方法执行时,对形参的操作就是对实际参数的操作。这个结果会在方法结束后被保留下来,所以方法中的形参的改变会影响到实参。

:基本类型传递的是该数据值本身。引用类型传递的是对对象的引用,并不是对象本身。

2.static关键字

static被称为静态,可以用来修饰类的属性,方法,代码块,内部类。

特征:
①随着类的加载而加载

​ ②优先于对象存在

​ ③修饰的成员,被所有对象所共享

​ ④可不创建对象,直接被类调用

属性:static属性是类的所有对象共享的,不管创建了多少对象,static在内存中只有一个

static方法:可以创建对象调用,也可以用类名调用。建议直接用类名调用。并且在static方法中只能调用static属性,因为静态的方法的优先级高于对象。

public class Static {
    int age;
    String name;
    static int tikcer = 11;

    public static void tikcer(){
        //静态方法只能引用静态变量,不能引用成员变量。
        tikcer -= 1;
        System.out.println("买票"+tikcer);
    }
    public void getMax(){
        //成员变量既可以引用成员变量也可以引用静态变量。
        System.out.println(name+tikcer);
    }
    public static void main(String[] args) {
        //静态方法可以通过类名直接引用
        Static.tikcer();
        Static.tikcer();
        Static.tikcer();
        Static a = new Static();
        //也可以通过对象访问
        a.tikcer();
    }
}

3.代码块

定义:一个没有名字的方法块,分为实例块和静态块。

实例块:每次创建对象时自动调用。

静态块:类加载时自动调用,但是仅调用一次,且与是否创建对象无关。

:静态块最先执行,因为其余的都需要对象来引用,而静态块不需要。

优先级:静态块 > 实例块 > 方法

public class DaiMaKuai {
    static int age = 10;

    {
        System.out.println("实例代码块");
    }

    static{
        System.out.println("静态代码块");
    }

    public static void main(String[] args) {

        new DaiMaKuai();//创建一次对象,就执行一次实例代码块。
        new DaiMaKuai();
        System.out.println(DaiMaKuai.age);//加载一次类就调用一次静态代码块,但也只执行一次。
                //并且静态代码块最先执行
    }
}

4.包

包的概念:包就是文件夹。

包的作用:管理类

具体体现:
①避免重名类。

全类名 = 包名(类的地址) + 类名;

import导入外部包的类:不能导入两个类名相同的,即使属于不同的包。 如果强行使用,需要通过全类名来引用。

②按照不同的功能管理类。

包的命名规范:全小写,并区分包的级别。

1)第一级:指项目类型:如com(商用),org(组织),gov(政府),edu(教育)。

2)第二级:指项目所开发或者运行公司的名称,如oracle,sun

3)第三级:指项目名称:如bcms,cms等。

4)第四级:指项目模块的名称,util

………

③控制访问权限。

访问权限修饰符

权限从大到小:

1)public:公共权限,可以修饰类,属性,方法

2)protected:受保护的权限,可以修饰属性,方法 //不同包不同类中不能访问

3)default(默认的,不写即为默认):同包权限,可以修饰类,属性,方法 //不同包不同类中不能访问

4)private:私有权限,可以修饰属性,方法 //只能在同一个包的同一个类中。

:在同一个包的不同类中不需要导包;

在不同包的子类中可以访问受保护的权限

具体代码:
同类中都可以访问:
public class Demo1 {

    public  int pnum;
    protected  int pronum;
            int num;
    private int prinum;

    public static void main(String[] args) {
        //在同类中,四种修饰符所修饰的都可以访问
        int pnum = 10;
        int pronum = 101;
        int num = 1;
        int prinum = 11;
    }
}
同包不同类中除了private都可以访问:
public class Demo2 {
    public static void main(String[] args) {
        Demo1 d = new Demo1();
        //在同包不同类中只能访问public,默认,和protected修饰的;私有的已经不能访问了
        d.pnum = 10;
        d.num = 101;
        d.pronum = 11;
    }
}
不同包不同类中只能访问public:

但是当当前的类继承了被引用的类之后,就可以访问受保护的:

import com.ff.javaoop1021.day7.Test;
import com.ff.javaoop1022.day8.Demo1;

public class TestDemo1 extends Demo1{
     public void test(){
         Demo1 d = new Demo1();
         //在不同包的不同类中只能访问public修饰的,且还得提前用import引用。
         d.pnum = 101;
     }

     public void test1(){
         //当前类作为子类继承之后,就可以访问受保护的
         TestDemo1 d1 = new TestDemo1();
         d1.pronum = 101;
     }
}

5.封装

封装

:就是将类的某些信息藏在类内部,不允许外部程序直接访问。

优点:
​ ①只能通过规定的方法访问

​ ②隐藏类的实现细节

​ ③方便加入控制语句

​ ④方便修改信息

封装后可以向外部程序提供专门的方法,来访问类的私有属性。

this

:表示自身类的对象。

可以引用成员变量和成员方法,但是只能在非静态方法中使用

public class Packaging {
    //隐藏类的某些信息,只能通过规定方法访问,方便加入控制语句,方便修改信息
    private String name;
    private int age;

    //公共权限的构造方法
    public Packaging() {

    }

    public Packaging(String n, int a) {
        name = n;
        age = a;
    }

    //专属功能的成员方法
    public void setName(String n) {
        if (n != null) {
            name = n;
        }
    }

    public String getName() {
        return name;
    }

    public void setAge(int a) {
        if (a > 0) {
            age = a;
        }
    }

    public int getAge() {
        return age;
    }
}

若有错误,欢迎私信指正。

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
面向对象编程是一种编程范式,它将程序的构建和设计思路以面向对象的方式进行组织和实现。在Java中,面向对象编程是基于Java SE(Standard Edition)的一种编程方式。第07讲主要介绍了面向对象编程中的一些基本概念和关键术语。 在面向对象编程中,我们将程序中的数据和对数据的操作(方法)封装在一起,形成一个对象对象由两部分构成:属性和方法。属性是用来描述对象的特征,而方法则是对象可以执行的操作。对象之间通过消息(方法调用)进行通信和交互。面向对象的核心思想是通过封装、继承和多态实现程序的复用和扩展。 封装是面向对象编程中的一个重要概念,它指的是将类的属性和方法进行封装,使得外部无法直接访问和修改对象的内部状态,只能通过公共的方法来操作属性和执行方法。封装提供了一种将数据和行为组合在一起的方式,可以保护数据的完整性和安全性。 继承是面向对象编程中的另一个重要概念,它指的是通过定义一个新的类来继承现有类的属性和方法。通过继承,子类可以继承父类的属性和方法,并可以在此基础上进行扩展和修改。继承提供了一种代码复用的机制,可以减少重复编码的工作量。 多态是面向对象编程的又一个重要概念,它指的是同一类型对象在不同的情况下可以有不同的表现形式。多态通过方法的重写和方法的重载实现。方法的重写指的是在子类中重新定义和实现父类的方法,方法的重载指的是在同一个类中可以定义多个同名但参数列表不同的方法。 总结来说,面向对象编程是一种将程序组织和设计思路以对象为中心的编程方式。在JavaSE中,我们可以通过封装、继承和多态来实现面向对象编程的目标。封装可以提高程序的可维护性和可复用性,继承可以减少重复编码的工作量,多态可以灵活地操作对象。掌握这些基本概念和关键术语,可以帮助我们更好地理解和应用面向对象编程的思想。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值