当前位置: 首页 > news >正文

java笔记(十二)重新理解java基本特性

2023.1.10 今年26岁了 深感对未来之恐惧

一、封装

数据被保护在类的内部,尽可能隐藏内部的细节,只有一些对外接口来与外部发生联系

public class Person {

    private String name;
    private int gender;
    private int age;

    public String getName() {
        return name;
    }

    public String getGender() {
        return gender == 0 ? "man" : "woman";
    }

    public void work() {
        if (18 <= age && age <= 50) {
            System.out.println(name + " is working very hard!");
        } else {
            System.out.println(name + " can't work any more!");
        }
    }
}

二、继承

一个类可以继承自一个父类 获得非private的属性和方法 (public protected)

三、多态

编译时多态:方法重载
运行时多态:程序中定义的对象引用所指向的具体类型在运行期间才确定(比如泛型)

public class Instrument {
    public void play() {
        System.out.println("Instrument is playing...");
    }
}

public class Wind extends Instrument {
    public void play() {
        System.out.println("Wind is playing...");
    }
}

public class Percussion extends Instrument {
    public void play() {
        System.out.println("Percussion is playing...");
    }
}

public class Music {
    public static void main(String[] args) {
        List<Instrument> instruments = new ArrayList<>();
        instruments.add(new Wind());
        instruments.add(new Percussion());
        for(Instrument instrument : instruments) {
            instrument.play();
        }
    }
}

上面的代码 从静态上看 Instument对象应该调用的是自己的play方法 其实运行中调用的是子类的静态方法

四、数据类型

(1)基本类型
基本类型共8个:
boolean/1
byte/8
char/16
short/16
int/32
float/32
long/64
double/64

new Integer(1) — 创建新对象
Integer.valueOf(1) ---- 使用缓存池 得到同一个对象的引用
缓存池大小为-128 ~ 127 (java8)
在这个范围内 使用自动装箱将自动调用valueOf方法

Integer m = 123;
Integer n = 123;
System.out.println(m == n); // true

(2)String
String是不可变的:这句话经常看到,是什么意思呢?
String内部使用char数组来存储数据 并且声明为final,且String内部不提供改变value数组的方法

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

不可变有什么好处:
1、缓存hash值
String类型的hash值不变
2、String pool
如果一个String对象被创建过了 就可以直接从String pool中引用
3、安全性
String是最常用作参数的类型 不可变性保证了传输过程中的安全
4、线程安全
String可以在多个线程中安全使用

StringBuilder可变 非线程安全
StringBuffer可变 且线程安全

String.intern()
intern()方法保证两个变量引用的是同一个对象

String s1 = new String("aaa");
String s2 = new String("aaa");
System.out.println(s1 == s2);           // false
String s3 = s1.intern();
System.out.println(s1.intern() == s3);  // true

如果使用String s1 = “aaa” 则它已经自动被加入到了String pool中

相关文章:

  • 【BP靶场portswigger-服务端8】文件上传漏洞-7个实验(全)
  • STM32常用开发案例,STM32开发方案含USB升级、Fatfs存储、软件定时器、数据结构、按键处理库、解析单行带空格的字符串
  • kettle简单的ETL抽取同步两个库之间的数据
  • C语言常用字符串函数
  • 基于 js 制作一个贪吃蛇小游戏
  • 你知道猜凶手和猜名次如何利用编程实现吗?
  • SpringBoot动态生成接口
  • 一图读懂mybatis 查询接口的源码流程
  • Linux中的vim最小集、指令集及其配置
  • 【胖虎的逆向之路】02——Android整体加壳原理详解实现
  • 【学Vue就跟玩一样】组件-非单文件组件的使用
  • 数据结构进阶 AVL树
  • 正确的清理内存方式,才能让你的空间更加充裕
  • 关于sql注入这一篇就够了(适合入门)
  • 【Linux学习】进程控制
  • 77. Combinations
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Druid 在有赞的实践
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Javascript 原型链
  • Java教程_软件开发基础
  • Mybatis初体验
  • nfs客户端进程变D,延伸linux的lock
  • React-Native - 收藏集 - 掘金
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 飞驰在Mesos的涡轮引擎上
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 使用Gradle第一次构建Java程序
  • 思维导图—你不知道的JavaScript中卷
  • 通过git安装npm私有模块
  • 为视图添加丝滑的水波纹
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • AI算硅基生命吗,为什么?
  • Mac 上flink的安装与启动
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • "无招胜有招"nbsp;史上最全的互…
  • # 飞书APP集成平台-数字化落地
  • (C)一些题4
  • (C语言)逆序输出字符串
  • (二)windows配置JDK环境
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (四)Controller接口控制器详解(三)
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .net core 6 redis操作类
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • [ SNOI 2013 ] Quare
  • [20170705]lsnrctl status LISTENER_SCAN1