Java日常笔记

计时器Timer工具类使用注意事项

  1. 调用schedule()方法时需要考虑线程任务调度,当唤醒TimerTask时,由于执行的确切时机取决于JVM调度策略和当前还有多 少线程等待CPU处理,因此不能保证指定时间内执行,如果一个时间任务执行的时间比较长,大量线程等待执行,那么执行其他任务会受到影响,是固定延迟调度,执行任务中的每一个延迟会传播到后续的任务执行。
  2. 调用scheduleAsFixedRate()是理论计算出下次需要调度的时间用以排序,是用固定比率调度,使用三个参数来指定task每隔x秒执行一次。

    • schedule(TimerTask task, long delay, long period)
    • schedule(TimerTask task, Date time, long period)
    • scheduleAtFixedRate(TimerTask task, long delay, long period)
    • scheduleAtFixedRate(TimerTask task, Date firstTime, long period)

    • 使用两个参数可以指定task多少秒后执行任务一次(时间为long类型)或是指定当前任务的执行时间(时间为Date类型)

    • 注意:利用timer执行任务结束后,要调用timer.cancle()方法,避免下次重新启动timer时出现计时不准确的错误。

Java中= 与 == 的区别

  • = 是赋值运算符,将常量、变量或表达式的值赋给某一个变量。
  • == 是比较运算符,返回的值为ture或false,常见有 == >= <= > < !=

Java局部内部类和匿名内部类的特点和作用

  1. 成员内部类:即作为一个外部类的成员所在,与外部类的属性方法并列,内部类中不可定义静态变量,可以访问外部类所有成员。

    • 外部类的变量如果和内部类的变量没有同名的,则可以直接使用变量名访问外部类变量
    • 在内部类中访问自己的内部类中的变量直接使用变量名
    • 也可以使用“th is.变量名”来访问内部类变量
    • 访问外部类与内部类同名的实例变量可用“外部类名.this.变量名”
    • 外部类可以访问内部类中的方法

    优点:内部类作为外部类的成员,可以访问外部类私有的属性和方法

  2. 局部内部类:即方法中定义内部类,与局部变量相似,在局部内部类前不加修饰符public和private,范围是定义的代码块。

    • 如果内部类没有与外部类同名的变量,在内部类中可以直接访问外部类的实例变量
    • 可以访问外部类的局部变量(即方法内的变量),但是变量必须是final的
    • 用”this.变量名” 访问的也是内部类变量
    • 用外部”外部类类名.this.变量名” 访问的是外部类变量
    • 访问局部内部类必须先有外部类对象

    注意:局部内部类中不可定义静态变量,可以访问外部类的局部变量(即方法内的变量),但是变量必须是final的。

  3. 静态内部类:即用static修饰的成员内部类

    • 静态内部类只能访问外部类的静态成员包括静态变量和静态方法。
    • 静态内部类不能访问外部类的非静态成员包括非静态变量和非静态方法。
    • 外部类访问内部类的静态成员:内部类.静态成员。
    • 外部类访问内部类的非静态成员:实例化内部类即可。

    注意:静态内部类中可以定义静态成员或非静态成员

Java 程序是如何运行的

  • 用户USER - - 高级语言程序 - - 编译器 - - 操作系统 - - 硬件
  • Java 程序 - - 编译器 - - 与平台无关的字节码程序 - - Java 虚拟机 - - 特定机器的语言程序
  • 用户输入 int i 通过编译器编译成可执行程序,请求操作系统,操作系统在硬件上分配一块内存,内存当做变量 i 来使用。

Java 运算符

  • ‘a’ + 1 输出结果为 98
  • “” + ‘a’ + 1 输出结果为 a1
  • / 除法运算符,如果两个对象有一个或两个为浮点型数据,则商也是浮点型
  • % 取余运算符,所得余数的正负只和被除数相同 -5%3 == -2

Java 创建对象内存分配

A a = new A(); // 相当于 c 语言动态分配内存 A *a = (A *)malloc(sizeof(A))
// new A(); 在堆中动态分配一块区域,被当做了 A 对象
// a 本身的内存是在栈中分配的
// 堆中内存的地址付给了 a
// a 指向堆中的内存, a 代表了堆中的内存
//a.i 代表 a 这个静态指针变量所指向的动态内存中的 A 对象 i 这个成员

程序执行过程 硬盘(程序) - - 内存(代码) - - 执行过程进行内存管理
1.new 出来的东西放在 heap(堆)中
2.局部变量放在 stack(栈)中
3.静态变量,字符串常量放在 data segment 中
4.代码存放在 code segment 中

Java 变量

  • 成员变量:在类范围内定义的变量,对象被创建时自动进行初始化赋值
  • 局部变量:在一个方法内定义的变量,不会自动进行初始化赋值,要进行初始化
  • 静态变量:属于类本身,没有对象也可直接访问,存储在 data segment 中

this 关键字

  • n 个对象属性有不同的空间,但是都共用同一个方法,分辨这个方法正在处理哪个对象,方法内部有一个隐藏的 this 指针,指向当前调用方法的对象。

Java 继承

  • 子类内部可以访问父类的非私有的成员,私有成员无法被子类方法访问。
  • 子类对象只能访问从父类继承过来的非私有成员。
  • 总结:私有不能被继承

super 关键字

  • 每个子类的构造方法,都隐含地调用 super() ,如果父类没有这种形式的构造方法,那么编译时会报错。
  • 如果显示的写出 super(),则必须保证该语句是第一条语句。
  • super() 如果不写,则编译器会自动添加,如果父类没有无参的构造方法,那么会出错。
  • 调用父类的构造方法语句必须借助于 super,不能通过父类的类名调用。

Java 多态

  • 子类对象可以直接赋给父类引用,但父类对象任何情况下都不可以直接赋给子类引用。
  • 通过父类引用只能访问子类对象从父类继承过来的成员。
  • 父类引用永远不可能直接赋给子类引用,只有在父类引用本身指向的就是一个子类对象时,才可以把父类引用强制转化为子类引用。

Java 包

  • 如果把类文件放在了包中,那么类的真正名字将是包名和类名的组合。
  • 在同一个包中只有私有的不能被另一个类访问,也只有私有的不能被继承。
  • 在不同包没有任何关系的两个类,只有 public 类的 public 的成员才可以被另一个类访问。
  • 不同包中有继承关系的两个类,只有 public 类的 public 和 protected 成员可以被另一个包中的子类在内部使用,但在子类的外部,通过子类对象名只能访问父类的 public 成员。

Java 异常处理

  • 顶级父类 Throwable 有两个子类,Error 和 Exception ,Exception 下又分 RuntimeException。
  • Error 是系统错误,程序员无法处理这些异常。
  • RuntimeException 的子类异常,是你可以处理又可以不处理的异常。
  • 凡是继承自 Exception 但又不是 RuntimeException 子类的异常我们都必须的捕捉并处理。

Java Object 类的 equals 方法

  • 用来判断调用 equals 的对象和形参 object 所引用的对象是否是同一对象,所谓同一对象是指内存中同一块存储单元,即便是内容完全相等的两块不同的内存对象,也会返回 false。
发布了34 篇原创文章 · 获赞 0 · 访问量 5427
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章