美文网首页TWT Studio - Android 组培训 & 技术分享
Java面向对象程序设计(进阶)

Java面向对象程序设计(进阶)

作者: 刚刚还好_ | 来源:发表于2017-10-08 17:17 被阅读352次

天外天工作室移动-Android 组新人培训 #4

  1. static 关键字
    static 关键字可用来修饰类的成员,包括成员方法和成员变量,static 成员也可以被称作静态成员或者类成员。可以通过像非静态成员一样通过对象访问,也可以直接通过类名访问。

    • static 成员变量
      在之前的例子中可以看到,每个对象各自占有一个非静态成员变量,与之相对应,静态成员变量为类、该类的所有对象所共享 ,且只在该类被初次加载时被初始化。
      e.g. 我们在 Apartment 类中定义一个静态成员变量叫做 totalViewer,用于统计查询过用我们的类建造的房子人次,默认值为0。然后悄悄在 getSize() 方法中加入统计的逻辑,也就是让 totalViewer 加一。

      public class Apartment {
      
          private int size;
          public static int totalViewer = 0;
      
          public Apartment(int size) {
              this.size = size;
          }
      
          public int getSize() {
              ++totalViewer;
              return size;
          }
      
      }
      

      然后在外部不管是 Apartment 类的哪个对象调用了 getSize() 方法,都会使同一个 totalViewer 变量自增。

       Apartment a1 = new Apartment(200);
       a1.getSize();
       a1.getSize();
      
       System.out.println(a1.totalViewer);
       System.out.println(Apartment.totalViewer);
      
       Apartment a2 = new Apartment(300);
       a2.getSize();
       a2.getSize();
       System.out.println(a2.totalViewer);
       System.out.println(Apartment.totalViewer);
      

      输出结果为2和4(通过对象或者类名都可以对静态成员变量进行访问)。

    • static 成员方法
      像静态成员变量一样,静态成员方法也可以通过像非静态成员方法一样通过对象访问,或者直接通过类名访问。
      因为在外部可以不创建对象、直接使用类名对静态成员方法进行访问,所以静态成员方法中不存在this指针。
      静态成员方法中不能访问非静态成员,但是非静态成员方法中可以访问静态成员。
      在 Android 开发中,很多工具类中的工具方法都是以静态方法的形式实现的。

  2. 内部类
    嵌套在类中的类叫做内部类,当外部类中的某个属性过于复杂时可以使用内部类,内部类的对象可以使用 obj.new 字符进行实例化,内部类可能会破坏良好的代码结构,但是内部类的优势是可以访问外部类的成员。

    public class Apartment {
    
        private int size;
        public static int totalViewer = 0;
    
        public Apartment(int size) {
            this.size = size;
        }
    
        public int getSize() {
            ++totalViewer;
            return size;
        }
    
        public static int getTotalViewer() {
            return totalViewer;
        }
    
        class Location {
            City city;
            String street;
            int number;
            int floor;
            boolean faceEast;
    
            public Location(City city, String street, int number, int floor, boolean faceEast)  {
                this.city = city;
                this.street = street;
                this.number = number;
                this.floor = floor;
                this.faceEast = faceEast;
            }
    
            public City getCity() {
                ++totalViewer;
                return city;
            }
    
            public String getStreet() {
                ++totalViewer;
                return street;
            }
    
            public int getNumber() {
                ++totalViewer;
                return number;
            }
    
            public int getFloor() {
                ++totalViewer;
                return floor;
            }
    
            public boolean isFaceEast() {
                ++totalViewer;
                return faceEast;
            }
        }
    }
    

    调用:

      Apartment apartment = new Apartment(300);
      Apartment.Location location = apartment.new Location(City.BEIJING,"Chang'An",305,3,true);
    
  3. 抽象类和抽象方法
    抽象方法就是只有声明没有实现的方法,由继承抽象类的子类来实现具体的抽象方法,抽象方法用 abstract 关键字来修饰。
    在面向对象程序设计的思想中,对象都是由类来实例化的,但是不是所有的类都可以用来实例化对象,如果一个类中的没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类,抽象类用 abstract 关键字来修饰,且抽象方法不能是 private 的。
    包含抽象方法的类肯定是抽象类,但是抽象类中的方法不一定都是抽象方法。

代码来源

本文出现的代码是接着上篇文章的小 demo 写的

  • staticeg 分支:静态成员的示例
  • innerclass 分支:内部类示例
  • abstract 分支:抽象类和抽象方法示例
    GitHub 源码地址

作业

18191 移动 - Android 组第 4 次作业
请按时完成并上交。

再学好这些,你就掌握了入门 Android 开发的 Java 语言基础了!

  1. 接口
  2. 匿名内部类
  3. 异常处理
  4. 多线程
  5. lambda表达式*
  6. 反射机制*
  7. 注解机制*
    * 较难,可以说是深入学习 Java 语言了

推荐 Java 学习网络资源或网站

  1. 极客学院Java wiki
  2. 慕课网
  3. 简书
  4. 掘金
  5. 最重要的还是学会使用搜索引擎寻找自己想学或者不会的内容,能科学上网用Google,不能科学上网可以使用Bing或百度。

大公司的 Java 编程规范

  1. Google Java Style (中文版)
  2. 阿里巴巴Java开发手册(终极版)pdf

联系作者

Gmail: tianjin.whm@gmail.com
请斧正!

参考文档

  1. Java 中的接口和抽象类(转)
  2. Java 中的内部类总结
  3. Java 中的 static 关键字解析

相关文章

  • 《Java核心技术卷 I》之 Java对象与类

    Java对象与类 面向对象程序设计 面向对象程序设计,简称OOP,Java语言就是完全面向对象的。 类 类(cla...

  • 第四章 对象与类

    1 面向对象程序设计概述 面向对象程序设计(简称OOP)是当今主流的程序设计范型 Java是完全面向对象的,必须熟...

  • 面向对象

    title:面向对象tags: 基础,Java 面向对象 面向对象程序设计简介 面向对象的基本思想是使用类、对象、...

  • 面向对象的概念

    面向对象(Object Oriented,OO): 面向对象乃是Java语言的核心,是程序设计的思想。Java语言...

  • 对象与类

    对象与类 Tags: Java核心技术卷I 面向对象程序设计概述 面向对象程序设计简单OOP。 类类是构造对象的模...

  • Java面向对象程序设计(进阶)

    天外天工作室移动-Android 组新人培训 #4 static 关键字static 关键字可用来修饰类的成员,包...

  • 面向对象设计—类和对象

    原文链接:面向对象设计—类和对象 1. 面向对象程序设计的基本概念 Java是一种面向对象的编程语言。面向对象编程...

  • JAVA面试题-笔试题(1)书目录

    笔试题 JAVA面试题之面向对象三大特征 JAVA面试题之面向对象五大基本原则 JAVA面试题之面向对象程序设计的...

  • Java面向对象常见的设计原则有哪些?

    面向对象程序设计是当今主流的程序设计范型,已经取代了早期的“结构化”过程化程序设计开发技术,java是完全面向对象...

  • 1.6 面向对象

    第 1章 面向对象思想 1.1 面向对象思想概述 概述 Java语言是一种面向对象的程序设计语言,而面向对象思想是...

网友评论

    本文标题:Java面向对象程序设计(进阶)

    本文链接:https://www.haomeiwen.com/subject/mcweyxtx.html