远方的灯塔 - 专注于服务端技术分享 远方的灯塔 - 专注于服务端技术分享
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)

Terwer Green

一个后端老菜鸟
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)
  • JavaSE

    • Java_SE之Java_SE平台与JDK
    • Java_SE_第二讲:原生数据类型
    • Java_SE_第三讲:原生数据类型使用陷阱
    • Java_SE_第四讲:运算符
    • Java_SE_第五讲:运算符续
    • Java_SE_第六讲:流程控制语句
    • Java_SE_第七讲:流程控制续
    • Java_SE_第八讲:理解面向对象程序设计
    • Java_SE_第九讲:面向对象之封装
    • Java_SE_第十讲:面向对象之封装续
    • Java_SE_第十一讲:面向对象之封装续二
    • Java_SE_Lesson_1:面向对象高级
    • Java_SE_Lesson_2:多态与static和final关键字
    • Java_SE_Lesson_3:接口、单例模式、包与访问控制
    • Java_SE之Object类详解
    • Java_SE之String类及其源代码剖析
    • 包装类与数组
    • 冒泡排序、交换排序与快速排序
    • Java数组的查找方式及二分查找
    • 常量与Java集合框架简介
    • 常用的Java开发IDE
    • ArrayList深入分析
    • LinkedList源代码深入剖析
    • 数据结构中的基本结构分析
    • 《Java语言新特性》

  • 开源框架

  • Linux

  • Struts2

  • Hibernate

  • Webservice

  • 分布式

  • 分布式框架

  • 后端开发
  • JavaSE
terwer
2022-09-30

JavaSELesson_3:接口、单例模式、包与访问控制

  1. 接口中所声明的方法都是抽象方法。接口中的方法都是 public​ 的。

  2. 接口中也可以定义成员变量。接口中的成员变量都是 public , final , static 的。

  3. 一个类不能既是 final 又是 abstract 的。因为 abstract 的主要目的是啥定义一种约定,让子类去实现这种约定,而 final 表示该类不能被继承。

    这样 abstract 希望该类可以被继承而 final 明确说明该类不能被继承,两者矛盾。

    因此一个类不能既是 final 的又是 abstract 的。

  4. Desgin Pattern(设计模式)。

    单例模式(Singleton)

    public class SingletonTest {
        public static void main(String[] args) {
            Singleton s1 = Singleton.getInstance();
            Singleton s2 = Singleton.getInstance();
    
            System.out.println(s1 == s2);
        }
    }
    
    class Singleton {
        private static Singleton singleton = new Singleton();
    
        private Singleton() {
        }
    
        public static Singleton getInstance() {
            return singleton;
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

或者

public class SingletonTest {
    public static void main(String[] args) {
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();

        System.out.println(s1 == s2);
    }
}

class Singleton {
    private static Singleton singleton;

    private Singleton() {
    }

    public static Singleton getInstance() {
        if (null == singleton) {
            singleton = new Singleton();
        }
        return singleton;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

注意:方式二,在多线程的时候,可能会出现线程不安全,不是单例的情况。

  1. 包(package)

用于将完成不同功能的类分门别类,放在不同的目录(包)下。

包命名规则:将公司域名反转作为包名。

www.terwer.space,包名:space.terwer

对于包名:每个字母都是小写。

如果定义类的时候,没有使用 package,那么 Java 认为我们的包位于默认的包里面(default package)。

  1. 编译带有 package 声明的 java 源文件有两种方式

    a)直接编译,然后根据类中所定义的包名,逐一手工建立目录结构,最后将生成的 class 文件拷贝该目录(较麻烦,很少使用)。

    b)使用编译参数 -d​ ,方式为 javac -d . 源文件.java ,这样编译后,编译器会自动帮我们建立好包对应的目录结构。

  2. 有两个报名。分别是 aa.bb.cc 与 aa.bb.cc.dd,那么我们称后者为前者的子包。

  3. 导入(import​):将使用 package 分离的各个类导入回来,让编译器能够找到所需的类。

  4. import 的语法:import space.terwer.PackageTest;​

  5. import space.terwer.* ,博士导入 space.terwer 包下面的所有类。

  6. import aa.bb.*​​​​​​ 并不会导入 aa.bb.cc 包下面的类。

    这样写:

    import aa.bb.*;
    import aa.bb.cc,*;
    
    1
    2
  7. 关于 package、import、class 的顺序问题:

    a)首先要定义包(package),可选

    b)接下来使用 import 进行导入,可选

    c)然后才是 class 或者 interface 的定义。

  8. 如果两个类在同一个包下面,那么不需要导入,直接使用即可。

  9. 访问修饰符(access modifier)

    1)public(公共的):被 public 修饰的属性和方法可以被所有类访问。

    2)protected(受保护的):被 protected 修饰的属性和方法可以在类内部、相同包以及该类额子类所访问。

    3)private(私有的):被 private 修饰的属性和方法只能在定义该属性和方法的类的内部使用。

    4)默认(不加访问修饰符):在类内部以及相同包下面的类所使用。

  10. instanceof:判断某个对象是否是某个类的实例。用法:

    引用名 instanceof 类名(接口名),返回一个 boolean 值。

  11. People people = new Man();

  12. System.out.println(people instanceof People);// 结果为true

    因为 Man 是 People 的子类,因此 Man 可以看做是 People 的实例。

文章更新历史

2022-10-10 feat:初稿。

‍

编辑 (opens new window)
#接口#方法#成员#变量#声明
上次更新: 2023/02/22, 13:47:25
Java_SE_Lesson_2:多态与static和final关键字
Java_SE之Object类详解

← Java_SE_Lesson_2:多态与static和final关键字 Java_SE之Object类详解→

最近更新
01
解决css部分border被圆角切掉之后圆角的边框消失问题
03-18
02
使用TypeScript开发一个自定义的Node-js前端开发脚手架
03-08
03
Github-Actions使用release-please实现自动发版
03-06
更多文章>
Theme by Vdoing | Copyright © 2011-2023 Terwer Green | MIT License | 粤ICP备2022020721号-1 | 百度统计
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式