Java学习笔记——基础篇
Tips1:eclipse中会经常用到System.out.println方法,可以先输入syso,然后eclipse就会自动联想出这个语句了!!
学习笔记:
*包、权限控制
1、包(package)概念的引入是为了防止类名冲突。package语句要作为java源文件的第一条语句。
2、两个类在同一个包中,可以相互调用;两个类在不同的包中,若想引用则必须通过import语句导入,格式为:import 包名.子包名.类名。
3、如果在程序中同时导入了两个包的同类名,则在使用时必须明确的写出完整的“包.类名”,如:access.a.Demo demo1=new access.a.Demo()
4、private类型的属性和方法,只能在本类中使用;protected类型的属性和方法,只能在本包中使用;public类型的属性和方法在任何地方均可使用。
*继承
1、继承修饰符与访问限制关系表
如,protected修饰的成员可以被子类、同一个包或者类内部访问。
2、父类private类型的属性和方法不能被子类继承,父类的构造方法也不能被子类继承。
3、子类对象实例化时,先调用父类的构造方法,再调用子类本身的构造方法。若父类的构造方法带参数,那么子类在构造方法中要显示地调用super方法(写在首行)。
4、Java中只允许单继承,即一个类只能继承一个父类。
5、方法重写(Override):子类中定义了父类中同名的方法。重写的方法必须和被重写的方法具有相同的方法名、参数列表和返回类型。
6、子类重写的方法不能拥有比父类方法更加严格的访问控制权限。静态方法(static修饰)不能被重写,被private修饰的方法不能被重写,如果子类重写编译器并不会报错,但是如果发生向上转型仍然调用父类方法。
7、初始化顺序:父类静态成员>子类静态成员>父类中的成员(按声明顺序)>父类的构造方法>子类中的成员(按声明顺序)>子类的构造方法。
*多态性
1、方法重载(Overloading):在同一个类中定了多个同名的方法,但是方法的参数个数、参数类型和返回值类型可能不同,调用时通过传参的类型和个数来决定具体使用哪个方法。
2、重载方法的方法名要相同,参数类型或参数个数不同,返回值类型可以相同也可以不相同,无法以返回型别作为重载函数的区分标准。
3、向上转型upcasting:将子类对象赋值给父类对象,向上转型损失了子类新扩展的属性和方法,只剩下父类中声明过的属性和方法;如果对象发生了向上转型关系后,那么调用的方法一定是被子类覆盖掉过的方法。
4、向下转型downward cast:将父类对象赋值给子类对象。向下转型的前提条件是:必须是曾经做过向上转型的对象才能再向下转型。进行向下转型时必须要明确地指出要转型的子类类型:子类 子类对象=(子类)父类对象。
5、instanceof操作符:判断一个对象到底是哪个类的实例。用法:对象 instanceof 类,结果返回boolean类型。子类对象既是子类的一个实例又是父类的一个实例。
*Object类和equals方法
1、Java所有的类都有一个公共的父类Object,Object类中包含下面几个主要方法:
public String toString() //对象输出时调用,默认输出:类名@hashcode,可以重载此方法
public boolean equals(Object obj) //对象比较
public int hashCode() //获取对象的hash码
2、equals方法默认比较的是对象在内存中存放的地址,但如果是自定义的类,可根据需要重写equals方法;
==方法对于基本的数据类型,它比较的是值;而对于复合数据类型,它比较的是对象的地址。
3、特别指出的是,利用equals比较八大包装类对象(Byte, Boolean, Short, Charecter, Integer, Long, Float, Double)和String类(因为该类已重写了equals和hashcode方法)对象时,默认比较的是值,在比较其它自定义对象时都是比较的引用地址。
*Final关键字
1、final修饰的变量为常量,值不能被修改;final修饰的方法不能被子类重写;final修饰的类不能有子类,即不能被继承(但是该类中的属性和方法仍可以改变)。
2、常量在声明时就需要为其赋值,如果未赋值就必须在每个构造方法中为其赋值。
3、final修饰对象时,只是说明该对象的引用是常量,即不能再指向别的对象,但是该对象中的属性值仍然可以被修改。
4、final static修饰的变量为全局常量,全局常量的所有单词都应该大写。
*Random包
1、需要导入:java.util.Random包
2、Random()有两种构造方法:
Random():创建一个新的随机数生成器。
Random(long seed):使用单个 long 种子创建一个新的随机数生成器。
3、你在创建一个Random对象的时候可以给定任意一个合法的种子数,种子数只是随机算法的起源数字,和生成的随机数的区间没有任何关系。但是种子相同的两个Random对象生成的随机数序列(不指定生成数范围)是一样的。
4、在没带参数构造函数生成的Random对象的种子缺省是当前系统时间的毫秒数。
5、int nextInt():返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
int nextInt(int n):返回一个伪随机数,它是取自此随机数生成器序列的、在[0,n)之间均匀分布的int值。
*容器
1、HashMap的put方法返回值,如果放入的值存在则返回对应的值,否则返回null