面向对象

万物皆对象,类也是一个对象【反射的知识点】

    空即***即空

 

  面向对象中有一个特殊的对象:null [空对象]

     空即万物  万物即空 - 也就是说任意类型对象都可以指向null

 

  案例:

        盘古【null】开天劈地 【空生万物】

 

2.this关键字

案例:

    创建一个人类

        有属性:姓名 年龄性别

        功能:吃饭

        要求写构造方法【无参和有参的】

 

成员变量和局部变量重名时

    优先选择局部变量

    如果想给成员变量赋值 在成员变量前用this.修饰

 

this的含义:

        当前类对象的引用。

    

    一个类有多个对象,this到底代表哪个对象呢?

            哪个调用方法 this就代表该对象

 

this在成员变量(在类中方法)调用时 默认是隐藏的

 

什么情况下显示使用this??

    当成员变量与局部变量重名时 显式使用this

 

this的练习:

    在学生类中有一个功能:比较两个学生的年龄是否相同

 

this在构造函数间的使用

     构造函数的作用是:给对象的属性初始化的

     构造函数也是一个函数,函数就是一个功能的封装 当需要该功能的时候 就直接调用函数即可。由于构造函数的特殊性,不能直接使用构造函数名来调用 这个时候就是用this来辅助

        辅助: this([传参]);

                需要传参的时候传参 

                没有参数的时候调用的是无参的构造方法 -  this();

 

    【注意:使用this调用构造函数时 这条语句必须位于第一句】

 

练习:

        创建一个动物Animal类

            类中属性: 品种  年龄 性别  毛色

            功能: 叫  吃

            构造方法:有一个无参的 【为每个属性赋默认值】

                            有一个具有三个参数的【品种 年龄 性别】

                            有一个给所有属性赋值的

 

        在测试类中

                使用者三个构造方法分别创建 品种为:猫 狗 老虎的对象

                调用叫 和 吃的方法

 

 

3.面向对象的特性之一 - 封装

面向对象有三大特性:封装 继承 多态。 继承是多态的前提

封装(Encapsulation):

    指隐藏对象的属性和实现细节,仅对外提供公共的访问方式。

 

生活实例:

      吃饭: 面向对象【找饭店满足需求】

            饭店做饭时 :

                    买菜

                    洗菜

                    切菜

                    炒菜

               这些操作对于吃饭的人来说 没有必要了解 所以在饭店中有厨房的地方 把以上操作隐藏

 

java程序中所说的封装是:将对象的属性私有化,对外提供对应的公共的set和get方法即可

        【set - 设置 - 为属性赋值】

        【get - 获取 - 获取属性的值】

 

案例:

    设置人的年龄

 

封装:

    将对象的属性私有化

            就是在属性前添加访问权限修饰符private(私有的)

        当对一个属性添加访问权限修饰符后,该属性只能在本类中使用

 

        如果想在外界对私有的属性赋值 或者 获取对应的值

        ---> 对外提供公共的set和get方法

        set方法格式:

            ---> 通过外界赋值 == 需要外界传参

        public void set属性名(属性类型 变量){

            为对应的属性赋值

        }

        例如:给name属性赋值

        public void setName(String name){

            this.name = name;

        }

        get方法的格式

                ---> 外界获取该属性的值 == 这个方法需要有返回值

               public 属性类型 get属性名(){

                return 属性;

            }

                

        例如:获取name属性的值

        public String getName(){

            return name;

        }    

 

4.封装的好处

封装的好处: 降属性私有化之后 可以提供对应的赋值和取值的方法,当赋值不符合实际逻辑时,可以在赋值的方法(set方法)中加入自己的逻辑判断,这种操作提高了代码的健壮性,以及数据的安全性

 

5.set方法和构造函数的使用

使用人设置年龄的案例

 

如果想通过有参的构造方法创建对象,

    有参的构造方法创建对象

            通过方法的调用 将数据传到对应的类中 在该类中对属性进行赋值的 外界并没有直接操作对象的属性,所以可以赋值成功。为了避免赋值的随意性,在有参的构造方法中调用赋值的set方法对属性进行赋值

 

6.封装的练习

设置一个学生类Student

    属性:姓名 学号 成绩

 利用封装特性 对学生类进行封装 并在测试类中创建学生对象 打印学生信息

    将属性私有化的关键字:private  公共的关键字public

 

7.static关键字

static是一个静态修饰符,可以修饰成员变量,也可以修饰成员方法

static修饰的变量放在静态域中

 

7.1 使用static修饰成员变量 

    用static修饰的成员变量称之为静态变量

    

    使用场景:

        当该类的每个对象的某属性值都一致时,为了节省内存空间,可以使用static修饰该属性。

        对象的属性是跟随着对象放在堆中。static修饰的变量放在静态域中,这个变量属于类,被所有对象所共享.

 

案例:

    Person

        姓名 年龄  国籍(CH)

 

【了解】在静态域中的变量 一旦被赋值 将永久持有该值,一直到被修改或者程序终止

 

静态变量的调用:

        调用方式有两种 对象的引用变量.静态变量

                或者   类名.静态变量 【经常使用的】

 

    为什么经常使用类名调用静态变量 而不是使用对象引用变量来调用????

        创建对象的时候 类已经存在了 静态变量是直接可以由类来调用的,如果再因为调用静态变量而创建一个对象去占用堆的空间 【浪费内存了】

 

 

7.2 使用static修饰方法

        这种形式常见于工具类 Math  Arrays

 

自己制作一个工具类    

        工具类中的功能:

            比较两个数的大小

            数组进行降序排序

    

7.3 static修饰符的特点

    a. 静态的内容是随着类的加载被加载到内存中的

    b. 静态内容的加载时机优先于对象

    c. 可以直接通过类来调用

 

7.4 static的注意事项

    在静态的方法中只能使用静态的内容,不能直接使用非静态内容

    原因: 在静态方法中使用了在内存中不存在的内容

 

8.main方法

main也是一个类中的静态方法,只不过这是一个特殊的方法,调用者不由我们控制,而是有虚拟机完成的

 

main方法的格式是固定的

    public static void main(String[] args)

 

方法被调用的时候 如果有参数 是必须得传参的

 

猜想:当虚拟机调用main方法时 传递的是什么参数???

    // 通过接收者来看一下 虚拟机调用main函数时 传的参数是什么?

        System.out.println(args.length); // 0

        // 长度是0 代表传进来的是一个长度为0的数组

        //String[] arr = new String[0];

        /*

        有没有办法对main函数进行传参???

            有

            java 运行程序的时候

            控制台指令 java

                作用:调用虚拟机运行程序

                运行哪个程序 ---》 java 程序名 参数 参数

            java Main 嘻嘻 哈哈 嘎嘎

        */


        System.out.println(Arrays.toString(args));

 

9.static练习

设计一个表示用户的User类,类中的变量有用户名、记录用户个数的变量‘
  定义类的构造方法(无参、为用户名赋值),创建几个对象 统计对象的个数

 

10.代码块

​代码块的分类

    普通代码块

            位于方法体中 【一般不用】  表现形式

            void method(){

 

                {

                    普通代码块

                }

            }

    构造代码块

        位于类中的

        class 类名{

 

                {

                    // 构造代码块

                }

            

        }

    静态代码块

        位于类体中

        class 类名{

 

            static{

                // 静态代码块

            }

        }

 

构造代码块

​ 作用:与构造函数相同 - 为对象属性进行初始化

 

与构造函数的区别:

        构造代码块是为该类的所有对象进行统一初始化的

        有参的构造函数仅是给当前对应对象初始化的

 

构造代码块的执行时机:

        对象一建立(new)就被执行了 而且 执行时机优先于构造函数

    

 

静态代码块

​作用:

    如果某些内容只需要加载一次,那么这个内容可以放置在静态代码块中[第二阶段 加载JDBC的驱动类时]

 

静态代码块是随着类的加载而加载的,执行时机优先于main函数,而且静态代码块只会被执行一次

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务