JAVA小记

标识符:用于Java程序中变量,类,方法等命名的符号

  • 由字母,数字,下划线(——),美元($)组成,不能以数字开头
  • 不能是Java关键字和保留字
  • 严格区分大小写
  • 标识符的命名最好能反应出其作用

JAVA语言中的字符char可以存储一个汉字吗?

可以。因为JAVA语言采用Unicode编码,Unicode编码占两个字节,中文也占两个字节。

重载:方法名相同,参数列表不同,与返回值类型无关。

重写:子类方法重写父类方法遵循“两同两小一大”的规则

两同:
1)方法名
2)形参列表
两小:
1)返回值类型比父类更小或相等 (子类重写方法的返回值类型应为父类方法返回值类型的子类或和父类方法返回值类型相同)
2)异常比父类方法更小或相等
一大:
子类权限比父类大或相等

Java中到底是传值还是传址

1,既是传值,也是传地址,基本数据类型传递的值,引用数据类型传递的地址(对象引用的拷贝)
2,java中只有传值,因为地址值也是值(出去面试都说这种,支持者是高司令(java之父))
基本数据类型的值传递,不改变原值,因为调用后就会弹栈,局部变量随之消失
引用数据类型的值传递,改变原值,因为即使方法弹栈,但是堆内存数组对象还在,可以通过地址继续访问

final

  • final修饰特点
    • 修饰类,类不能被继承
    • 修饰变量,变量就变成了常量,只能被赋值一次
    • 修饰方法,方法不能被重写
    • 基本类型,是值不能被改变
    • 引用类型,是地址值不能被改变,对象中的属性可以改变
  • final修饰变量的初始化时机
    • 显示初始化
    • 在对象构造完毕前即可

abstract

  • A:抽象类特点
    • a:抽象类和抽象方法必须用abstract关键字修饰
      • abstract class 类名 {}
      • public abstract void eat();(不能用private、static、synchronized、native访问修饰符修饰)
    • b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口
    • c:抽象类不能实例化那么,抽象类如何实例化呢?
      • 按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
    • d:抽象类的子类
      • 要么是抽象类
      • 要么重写抽象类中的所有抽象方法
  • B:抽象类的成员特点
    • a:成员变量:既可以是变量,也可以是常量。abstract是否可以修饰成员变量?不能修饰成员变量
    • b:构造方法:有。
      • 用于子类访问父类数据的初始化。
    • c:成员方法:既可以是抽象的,也可以是非抽象的。

接口 interface

  • A:接口特点
    • a:接口用关键字interface表示
      • interface 接口名 {}
    • b:类实现接口用implements表示
      • class 类名 implements 接口名 {}
    • c:接口不能实例化
      • 那么,接口如何实例化呢?
      • 按照多态的方式来实例化。
    • d:接口的子类
      • a:可以是抽象类。但是意义不大。
      • b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
  • B:接口成员特点
    • 成员变量;只能是常量,并且是静态的并公共的。
      • 默认修饰符:public static final
      • 建议:自己手动给出。
    • 构造方法:接口没有构造方法。
    • 成员方法:只能是抽象方法。
      • 默认修饰符:public abstract
      • 建议:自己手动给出。

抽象类和接口的区别

  • A:成员区别

    • 抽象类: 共性
      • 成员变量:可以变量,也可以常量
      • 构造方法:有
      • 成员方法:可以抽象,也可以非抽象
    • 接口: 扩展
      • 成员变量:只可以常量
      • 成员方法:只可以抽象
  • B:关系区别

    • 类与类
      • 继承,单继承
    • 类与接口
      • 实现,单实现,多实现
    • 接口与接口
      • 继承,单继承,多继承

匿名内部类

  • 定义:内部类的简化
  • 前提:存在一个类(具体类或抽象类)或者接口
  • 格式: new 类或接口(){
    }
  • 本质:一个继承该类或者实现该接口的子类匿名对象

序列化

1、序列化是干什么的?
简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。

2、什么情况下需要序列化
a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;

在继承中代码的执行顺序为:

1.父类静态对象,父类静态代码块
2.子类静态对象,子类静态代码块
3.父类非静态对象,父类非静态代码块
4.父类构造函数
5.子类非静态对象,子类非静态代码块
6.子类构造函数

volatile

出于运行速率考虑,java编译器会把经常访问到的变量放到缓存中,读取变量在缓存中读。但是在多线程编程中,内存中的值和缓存中的值可能会不一致,volatile用于限定变量只能从内存中读,保证对其他线程而言,只都是一致的,但是不能保证原子性和线程安全。

Java表达式转型规则由低到高转换:

1、所有的byte,short,char型的值将被提升为int型;
2、如果有一个操作数是long型,计算结果是long型;
3、如果有一个操作数是float型,计算结果是float型;
4、如果有一个操作数是double型,计算结果是double型;
5、被fianl修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化。

原文地址:https://www.cnblogs.com/StephenChenin/p/9092139.html