zoukankan      html  css  js  c++  java
  • JAVA核心技术I---JAVA回顾

    一:基础类型运算

    大部分的指令都没有支持byte、charshort,没有任何指令支持boolean类型。
    编译器在编译期或者运行期将byte和short类型的数据带符号扩展为相应的int类型数据,将boolean和char类型数据零位扩展为相应的int类型数据。
    与之类似的,在处理byte、char、short和boolean类型的数组时,也会转换成对应的int类型的字节码指令来处理。
    因此,大多数对于byte、char、short和boolean类型数据的操作,实际上都是使用相应的int类型作为运算类型的。

    二:final关键字修饰的方法不能被重写,可以被重载,可以被继承

    class TestAbstract{
        public TestAbstract() {
            System.out.println("asd");
        }
        
        public final String get() {
            String obj=new String("ffff");
            return obj;
        }
    }
    
    class taT extends TestAbstract{
        public static int a;
        
        public String get(int a) {    //重载override,overwrite
            this.a=1;
            return "fafw";
        }
    }

    可以正常继承使用

    三:静态成员方法的访问修饰符

    静态方法的访问修饰符:都可以用于修饰静态成员方法public,protected,default(注意default不能秀出来),private

    注意:若是使用private修饰静态成员方法,则对外不可见,不允许直接使用类名.成员方法调用,可以使用静态成员方法进行使用静态成员方法调用

    四:静态成员方法是属于特定类,不能在类之间继承

    class taT extends TestAbstract{
        public static int a;
        
        public String get(int a) {
            this.a=1;
            return "fafw";
        }
        
    
        static void say() {
            
        }
        
        public static void say2() {
            System.out.println("father");
        }
        
        protected static void say3() {
            
        }
        
        //可以被其他静态成员方法访问,但是不允许直接使用类名.静态成员名调用
        private static void say4() {
            
        }
        
    }
    
    public class Test extends TestA implements TestTable{
    
        public Test(int i) {
            super(i);
            // TODO Auto-generated constructor stub
        }
        
        public static void say2() {    //不属于重写,只是在这个类中包含了这个静态方法而已,与父类的静态方法无关
            System.out.println("child");
        }
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            taT.say();
    
            Test.say2();    //调用的是本类的静态方法,是允许的
            //Test.say()  say3() say4()都是不对的,因为这个类中并没有这些静态方法
        }
    
    }

    注意:

    由于静态方法是属于某个特定类,而不具有继承属性,故不能在子类中实现,必须在本类中实现,故:虚成员函数不可能是static成员函数

    五:求余-虽然C语言不允许求余符号后面为小数,但是java允许 

    六:接口和抽象类

    (一)接口可以被继承:接口继承接口

    (二)抽象类可以继承实体类:还是抽象类

    七:equals和==(重点

        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Integer a1=new Integer(9);  //是在堆上,所有a1 a2虽然是不可变对象,但是内存地址不同,所以不是指向一个地址内存
            Integer a2=new Integer(9);
            if(a1==a2) {
                System.out.println("a1==a2");
            }
            
            if(a1.equals(a2)) {
                System.out.println("a1 equals a2");
            }
        }

    (一)对于“==”

    基本数据类型(也称原始数据类型) :byte,short,char,int,long,float,double,boolean。他们之间的比较,应用双等号(==),比较的是他们的值。
    引用数据类型:当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址(确切的说,是堆内存地址)。

    (二)对于equals

    JAVA当中所有的类都是继承于Object这个超类的,在Object类中定义了一个equals的方法,equals的源码是这样写的:
    public boolean equals(Object obj) {
        //this - s1
        //obj - s2
        return (this == obj);
    }
    可以看到,这个方法的初始默认行为是比较对象的内存地址值,一般来说,意义不大。
    所以,在一些类库当中这个方法被重写了,
    如String、Integer、Date。
    在这些类当中equals有其自身的实现(一般都是用来比较对象的成员变量值是否相同),
    而不再是比较类在堆内存中的存放地址了。
    所以说,对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是内存中的存放位置的地址值,跟双等号(==)的结果相同;如果被复写,按照复写的要求来。

    (三)总结

     == 的作用:
      基本类型:比较的就是值是否相同
      引用类型:比较的就是地址值是否相同
    equals 的作用:
      引用类型:默认情况下,比较的是地址值。
    注:不过,我们可以根据情况自己重写该方法。一般重写都是自动生成,比较对象的成员变量值是否相同

    八:8个基本类型的包装类对象为不可变对象(一定范围)

  • 相关阅读:
    T-SQL 关闭数据库所有连接
    单页web应用(SPA)的简单介绍
    ES6—解构赋值
    ES6 — 新增关键字let、const
    一行能装逼的JavaScript代码
    Date 对象总结
    JS从头开始
    CSS基础知识点(二)——居中
    web标准的可用性和可访问性
    CSS基础知识点(二)——选择器
  • 原文地址:https://www.cnblogs.com/ssyfj/p/10486581.html
Copyright © 2011-2022 走看看