Java基础二次学习未知点记录

未知点记录


(ps:本文是笔者学习《 Head First Java》一书的学习笔记)

  • 实现随机数的新方式:
int a= (int)(Math.random()*one);//one是想要0到几的随机数就定义为几(不包含0)
  • 对象本身已知的事物称为实例变量。它们代表对象的状态(数据),且该类型的每一个对象都会独立的拥有一份该对象的值。
  • 类不是对象,但是是用来创建对象的模型 。
  • 所有的Java程序都定义在类中。
  • Java程序在执行期是一组会相互交谈的对象。
  • 变量有两种:主数据类型、引用。
  • 变量必须有类型和名称
  • boolean:(Java虚拟机决定)true或者false
  • char:16bit 0~65535
  • byte:8bit -128~127
  • short:16bit -32768~32767
  • int: 32bit -2147483648~-2147483647
  • long:64bit -很大~很大
  • float:32bit 可以调整
  • double:64bit 可以调整
  • 浮点类型中float后面要加上f,要不然会被虚拟机当成double处理。
  • 变量命名:
    名称必须以字母、下划线、或者$符号开头、不能用数字开头。
    除了第一个字符之外,后面就可以用数字。
    只要符合上述两条规则,就可以避开Java保留的关键字。
  • 事实上没有对象变量这种东西。
  • 只有引用到对象的变量。
  • 对象引用变量保存的是存取对象的方法。
  • 他不是对象的容器,而是类似指向对象的地址。或者可以说是地址。但是在Java中我们不会也不该知道应用变量中的实际装载的是什么,它只是用来代表单一的对象。只有Java虚拟机才会知道如何使用来用来取得该对象。
  • Dog dog = new Dog
    声明一个引用变量,要求Java虚拟机分配空间给引用变量,并将此变量命名为dog。此引用变量被永久固定为Dog类型。
  • Dog dog = new Dog
    创建对象,要求Java虚拟机分配给堆空间给新建的Dog对象。
  • Dog dog = new Dog
    连接对象和引用,将新定义的Dog赋值给dog这个引用能量。
  • 数组也是对象。
  • 一旦数组被声明出来,你就只能装入所声明类型的元素。
  • 主数据类型的变量值是该值的字节所表示的。
  • 局部变量没有默认值!如果在变量被初始前就要使用的话,编译器会显示错误
  • ==比较的是两个数据是否引用的同一个对象,比较的是地址值。
  • equals()判断的是两个数据内容是否一致。
  • 建议写代码前先编写伪码,方便后期维护及其他语言来实现。
  • 建议先测试在编写真正可用的程序。
  • 编写一个Java程序应该先从高层开始设计,通常创建新的类时,要写出伪码,测试码,真实码。
  • 伪码应该描述要做什么而不是具体怎么做。
  • java.lang是个经常会用到的基础包,所以不用引用。
  • public类型的成员变量会被继承。
  • private类型的成员变量不会被继承。
  • 重写规约:
    参数必须要一样,且返回类型必须要兼容。
    不能降低方法的存取权限。
  • 重载:
    返回类型可以不同。
    不能只改变返回类型
    可以更改存取权限
    方法名要相同
  • 抽象类除了被继承过之外,是没有用途、没有值、没有目的。
  • 抽象方法必须被实现。
  • 如果你声明出一个抽象方法,就必须将类也标记为抽象的。你不能在非抽象类中拥有抽象方法。
  • 从ArrayList取出的Object都会被当做是 Object这个类的实例。编译器无法将此对象识别成Object以外的事务。
  • 编译器是根据引用类型来判断有哪些方法可以调用的,而不是根据Object确定的类型。
  • 所有接口的方法都是抽象的,所以任何实现接口的类,必须要实现这些方法。
  • 接口的方法一定是抽象的,所以必须以分号结束。接口的方法没有内容。
  • 类可以实现多个接口。
  • 对象的生存空间是堆。
  • 方法调用及变量的生存空间是栈。
  • 当Java虚拟机启动时,它会从底层的操作系统取得一块内存,并以此区段来执行Java程序。
  • 局部变量又称栈变量,局部变量和方法参数都是被声明在方法中。它们是暂时的,且生命周期只限于方法被放在栈上的这段期间,也就是方法调用至执行完毕为止。
  • 实例变量是声明在类中方法外的。它代表每个独立对象的字段,每个实例都能有不同的值,实例变量存在于所属的对象中。
  • 当你调用一个方法时,改该方法会放在调用栈的栈顶。实际上被堆上栈的是堆栈快,它带有方法的状态,包括执行到哪一行程序以及所有的局部变量的值。
  • 栈顶上的方法是目前正在执行的方法,方法会一直待在载栈顶到执行结束,假设方法A调用方法B,那么B会跑去栈顶,一直到执行结束。
  • 引用类型变量和基本数据类型变量都放在栈上。
  • 非基本数据类型的变量只是保存对象那个的引用而已,而不是对象本身,不论对象是否声明或创建,如果局部变量是个对该对象的引用,只有变量本身会放在栈上。
  • 实例变量存在于对象所属的堆空间上。
  • 对象中带有对象的引用变量时,如果有声明变量,但是没有赋值,只会留下变量的的空间,如果引用变量被赋值,才会在堆内存上占有空间。
  • Dog myDog = new Dog():其中new Dog()其实是在调用Dog对象的构造函数,构造函数看起来很像方法,但是他不是方法,这段程序代码会在你初始一个对象的时候执行。唯一能在构造函数之外能够调用够赞函数的方式就是新建一个类。
  • 就算你没有写构造函数,编译器也会帮你写一个。构造函数一定要与类名相同。
  • 构造函数有一个关键的特征,它会在对象能够被赋值给引用之前就执行。
  • 使用构造函数可以初始化对象的状态。
  • 如果你已经写了一个有参数的构造函数,并且你需要一个 没有参数的构造函数,这个时候需要手动写一个,编译器不会自动生成。
  • 如果类上有一个以上的构造函数,则参数一定要不一样。
  • 如果实例变量是个对对象的引用,则引用与对象都是在堆上。
  • 实例变量有默认值,原始的默认值是0/0.0/false。
  • 在创建新的对象时,所有继承下来的构造函数都会执行。
  • 新建一个子类,会执行子类与父类的构造函数,先执行父类的,再执行子类的。
  • 如果你没有在子类中编写构造函数,那么编译器会给我们加上构造函数,并在函数里调用super(),如果子类中编写了构造函数,但是没有在构造函数里编写super(),那么编译器会在我们的构造函数里加上super()。
  • 每个构造函数可以选择调用super()或者this(),但不能同时调用。
  • 使用this()从某个构造函数调用同一个类的另外一个 构造函数。
  • this()只能用在构造函数中,且必须是第一行语句。
  • 局部变量只会存活在声明变量的方法中。
  • 实例变量的寿命与对象相同。如果对象还活着,则实例变量也会是活着的。
  • 当最后一个引用消失时,对象就变成可回收的。
  • 局部变量也叫临时变量、栈变量或者变量作用域。
  • 实例变量被定义为null时,会被回收。
  • 在Math这个类中的所有方法都不需要实例变量值。因为这些方法都是静态的,所以你无需Math的实例。你会用到的只有他的类本身。
  • 静态的方法不能调用非静态的变量。
  • 静态方法是不知道堆上有哪鞋实例的。
  • 静态变量的值对于所有的实例来说都相同。
  • 静态变量是共享的,同一个类所有的实例共享一个静态变量。
  • 静态变量会在该类的任何静态方法执行之前就初始化。
  • 静态的final变量是常数。
  • 常数变量的名称应该都要是大写字母。
  • final修饰的变量代表你不能更改它的值,final修饰方法代表你不能覆盖掉该方法,final修饰的类表示你不能继承这个类。
  • 在Java中的常量是把变量同时标记为static和final的。
  • Math.random():返回一个位于0.0~1.0之间的双精度浮点数。
  • Math.abs():返回双精度浮点数类型参数的绝对值。这个方法有覆盖版本,因此传入整数会返回整型,传入双精度浮点数会返回双精度浮点数。
  • Math.round():根据参数是浮点型或者双精度浮点数返回四舍五入之后的整形或者长整形。
  • Math.min():返回两个参数中较小的一个。
  • Math.max():返回两个参数中较大的一个。
  • Java1.5之后有了自动装箱,不必再苦恼装箱。
  • 包装也有静态的实用方法。
  • 格式化语法:
    %,d:这表示以十进制整数带有逗号的方式来表示。
    %.2f:这表示以小数点后面两位的方式来格式化此浮点数。
    %,.2f:代表整数部分以逗号的形式表示,小数部分以两位来格式化。
  • Calender对象的关键概念:
    字段会保存状体–Calender对象使用许多字段来表示某些事物的最终状态,也就是日期和时间。比如说你可以读取和设定它的year或者month字段。
    日期和时间可以运算–Calender的方法能够让你对不同的字段做加减法的运算,比如说对month字段加一个月或对year减去三年。
    日期与时间可以用millisecond来表示–Calender可以让你将日期转换成微秒的表示法,或将微秒转换成日期。因此可以执行精确的相对时间计算。
  • 方法可在运行期间遇到问题时抛出异常。
  • 异常是Exception类型的对象。
  • 编译器不会注意RuntimeException类型的异常。RuntimeException不需要声明或被包在try/catch的快中,但是咱们还是可以这么做。
  • 编译器所关心的是称为检查异常的异常。程序必须要认识有异常可能的存在。
  • 方法可以用throw关键词抛出异常对象:
    throw new FileIsTooSmallException();
  • 可能会抛出异常的方法必须声明为throws Exception。
  • 如果程序调用了有声明会抛出异常的方法,就得要告诉编译器已经注意到这件事。
  • 如果要处理异常状况,就把调用包在try/catch快中,并将异常处理/恢复程序放在catch快中。
  • 如果不打算处理异常,还是可以正式地将异常给ducking来通过编译。
  • 在try/catch中,如果运行try中的内容成功会跳过catch运行下面的内容。
  • 在try/catch中,如果运行try中的内容碰到异常,会停止运行try中下面的内容,运行catch中的内容然后再运行catch下面的内容。
  • finally:无论如何都要执行的部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值