zoukankan      html  css  js  c++  java
  • JAVA学习笔记

    环境:JavaSE 11 + VSCode  书籍:《Head First Java 第二版 中文版》

    Java的程序结构 

    一个源文件可以有多个类,一个类可以有多个方法。(但一个源文件中只能有一个public类)

    含有main方法的类 必须和源文件名一致

    --[ N.java ]

    +++class 1

    --------method1

    --------method2

    --------method_N

    +++class 2

    --------method90

    +++class N

    --------main

    --------method23

    +++class 98

    +++class 87

    --------method90

    .........

    还有更大范围的包,再次先略过

    对象声明、创建与赋值的3个步骤

    引用和对象都是同一类型

    后面的注释只解释红色代码的意义

    Dog myDog;      声明一个引用变量(reference variable)  【这个"引用变量"myDog只能引用到”Dog类型的对象“】 多态和这个道理有点类似

    new Dog();       临时创建对象 [ 分配堆空间用于新建 "Dog对象"]

    myDog = new Dog();   临时创建对象并马上连接到myDog 【这样有了归宿,就不会被无情的Java虚拟机顺手回收了】

     这3个步骤可以合起来,也可以拆开,在对象数组中,我们经常拆开(先声明数组,再用循环给他们 创建对象并连接)


    合起来的解释:

    Dog myDog = new Dog()

    三步合起来叫:把一个Dog对象实例化

    红色:   声明一个引用变量

    粉红色:  创建对象[分配内存]

    绿色:   连接 "对象"和"引用"  (类似于传递指针)   

    或理解为:    把对象连接到"引用变量"身上 Connect a pair of elephants to the "reference variable" 

    我这一句下去你可能会笑死.jpg

     

     为什么要这样麻烦呢?因为: 对象衍生于类,但多个对象不能都用一个名字,所以需要对象引用 

    理解:

    大家属于人类。

    但有高有低,爱好还不同。

    我总不能都叫你“人” 或 叫他“人”吧,

    所以上苍发明了名字,这样我就能叫你“小明”,叫他“小芳”了。

    Ps.小明和小芳都是人类的对象           为什么呢》因为这是Java世界

       说件伤心的事情,假如小明永远地离开了,那么用Java表示就是小明就被指向了null,然后该对象被回收了。

       假如后来有一个人来到世上(但还没有名字,也不知道活不活得到第二天),那就是new 人类();

       如果后来又一个人来到世上还被起名叫做了小明,那么用Java表示就是   小明 =  new 人类();      

            //但是他并不是之前去世的那个小明,而是另一个被叫做小明的人

       假如李李靖和小康前后来到世上,他们长大后建功立业,但有一天他们所在的城却被外敌入侵了,敌人要求李李靖前去,不然屠城。李李靖为保家卫国已视死如归,但小康(被李救过)决定要让恩人好好活着,于是打晕了李,留下纸条要恩人好好活着,然后小康伪装成李的样子,赴死了。  那么就是:

    Human 李李靖  = new Human();        // 人A   主角光环不会死
    Human 小康    = new Human();        // 人B
    // .....
    //   先理解一个赋值概念:     实体C = 名字3    把名字3剥离其他实体再连接到实体C上
    //   括号里是还没执行'='(也就是还没赋值)时的对应的人物
    
    
    
        tmp    = 李李靖(A);          // 人B打晕主角A ,把名字从A上剥离出来再贴在"tmp纸"上(但这名字还不是B的)
    // 此时叫李李靖就是在叫一张纸...
    
        李李靖(A) = 小康[B];        // 把小康这名字剥离B,再连接到"主角A"身上。
    // 此时叫小康就是在叫A
    
    //  别急,人B来拿恩人的名字了
        小康[B]   =  tmp;              //tmp纸连接着恩公名字,从纸上剥离再连接到B自身上
    
    //此时 B获得了恩公原来的名字,伪装成功了。
    //    赴死后
        李李靖[B]   = null;              //    原来的小康死了        然后被无情的敌人(Java虚拟机)杀死了。
    报恩记

     

    继承

    概念:

    二哈是狗,狗是动物  那么:二哈是动物      IS-A(是A)原则

    子类继承自(extends)父类

    注意:private不被显式继承

    多态

    在多态下,引用与对象可以是不同的类型。例子:首先让Dog类继承自Animal类,然后再执行如下

    Animal myDog = new Dog();

    此处运用了多态,引用类型可以是"实际对象类型"的父类

    假如Dog类有eat()的方法,但Animal没有eat

    但多态是有代价的,此时的只能执行myDog的父类Animal的方法,不能执行Dog类的方法eat()。

      如果要执行Dog类的方法,可以这样:

    Dog nowDog = (Dog)myDog;    强制类型转换后赋值给nowDog,再执行其方法nowDog.eat();

    原因,引用变量(myDog)被声明为Animal类,Animal类是没有eat()方法的。但myDog连接的仍然是Dog,所以只能把连接转给nowDog执行

    Ps.不止是"引用变量"的初始化,参数和返回类型也可以多态!

    接口 

    接口是100%抽象的,里面没有方法。所有接口的方法都要在需要用的类中去写,那么还有什么作用呢?

    先看一张图

     假如你是一个公司高手,负责A和B客户的对接,而他们不管你中间弄什么,只要AB交流顺畅

    因为成本问题,两个公司不能统一设备。

    反正A公司只能接收 类型的插头,并且A只发生/识别GBK信息;

      B公司只能接收 类型的插头,并且B只发送/识别UTF-8信息。

    如何让这两个公司信息交流顺畅呢?

    那么你就在中间方格里做一个GBK UTF-8互转的功能,然后再按他们规范分别造出 1、2 类型的插头

    然后,另一个公司C也来做你的生意了(他们只发送/识别GB2312,但他公司可以接收 1、2  类型的插头) 

    那么这时你新增一个类,然后给中间功能加了GB2312转其他编码的功能,同时看到接口文件中的声明,所以你不会忘记,按照声明写上了 1、2 插头。保证是3个针脚标准1、2接口,而不是缺了一个针脚的。

    接口中的声明保证了 函数名、返回类型和参数,就如同声明了标准的1、2插头是3个针脚的,从而保证了输入输出可以被自己和ABC公司准确读取

    所以,接口是一种规范,就像usb接口一样只能插usb而不能插三口的插座一样。但是usb并不理会你中间在干什么,它只要求输出输入符合usb规范,就像蓝牙键盘,插着USB口,中间可以用蓝牙通讯协议,但最后发到usb的一定要是usb的通讯协议。

        相信如果没有usb规范,你会很讨厌借不到 适用于自己手机用的数据线  

        同样,你会很讨厌公司的小明不按规范写程序,最后导致输出输入类型不能被另一个程序读取。(这在软件工程中是要被祭天的)

    调用操作系统命令

    如打开一张图片(b.png)

    Process process = Runtime.getRuntime().exec(cmd /c start /B b.png);

    关于cmd内嵌的start命令执行: C:WINDOWSsystem32>start /?

    注意

    byte是二进制数据,char/String是和字符集相关的字符数据(其值与编码集相关)

    byte[] 转 String/char 会涉及到字符编码集转换问题,在需要二进制处理的地方,请不要使用与字符集有关的方法。

    Buffered* 带缓冲的

    *Reader/Writer 基于字符的读写

    *InputStream/OutStream 基于流的读写

    Editing...

    --------蓝天上的云_转载请注明出处.
  • 相关阅读:
    jvm的内部体系结构浅析--转
    完整java开发中JDBC连接数据库代码和步骤--转
    java语言的线程安全级别--转
    java 中hashcode 与 equals的关系
    mysql 错误 SQL Error: 1366: Incorrect string value: "xE8xAFxA6xE7xBBx86…" for column "address" a
    Linux查看CPU和内存使用情况
    5.2、访问限制
    5、面向对象编程(5.1、类和实例)
    4.5、偏函数
    4.4、装饰器
  • 原文地址:https://www.cnblogs.com/yucloud/p/10278946.html
Copyright © 2011-2022 走看看