牛客网刷题笔记 1

刷题

  1. 实验室锁门了,因为清明节,剑指Offer在教室,大话数据结构在教室,所有书都在教室。。。。除了电脑,所以刷刷题吧;记一下笔记;

1 多态是对于什么的? (未完成)

下面函数到底输出什么呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class
{
private String baseName = "base";
public ()
{
callName();
}
public void callName()
{
System. out. println(baseName);
}
static class Sub extends
{
private String baseName = "sub";
public void callName()
{
System. out. println (baseName) ;
}
}
public static void main(String[] args)
{
Base b = new Sub();
}
}

我依稀记得一个道理,b是父类的引用,所以虽然用子类初始化,但是能用的也只有父类有的;也就是说引用b可以使用父类有的一切;但是不能调用子类里特殊的部分;但是,他可以调用子类重写的函数;这就是多态;

挺厉害的是吧,我们来模拟一下过程,由于继承,所以构造函数先调用父类的,实例函数,先去找父类的,然后父类一看,诶,你是儿子,扔回儿子的函数中;这就形成了多态;但有一个问题,就是变量;变量这个货是没有多态性的;也就是说直接b.baseName 肯定是父类的,想得到子类的必须要使用get方法;就像上面callName想使用自己家的baseName发现啥也没有;所以自然是null;

2 浮点型的比较

不可将浮点变量用“==”或“!=”与任何数字比较。
千万要留意,无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。
假设浮点变量的名字为x,应当将 if (x == 0.0) 转化为 if ((x>=-EPSINON) && (x<=EPSINON))
或者 if ( fabs(x) <=EPSINON) // fabs(x)取x的绝对值
其中EPSINON是允许的误差(即精度)。
一个实例
System.out.println(Math.pow(64, 1.0 / 3)); 输出为3.9999999999,不是4!!!!!

3 后台线程

将一个线程标记成daemon线程,意味着当主线程结束,并且没有其它正在运行的非daemon线程时,该daemon线程也会自动结束。

4 静态方法的调用 与静态变量

简单来说,即便对象是null,也可以调用类的静态方法
静态变量只能在类主体中定义,不能在方法中定义

5 变量放在那里

用new创建的对象在堆区
函数中的临时变量在栈去
java中的字符串在字符串常量区

6 垃圾回收

参考
这里写图片描述

7 赋值

byte 最大是127;
boolean 不能是null

8 interface

只能用public+默认修饰词;什么private呀,protected呀,static都不能用

9 数据类型

  1. 基本数据类型(或叫做原生类、内置类型)8种:
    整数:byte,short,int,long(默认是int类型)
    浮点类型: float,double(默认是double类型)
    字符类型:char
    布尔类型:boolean
    
  2. 引用数据类型
    数组,类,接口;
    ps: string,数组都是对象啊,都已经有new关键字了!
    扩展:
  • 行为:
    基本类型只是一个值,没有任何行为
    对象类型有自己的行为
  • 内存分配:
    基本类型在栈内分配
    对象在堆内分配
    对象引用保存在栈内
  • 引用与值:
    基本类型是值类型,仅表示一个值,保存在栈内
    引用类型分两部分,对象引用保存在栈内,对象保存在堆内,
    访问变量,是使用的引用找对象

10 知识点

  1. final类的方法都不能是abstract,因为final类不能有子类
  2. throw用于抛出异常。
    throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异常对象。
  3. web会话跟踪:cookie,session,地址重写,隐藏域
  4. 优先选用接口,尽量少用抽象类,抽象类和接口都不能被实例化。