java学习笔记,细小知识点

在学习java过程中记录下了一些平时容易忽略的知识点,想分享给需要的童鞋。在记录的时候是按照自己的语言风格来做的,有什么不懂的希望和大家一起交流,有错误还请指出,会持续更新……



  1. java既是编译型语言又是解释型语言,java程序执行先编译后解释两步
  1. 类是java程序的最小程序单位
  1. public static void main(String[] args)
  1. 一个java源文件里最多一个public类
  1. java程序的内存分配和回收都是JRE在后台自动进行的,Garbage Collection,垃圾回收的缺点是增大了开销,要追踪程序中无用的对象并释放
  1. byte 1字节、short 2字节、int 4字节、long 8字节、char 2字节、float 4字节、double 8字节、boolean、1字节8位
  1. 二进制以0b、0B开头,八进制以0开头,十六进制以0x、0X开头
  1. 负数在计算机中以补码存放,补码减一得到反码,符号位不变其他位取反得到原码
  1. java语言默认的浮点类型是double类型
  1. 三个特殊的浮点数值:正无穷大、负无穷大、非数:POSITIVE_INFINITY、NEGATIVE_INFINITY、NaN
  1. 正、负无穷大和正、负无穷大相等,NaN不和任何数值相等,也不和NaN相等
  1. 浮点型数值运算会出现以上特殊值,浮点型数值可以做除0.0运算,整数型不能除0
  1. switch语句判断变量与case后的值相等以后执行对应的语句,如果没有break,继续执行后面语句,不在进行与case比较的判断,所以break不能省略
  1. Java中break语句可以直接跳出外层循环,需要使用标签,例如外层循环外有 outer: 标识符,并且使用break outer; 语句跳出
  1. continue再循环当中出现则忽略本次循环剩下的语句,继续开始下一次循环
  1. int是基本类型,而int[]是引用类型,定义数组时不能指定数组长度
  1. int num2=(int) (Math.random()*(900000)+100000);//取一个100000-999999的数字,999999-100000+1
  1. foreach循环不能改变数组元素的值,当用foreach迭代访问数组时,foreach的循环变量相当于一个临时变量,只是保存了数组元素的值而已【eg:  for(int book:books) 】
  1. 实际的数组对象存储在堆中,如果数组引用变量是局部变量,那么它被存在栈中
  1. 所有在方法中定义的局部变量都是存放在栈内存中的
  1. 一个对象被创建的时候是存放在运行时数据区中,就是堆内存中
  1. 定义并初始化一个数组后,在内存中分配了两个空间,一个用于存放数组的引用变量(在栈中),一个用于存储数组本身(在堆中)
  1. static修饰的方法可以直接由类名调用,比如Arrays类中定义了一些static修饰的方法
  1. 类中static修饰的成员不能访问没有static修饰的成员(成员方法或者成员变量);有static修饰的成员属于类本身,没有static修饰的属于该类的实例
  1. 构造器用于构造一个类的实例,是一个类创建对象的根本途径,java使用new来调用构造器
  1. 程序员不写构造器,则系统默认构造器,如果程序员写了则系统不再提供
  1. 成员变量和属性不同,类有age属性,则说明有关于age的set和get方法
  1. 把一个对象的所有引用变量赋值为null,则该对象变为垃圾对象
  1. this,谁调用这个方法,this就指代谁
  1. java可以定义参数个数可变的方法,比如:public void test(int a,String ... books)多个参数被当成books数组传入,但是这种个数可变的形参只能位于参数列表的最后,一个方法只能包含一个这样个数可变的参数
  2. 成员变量可以不用显示的初始化,在创建对象时会默认初始化,但是局部变量(除了形参以外)都需要显示的初始化,否则不能够访问
  3. import和import static的功能非常像,import可以导入某一个类而省略写这个包名,import static可以导入一个类的成员变量或方法而省略写出这个类名
  4. java中一个类只能有一个直接父类,可以有很多个间接父类
  5. super关键字用语在子类中访问父类中被覆盖的方法或者成员变量
  6. 在一个构造器中调用该类的其他构造器使用this来实现,在子类中调用父类的构造器使用super来实现
  7. 调用子类构造器初始化子类对象的时候,父类构造器总会在子类构造器执行之前执行,以此上溯,所以所有的对象创建的时候最先执行的都是java.lang.Object类
  8. 子类继承父类发生多态时,子类覆盖了父类的方法则执行子类的方法,如果没有覆盖则执行父类的方法,父类中没有的方法子类中有也不能执行;注意只执行父类的成员变量。
  9. instanceof是java提供的运算符,用于判断一个对象是否是一个类或者该类的子类,if(obj instanceof String)返回true 或者 false
  10. java创建对象时,有初始化块先执行初始化块中的语句,再执行构造器;初始化块与声明实例变量指定默认值都是初始化代码,执行顺序与程序的顺序一样
  11. 类初始化阶段会执行静态初始化块,从父类到子类,对象初始化阶段先执行最顶层父类的初始化块和构造器,然后向下到子类的普通初始化块和构造器
  12. 当程序第一次创建一个对象时(比如Leaf类),系统中还没有Leaf类,要加载这个类并初始化Leaf类,执行静态初始化块,第二次创建这个对象时,因为虚拟机已经加载了该类,所以不用再初始化
  13. JVM第一次使用类的时候,在类的准备阶段,为所有静态成员变量分配内存;在类的初始化阶段,初始化这些静态成员变量,为他们赋初值
  14. 基本数据类型int与包装类Integer,char与Character……
  15. 所有对象都有toString()方法,直接打印一个对戏那个p和打印p.toString()是一样的,它返回的是这个对象的实现类的“类名+@+hashcode”
  16. 当java程序直接使用“hello”,“你好”这样的字符串直接量时,JVM会直接使用常量池来管理这些字符串,这样的字符串在编译时就能够确定下来,所以直接使用常量池中的就可以;当使用new关键字创建新的字符串对象时,这个字符串会被保存在运行时数据去中就是堆内存中
  17. Object提供的equals()方法比较的是引用,String重写了equals()方法,比较的是字符串序列
  18. 写一个单例类Singleton——1、定义一个稀有静态缓存对象;2、隐藏构造器;3、使用getInstance()方法获得Singleton对象;4、判断缓存中是否有Singleton对象,没有创建,有就返回
  19. final修饰类、变量、方法,用final修饰则不可改变;final修饰的成员变量必须由程序员显示指定初始值;final修饰的局部变量如果在定义时没有指定初始值,则可以在后面赋值一次,不能重复赋值;在final修饰形参时,由调用者传入的参数来完成初始化,此外不能够再次赋值;final修饰引用类型的变量时,只能保证该变量的引用不变(可以理解为地址不变),但是不能保证其指向的对象的内容不变;
  20. final修饰的方法不可重写;但是在父类中定义的private方法,在子类中本就不可见,所以子类可以重新定义方法名、形参、返回类型的方法,这不是重写;所以final修饰的private方法在自类中依旧可以写一样方法名、形参、返回类型的方法
  21. final修饰的方法不能被重写,但是可以被重载(参数列表不同)
  22. final修饰的类不能有子类
  23. final修饰的变量赋值时直接变成直接量(单纯的基本数据、算术表达式,在编译时就确定下来,没有访问普通变量,没有使用方法)时,final变量变成宏变量,程序在运行时直接找到该变量;final String a=“变量”+“1”;final String b=“变量1”;final String c=“变量”+String.valueOf(1);其中a==b;但是b!=c;“变量1”存在常量池中「p178」
  24. final修饰的实例变量只有在定义该变量时指定初值才有宏变量的效果
  25. 缓存实例「p184」
  26. Integer只能缓存-128~127之间的数
  27. static和abstract不能同时修饰方法,因为类不能调用一个没有方法体的抽象方法;但是可以同时修饰内部类
  28. 接口中使用default修饰默认方法,默认方法不能使用static修饰,所以不能用接口直接调用默认方法,应该用接口的实现类的实例来访问默认方法
  29. 接口中使用static来修饰类方法,不能使用default来修饰,接口可以直接调用类方法
  30. 接口里的成员都是public、static、final的
  31. 类实现接口的时候应该重写接口中全部的抽象类,否则实现类还是抽象类,因为继承了接口中的抽象方法
  32. 实现类的方法都是public,实现类中的方法访问权限必须大于等于接口中的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值