05类与对象1_封装

这里写目录标题

一.面向过程与面向对象

  • 程序猿从面向过程的执行者转换成了面向对象的指挥者

二.类和对象的创建和使用

  • 类的定义

    • 修饰符 关键字 类名{
          属性与字段;
          方法();
      }
      //例如:我们创建一个Person类
      class Person{
          //人的特征
          public String name;//姓名
          public String sex;//性别
          public int age;
          //人的行为
          public void eat(){
              System.out.println("干饭");
          }
          public void Learn(){
              System.out.println("学习");
          }
          public void sleep(){
              System.out.println("睡觉");
          }
      }
      /*
      0.类的命名要采用大驼峰方式来命名
      1.这里我们使用关键字class定义一个名为Person的类。
      2.这个类拥有人的一些基本特征姓名,性别,年龄。
      3.这个类拥有人的一些基本行为,吃饭,学习,睡觉。
      4.修饰符 public只能用来定义与文件名相同的类(不然会报错),比如你的文件名是Person.java才能用public class Person这样来定义
      */
      
  • 对象的创建和使用

    • class Person{
          //人的特征
          public String name;//姓名
          public String sex;//性别
          public int age;
          //人的行为
          public void eat(){
              System.out.println("干饭");
          }
          public void Learn(){
              System.out.println("学习");
          }
          public void sleep(){
              System.out.println("睡觉");
          }
      }
      public class test {
          
          public static void main(String[] args) {
              Person person=new Person();
              System.out.println(person.name);//null
              System.out.println(person.sex);//null
              System.out.println(person.age);//0
              person.eat();//干饭
              person.Learn();//学习
              person.sleep();//睡觉
      
          }
      }
      /*
      1.通过new来实例化一个对象
      2.通过person.来调用类的成员
      */
      

四.类的成员之一属性

  • 语法格式

    • 修饰符 数据类型 属性名=初始化值;
      
      修饰符
      1.常用的修饰符有:public protected default private
      2.其它修饰符:static、final
      数据类型
      基本的数据类型+引用类型
      属性名
      属于标识符,符合命名规则和规范
      
    • public class Person{
          private int age=21;
          private String name="Wei";
      }
      
  • java中变量的分类

    • 一.成员变量与局部变量区分
      1.在方法体外,类体内声明的变量称为成员变量
      2.在方法体内部声明的变量称为局部变量
      二.
      1.成员变量:分为实例变量(不以static修饰)类变量(以static修饰)两种
      2.局部变量:形参、方法局部变量、代码块局部变量三种
      
    • 在这里插入代码片05类与对象1_封装

五.类的成员之二方法

  • 方法的定义

    • 修饰符 数据类型 方法名(){
          代码内容;
      }
      
      class Person{
          //人的特征
          public String name;//姓名
          public String sex;//性别
          public int age;
          //人的行为
          public void eat(){
              System.out.println("干饭");
          }
          public void Learn(){
              System.out.println("学习");
          }
          public void sleep(){
              System.out.println("睡觉");
          }
      }
      //方法是这个类的一个行为
      

六.类的成员之二构造器

  • 构造器是一种java的一种特殊的方法,用来初始化成员变量;

  • 语法规则

    • 1.方法名称必须与类名称相同。
    • 2.构造方法没有返回值类型声明。
    • 3.每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造) 。
  • 无参构造器:系统会自动生成,如果自己定义了一个有参构造器,又想调用无参构造器时,这个时候需要自己在重新写一个无参构造器,避免程序报错。

  • 有参构造器

  • class Person{
        public String name;//姓名
        public String sex;//性别
        public int age;
        public Person(String name,String sex,int age){
            this.name=name;
            this.sex=sex;
            this.age=age;
        }
        public Person(String name,String sex){
            this.name=name;
            this.sex=sex;
        }
        public Person(String name){
            this.name=name;
        }
        public Person(){
        }
    }
    public class test {
      public static void main(String[] args) {
    		Person person1=new Person();//用无参构造器来实例化对象
            System.out.println(person1.age);//0
            System.out.println(person1.name);//null
            System.out.println(person1.sex);//null
            //调用有参构造器来实例化对象
            Person person2=new Person("Wei","男",18);
            System.out.println(person2.age);//18
            System.out.println(person2.name);//Wei
            System.out.println(person2.sex);//男
        }
    }
    //构造器的参数可以根据自己想要的参数来调整
    
  • this关键字

    • this表示当前对象引用(注意不是当前对象). 可以借助 this 来访问对象的字段和方法

    • this的3种常用方法
      1.this.name=name;//用this来减少程序歧义
      2.this.方法();
      3.this("bit", 12, "man");//this调用构造函数
      class Person {
          private String name;//实例成员变量
          private int age;
          private String sex;
      //默认构造函数 构造对象
      public Person() {
      	//this调用构造函数
      	this("bit", 12, "man");//必须放在第一行进行显示
      }
      //这两个构造函数之间的关系为重载。
          public Person(String name,int age,String sex) {
          this.name = name;
          this.age = age;
          this.sex = sex;
      }
      public void show() {
      System.out.println("name: "+name+" age: "+age+" sex: "+sex);
      	}
      }
      public class Main{
      	public static void main(String[] args) {
              Person person = new Person();//调用不带参数的构造函数
              person.show();
      }
      

七.类的三大特性之一封装

  • 封装、继承、多态是类的重要三大特性,也是学习类最重要的知识点。

  • 封装

    • 定义
      • 利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。用户无需知道对象内部的细节,但可以通过对象对外提供的接口来访问该对象。
    • 优点
      • 减少耦合: 可以独立地开发、测试、优化、使用、理解和修改
      • 减轻维护的负担: 可以更容易被程序员理解,并且在调试的时候可以不影响其他模块
      • 有效地调节性能: 可以通过剖析确定哪些模块影响了系统的性能
      • 提高软件的可重用性
      • 降低了构建大型系统的风险: 即使整个系统不可用,但是这些独立的模块却有可能是可用的
  • class Person{
        private String name;//姓名
        private String sex;//性别
        private int age;
    
        private String getName() {
            return name;
        }
        private String getSex() {
            return sex;
        }
        private int getAge() {
            return age;
        }
        public void print(){
            System.out.println("大元帅"+getName()+" 今年"+getAge()+" 性别"+getSex()+" 单身哈哈");
        }
    
        public Person(String name, String sex, int age){
            this.name=name;
            this.sex=sex;
            this.age=age;
        }
    public static void main(String[] args) {
            Person person=new Person("逆天而行","男",18);
            person.print();//大元帅逆天而行 今年18 性别男 单身哈哈
        }
    //Person 类封装 name、sex、age 等属性,外界只能调用 print()方法,无法直接获取 name 属性和 sex 属性。
     
        
    
  • 例2

    • class Person{
          private String name;//姓名
          private String sex;//性别
          private int age;
      
          public String getName() {
              return name;
          }
          public void setName(String name) {
              this.name = name;
          }
          public String getSex() {
              return sex;
          }
          public void setSex(String sex) {
              this.sex = sex;
          }
          public int getAge() {
              return age;
          }
          public void setAge(int age) {
              this.age = age;
          }
      
      }
      public static void main(String[] args) {
              Person person=new Person();
              person.setAge(19);
              person.setName("Wei");
              person.setSex("男");
              System.out.println(person.getAge());//19
              System.out.println(person.getName());//Wei
              System.out.println(person.getSex());//男
          }
      //程序可以通过get,set来操作属性
      

八.关键字

  • static

    • 静态变量: 又称为类变量,也就是说这个变量属于类的,类所有的实例都共享静态变量,可以直接通过类名来访问它;静态变量在内存中只存在一份。

    • 实例变量: 每创建一个实例就会产生一个实例变量,它与该实例同生共死。

      • class Persons {
            private int x;         // 实例变量
            private static int y;  // 静态变量
            public static void main(String[] args) {
                Persons person = new Persons();
                int x = person.x;
                int y = Persons.y;
            }
        }
        1.用static修饰的变量与方法可以直接通过类名.变量、类名.方法来调用
        2.普通方法不能调用static变量
        3.static修饰的方法也不能调用普通变量
        

九.代码块

  • 静态变量和静态语句块优先于实例变量和普通语句块,静态变量和静态语句块的初始化顺序取决于它们在代码中的顺序。

  • 1.	public static String staticField = "静态变量";
      
    2.  static {
        System.out.println("静态语句块");
    	}
      
    3.   public String field = "实例变量";
     
    4.  {
        System.out.println("普通语句块");
    	}
    
上一篇:预备知识-python核心用法常用数据分析库(下)


下一篇:[USACO2005OPEN]Expedition