zoukankan      html  css  js  c++  java
  • 0515 面向对象 类与对象、局部、成员变量、基本、引用类型、封装 private 和this 及应用

    面向对象

    方法:java中,用来完成解决某件事或实现某个功能的方法

    格式:

    修饰符 返回值类型 方法名(参数类型 参数名1,参数类型  参数名2,....){

    执行语句

    .....

    return 返回值;

    }

    class 里面只有两种东西  属性和方法

    ① 修饰符:比较多,有对访问权限进行限定的,如:静态修饰符static  最终修饰符final;

    ②、返回值类型:用来限定方法返回值的数据类型(当声明没有返回值时,类型处写void);

    ③、参数类型:用来限定调用方法时传入参数的数据类型

    ④、参数名:是个变量,接收调用方法时传入的数据

    ⑤、return :用于结束方法以及返回方法指定类型的值(当声明没有返回值时,可省略)

    ⑥、返回值:被return语句返回的值,该值会返回给调用者。

     1、面向对象与面向过程的区别(都是一种思维方式)

    ①、面向过程是执行者(自己做事情)

     ②、面向对象更符合我们思考习惯的思想,复杂事情简单化,从执行者变指挥者(角色发生改变)

    2、类与对象:

    ①、类是一组相关属性和行为的集合,一个抽象的概念

    ②、对象是该类事物的具体

    ③、创建对象的格式

    类名 对象名 = new 类名();
    public class Car {
        String color;
        int number;
        void run() {
            System.out.println(color + ":" + number);
        }
    }
    //测试类
    
    public class CarDemo {
        public static void main(String[] args) { 
            //测试:Car类中的run方法。
            // 1,创建Car的对象。给对象起个名字。
            Car c = new Car();// c是类类型的变量。c指向了一个具体的Car类型的对象。
            // 2,通过已有的对象调用该对象的功能。格式:对象.对象成员;
            // 3,可以该对象的属性赋值。
            c.color = "red";
            c.number = 4;
            c.run();
        }
    }

    ④、局部变量和成员变量的区别

    1:定义的位置不同:

      成员变量是定义在类里面(不在方法中)

      局部在(类中的)方法中或者{}语句里面的变量

    2:在内存中的位置

      成员在堆内存的对象中

      局部在栈内存的方法中

    3:生命周期不同:

      成员随着对象出现而出现在堆中,随对象消失从堆中消失(gc垃圾回收机制)

      局部随着方法的运行而出现在栈中,随方法的弹栈消失

    4:初始化不同:

      成员在堆中,默认了初始化值

      局部没有初始化默认值,手动赋值才能使用。

     PM:

    封装:就是一种包装。专业点叫信息隐藏 private

    修饰符:public 是公共的访问  private是本类

    以前通过属性赋值 ,现在用方法进行赋值 set方法赋值 get方法取值

    ①、好处:隐藏实现细节,提供公共访问细节,提高代码复用、安全性

    ②、设计原则:隐藏了不想让外界知道的细节,属性隐藏,提供公共的访问方式。

    ③、体现:类、方法、private修饰成员变量

    private:(封装体现形式

    ①、私有的意思,权限修饰符,可以修饰成员变量和成员方法

    ②、特点:

      被private修饰过的成员只能在本类中访问;

    ③、应用:

      类中不需要对外提供的内容都需要私有化,包括属性和方法;

      以后再描述事物,属性都私有化。

      对成员变量的访问:
            赋值(设置 set )、取值(获取 get)

    this关键字

      在成员变量前加this 专门解决成员变量和局部变量同名问题  哪个对象调用this方法,this就代表哪个对象。

    package com.oracle.Demo02;
    public class Peoper {
        private String name;
        private int age;
        //用set方法赋值    
        public void setName(String name){
            //this专门解决成员与局部变量同名问题
            this.name=name; 
        }
        //用get方法取值
        public String getName(){
            //返回值 return
            return name;
        }
        public int getAge(){
            return age;
        }
        public void setAge(int age){
            //判定如果a大于等于0或者小于等于100
            //用了this之后就无序 加判定 if..else了
            /*if(age>=0&&age<=100){
                }else{
                age=0;
            }*/
            this.age=age;
        }
        public void speak(){
            System.out.println("我叫"+name+",今年"+age+"岁了");
        }
    }
    package com.oracle.Demo02;
    
    public class Demo01 {
    
        public static void main(String[] args) {
            /*Peoper p=new Peoper();
            p.name="胸大";
            p.age=18;
            p.setAge(18);
            p.setName("胸大");
            System.out.println(p.getName()+" "+p.getAge());*/
            //判断两人是否是同龄人  先new两个人出来
            Peoper p1=new Peoper();
            p1.setAge(18);
            Peoper p2=new Peoper();
            p2.setAge(19);
        }
    }

    私有的快捷键  Source-Generate Getters and Setters  选择 select all

    褐色选择区域:快捷键工具的使用效果

    //比较两人是否同龄
    package com.oracle.Demo02;
    public class Peoper {
        private String name;
        private int age;
        //用set方法赋值    
        public void setName(String name){
            //this专门解决成员与局部变量同名问题
            this.name=name;
        }
        //用get方法取值
        public String getName(){
            //返回值 return
            return name;
        }
        public int getAge(){
            return age;
        }
        public void setAge(int age){
            this.age=age;
        }
        //比较两个人是否是同龄人
        public boolean compare(Peoper p){
            return this.age==p.age;
        }
    }
    package com.oracle.demo02;
    
    public class Demo01 {
        public static void main(String[] args) {
                Person p1=new Person();
            p1.setAge(18);
            Person p2=new Person();
            p2.setAge(19);
            boolean flag=p1.compare(p2);
            System.out.println(flag);
        }
    }
  • 相关阅读:
    Docker
    CTF各种资源:题目、工具、资料
    Android工具集合
    Android相关资源
    命令注入新玩法:巧借环境攻击目标
    分库分表
    数据库读写分离
    Insomni'hack teaser 2019
    Insomni'hack teaser 2019
    35C3 CTF
  • 原文地址:https://www.cnblogs.com/zs0322/p/10868014.html
Copyright © 2011-2022 走看看