• 【Java】Java学习笔记


    教程

    • 计算机所有的数据信息都是由二进制的0,1组成的,B(Byte)就是字节,1B=8bit(位),2的10次幂是1024,我们所说的硬盘容量是40GB、80GB、160GB,这里的B指是的Byte也就是“字节”。
        1 KB = 1024 bytes =2^10 bytes 
        1 MB = 1024 KB = 2^20 bytes
        1 GB = 1024 MB = 2^30 bytes
    • 面对对象编程:先确定数据结构,在确定数据运算。
    • 构造方法的名词和类名是一样的,构造方法没有返回值。
    • 构造方法的成员变量的设置不要和类成员变量一样!
    • new关键字:实例化对象,同时也会去调用匹配的构造函数 //为对象分配内存空间、引起对象构造方法的调用、为对象返回一个引用。
    • this代表的是对象本身(实例化过的)
    • 静态方法(static),可以直接用类名去调用方法 //静态方法=类方法,实例方法=其他方法 //变量同理
    • 定义一个常量,使用final关键字 /声明的同时要进行初始化
    • 类的继承:extends关键字。
    • super关键字代表父类,可用于调用父类的方法、变量。 //继承中:子类new时 会先去调用父类的构造方法 //构造方法是不能被继承的,只能用super();
    • 多态性。 //如果之类有这个方法就调用子类的,如果子类没有这个方法就调用父类的。
    • instanceof关键字。 //实例名 instanceof 类名 //用于判断实例是否属于某类 //继承中:默认子类的实例属于父类,但父类的实例不属于子类
    • main函数是static的,只能调用static的方法和成员变量。

    ======================================

    • package语句必须在第一行 //前面只能是注释或空白行
    • final类:终极类 //确保被继承时不会被子类覆盖
    • 缺省方法(default):void 类名(){}
    • Java中访问修饰符public、private、protecte、default的意义讲解:

    • 抽象方法、抽象类(abstract):抽象类 - 抽象方法 - 没有方法体

          public abstract class 抽像类名{

            protected abstract void 抽象方法名();}

    *继承某抽象类,该子类必须完成抽象类中的抽象方法的实现,否则该子类应定义为抽象类。 //子类要补上父类的坑

    • native 方法 //到时候看下教程 

    =============================================

    接口(interface)实现接口(implements) //类似于抽像方法和抽象方法的实现

    *接口中定义的方法必须为public abstract 方法名

    *所以实现接口的类中,实现接口中的抽像方法

    package T3;

    //接口sport,定义两个抽像方法(权限必须大于等于基类/实现类)

    *接口类型的对象可以去调用接口类实现的方法。 //多做练习,理解下!!

    定义一个接口,接口方法

    接口类实现接口中的所有方法

    B类定义一个接口类类型的变量,变量可直接去调用接口方法

    *接口的继承:可以多继承;一个类可以继承多个接口。 

    ===============================================

    A类 - B类 //A是B的外部类;B是A的内部类;

    *内部类可以访问外部类的私有成员变量

    *在内部类中调用外部类的成员变量:A.this.成员变量名

    *在main函数(与AB不同父类节点的),直接调用内部类:

    *在外部内中定义一个方法,返回内部类类型,new一个内部类的实例,在去调用内部类的方法 //

    。。。

    Inner getInner(){
    return new Inner();
    }

    class Test{
    public static void main(String[] args){
    Outer ou = new Outer();
    Outer.Inner in = ou.getInner(); //或者是Outer.Inner in = ou.new Inner();
    in.print();
    }
    }

    *静态成员函数不属于任何一个类对象,没有this指针。可以用类名代替。

    *内部类与外部类建立起关系

    *接口的内部类方法的调用

      在接口实现类中定义一个new内部类的方法,再在main函数中实例一个接口类变量,调用该方法new一个内部类变量,再去调用内部类的方法。

    。。。

    Animal getAnimal(){
    return new Tiger();
    }

    class TestAn{
    public static void main(String[] args){
    Zoo zo = new Zoo();
    Animal an = zo.getAnimal();
    an.eat();
    an.sleep();
    }
    }

    *定义的方法也可返回接口,但要在;前完成接口中的方法实现,不然不能直接调用。 //把这个类(接口在这实现了成为类,or随便命名一个新的类在这实现)称为匿名内部类

    //内部类可以随意的访问外部类的成员,但外部类要产生一个内部类的实例去访问内部类的成员。

    ====================================================

    Java的异常处理机制try/catch/finally

    try{}

    catch(Exception e){}

    *getMessage()、toString()方法去获取异常信息 //e.getMessage()、e.toString()

    *printStackTrace() 打印出异常信息 //e.printStackTrace();

    *如果知道了异常类型,Exception可以直接写异常名。

    *抛出一个异常 throws Exception //如果不去捕获的话,要逐级向上都要抛出,知道main函数抛出较大java异常处理机制。//可以抛出多个异常

    *如果是要在某一步进行异常捕获的话,捕获的异常类型要和抛出异常类型一致!

    *可以多个catch语句(异常类型要从具体到一般)

    *捕获异常时也可以继续抛出异常(对象) 如throw e //逐级向上还是要继续捕获异常或者抛到最后的main函数

    *也可以自定义一个异常 //定义一个异常(类)继承Exception

    class JennysException extends Exception{
    JennysException(String str){
    super(str);
    }
    }

    调用自定义的异常:if (b<0) throw new JennysException("Blah");

    *finally语句放在最后,不管如何都要执行的。//除了使用System.exit(-1)去停止程序的运行。

    *子类的方法抛出的异常范围应该小于等于父类的

    ===============================================

     数组定义并且初始化:int[] num1=new int[]{X,Y,Z}

    *System.arraycopy(src, srcPos, dest, destPos, length) //数组一的值复制到数组2;src/dest 数组一/数组二;srcPos/destPos 两数组的复制起点

    *一旦拷贝,两个数组是共用一个内存的。

    *Java中的循环

    for (int i=0;i<num2.length;i++){
    System.out.println(num2[i]);
    }

    *数据排序:Arrays.sort(数组名字); //升序

    *定位数组中的数据:int index = Arrays.binarySearch(数组名, 要定位的变量值); //index取出来是该变量在数组中的位置下标值

    *num>s.num?1 : num==s.num?0 :-1; //如果大于返回1,如果等于返回0,否则返回-1;

    *数组类型定义的两个方法toString(输出),compareTo(以哪个值为标准进行比较)//main函数中Arrays.sort排序要用到的规则

    *要进行类型转换,要先转换成integer类型,再利用integer的方法去进行转换。 //String的变量要用双引号。

    *Java自带的名为Class的类。先使用getClass去取得这个类,再使用它的getName方法去取类名。

    Pointt po = new Pointt();
    Class c1 = po.getClass();
    System.out.println(c1.getName());

    *或者使用Class的forName(类命)方法,但要考虑异常处理;也可以使用类名.class去赋值Class类型变量,再变量调用getName方法

    *Pointt p1 = (Pointt)c1.newInstance(); //强制转换成Pointt类型再赋值给p1

    *反射API (不理解)

    *Runtime类,他是一个与JVM运行时环境有关的类;//exec方法可以调用一个外部方法

    *Process类中InputStream类提供一个输入流的方法getInputStream();  //不理解,进程信息没打印出来。

    *单例类

    ============================================================

    只有String可以进行+,+=好操作(可以和其他类型的一起做+,+=)

    StringBuffer处理更长的字符串 //StringBuffer jen = new StringButter("jennyhui");

    append //jen.append("1").append("blah").append(1);

    delete(起始索引位置,终止索引位置) //jen.delete(5, 8);

    insert //jen.insert(5, "brown");

    x.length (x的元素个数大小)

    ============================================================

    数组初始化:

    public static void change(int[] num){。。} //以数组为参数的函数change

    int[] num = new int[]{3,4}; //数据num的实例初始化

    函数参数的初始化:

    Point pt = new Point(); //类Point的参数pt,实例初始化一个空间

    System.out.println(pt); //直接打印对象,它会去调用这个对象的toString方法,返回这个对象的描述 //可以取重写toString方法

    *java的clone方法 有点不太明白啊啊啊啊

    ============================================================

    感谢阅读,一起努力呗!
  • 相关阅读:
    如何提高技术素养
    spoolsv.exe 无法启动
    太阳高度角和方位角的计算
    树莓派 3 alsa 声卡驱动
    PHP 7 Xdebug 深深的坑
    java 线性规划 和lingo 比较
    Python Microsoft Visual C++ Compiler Package for Python 2.7
    Node debug
    angular 调试 js (分 karms protractor / test e2e unit )
    hbase scan 的例子
  • 原文地址:https://www.cnblogs.com/jennyhui/p/4043034.html
Copyright © 2020-2023  润新知