集合:在集合里的存储,永远存的是一个引用地址
Set集合:set无法记住添加的顺序,不允许包含重复的元素
set判断判断两个对象是否相等用equals,而不是用==
也就是说两个对象equals比较返回true,Set集合是不会接受两个对象的
方法重载:名字相同的方法可以在同一个类中出现,这叫方法的重载,以方法的返回值无关,
有关的是参数个数,参数类型,参数顺序,这个和方法签名有关,例如:
void show(int a ,double b,boolean c);的方法签名是void show(java.lang.Integer,java.lang.Double,java.lang.Boolean)
引用传递/值传递 两者是同一个概念
方法中的参数传递:把一个方法中定义的参数传递到另一个方法中,传递的该方法参数的复制品;
在另外一个方法中对其参数做任何操作,都不会影响该方法中参数的值
如果传递的是数组的话,则数组中得值会改变;
可变参数:Java中可以出现可变参数这种情况,它其实就是数组的一种变形,形式如下:
static int getSum(int ...arr);
但是,一旦方法的参数中有可变参数的话,那么可变参数就必须是该方法的最后一个参数,形势如下:
static int getSum(String name,int ...arr);
编译时类型和运行时类型:简单的说Person p = new Person();等号左边的是编译时类型,右边的是运行时类型
Java的数据类型转换:
//String s = 1+"";表示基本数据类型和String值相连接,组成一个新的String值,他们之间没有转换关系
也就是说基本数据类型和包装数据类型是不一样的 比如:int 和Integer是不一样的
Object里面的equals方法: equals默认比较的是 堆栈地址,和==一样,都是比较的地址
静态代码块:就是在构造代码块之前,加上一个static关键字:
使用static修饰的构造代码块:
优先于住方法执行,优先于构造代码块执行,不关创建多少对象,静态代码块只执行一次,可用于个静态变量赋初值
单例模式:三部曲
1.在类中维护一个私有的,静态的对象
2.构造函数私有化
3.维护一个公共方法共外界访问,去获得私有的对象
Java中修饰符没有先后关系:final修饰的变量不能赋初值,最多只能复制一次,一旦有值之后,就不能再修改了,final修饰的常量的单词全部要大写
final面试题:当final修饰一个引用类型的变量的时候,
到底是引用不能变(引用地址不能不变),还是引用对象的值不能变呢?
答:是引用的地址不能变
Java中的一个容易误解的地方:Java中的类只允许单继承,多实现,但是接口可以实现多继承
Java中接口的方法的访问权限默认是public,那么我的实现类在覆写方法的时候,就只能使用public
接口是类的规范,而类是接口的实现
一个类既有父类又有接口的时候:先继承,在实现
枚举:枚举也是类的一种,但是一个特殊的类,他的父类是Enum,但是不能显示的制定
枚举的构造方法默认是无参私有的
枚举得对象必须放在第一行,枚举对象之间使用逗号隔开,对象和方法之间必须用分号隔开
Java中的模式:
模版模式:就是定义一个接口,将一些方法定义在里面,然后让其他类去实现这个接口,就必须实现接口里边的方法(规范)
适配器模式:这个模式其实就是模版模式的一个变形,他是先用一个类去实现一个接口去写一个这个接口的简单实现类,然后其他类想要实现该接口的时候,
可以继承他的简单实现类,去复写自己想要实现的方法,而不必要实现接口中的所有方法
方法覆写原则: 一同两小一大
一同:方法签名相同
两小:
1:子类方法的返回值类型小于等于父类方法返回值得的类型(这里说的是子类和父类的关系)
2:子类方法中声明抛出的异常类型是父类方法生命抛出异常类型的子类或相同类
也就是说:子类方法不能抛出新的异常类型子类方法可以同时声明抛出多个父类方法声明抛出异常类的子类:(RuntimeException例外)
一大:子类方法的访问权限大于等于父类方法的访问权限
finally语句只有在一种情况下不会执行,就是在虚拟机停止的时候catch块里卖弄有这个语句System.exit(0);
而且一般不会在finally里面写retrun和throw语句,因为它总是执行,而且try catch块中的return都会失效
关于String类:String s ="";其实""是一个匿名对象,他也可以调用String类的方法
进程和线程:
进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以有多个线程。比如在windows系统中,一个运行的xx.exe就是一个进程
Java程序的进程里有几个线程:至少有两个,主方法的主线程,垃圾回收线程(后台线程)
线程是指进程中的一个执行任务(控制单元),一个进程中可以运行多个线程,多线程可共享数据
多进程:操作系统中同时运行的多个程序
多线程:在同一个进程中同时运行的多个程序
一个进程中至少有一个线程,为了提高效率,可以在一个进程中开启多个控制单元
并发运行。如多线程下载软件
多线程是为了同步完成多项任务,不是为了提供运行效率,通过提高资源使用效率来提高系统的效率
当覆写Object的equals方法时,通常有必要覆写hashCode方法,以维护hashCode方法的常规协定,该协定生命相等的对象必须具有相等的哈希码
如果一个类没有覆写Object类的equals方法的话,那么他就和==等价,比较的是对象在内存中的地址
Set集合:set无法记住添加的顺序,不允许包含重复的元素
set判断判断两个对象是否相等用equals,而不是用==
也就是说两个对象equals比较返回true,Set集合是不会接受两个对象的
方法重载:名字相同的方法可以在同一个类中出现,这叫方法的重载,以方法的返回值无关,
有关的是参数个数,参数类型,参数顺序,这个和方法签名有关,例如:
void show(int a ,double b,boolean c);的方法签名是void show(java.lang.Integer,java.lang.Double,java.lang.Boolean)
引用传递/值传递 两者是同一个概念
方法中的参数传递:把一个方法中定义的参数传递到另一个方法中,传递的该方法参数的复制品;
在另外一个方法中对其参数做任何操作,都不会影响该方法中参数的值
如果传递的是数组的话,则数组中得值会改变;
可变参数:Java中可以出现可变参数这种情况,它其实就是数组的一种变形,形式如下:
static int getSum(int ...arr);
但是,一旦方法的参数中有可变参数的话,那么可变参数就必须是该方法的最后一个参数,形势如下:
static int getSum(String name,int ...arr);
编译时类型和运行时类型:简单的说Person p = new Person();等号左边的是编译时类型,右边的是运行时类型
Java的数据类型转换:
//String s = 1+"";表示基本数据类型和String值相连接,组成一个新的String值,他们之间没有转换关系
也就是说基本数据类型和包装数据类型是不一样的 比如:int 和Integer是不一样的
Object里面的equals方法: equals默认比较的是 堆栈地址,和==一样,都是比较的地址
静态代码块:就是在构造代码块之前,加上一个static关键字:
使用static修饰的构造代码块:
优先于住方法执行,优先于构造代码块执行,不关创建多少对象,静态代码块只执行一次,可用于个静态变量赋初值
单例模式:三部曲
1.在类中维护一个私有的,静态的对象
2.构造函数私有化
3.维护一个公共方法共外界访问,去获得私有的对象
Java中修饰符没有先后关系:final修饰的变量不能赋初值,最多只能复制一次,一旦有值之后,就不能再修改了,final修饰的常量的单词全部要大写
final面试题:当final修饰一个引用类型的变量的时候,
到底是引用不能变(引用地址不能不变),还是引用对象的值不能变呢?
答:是引用的地址不能变
Java中的一个容易误解的地方:Java中的类只允许单继承,多实现,但是接口可以实现多继承
Java中接口的方法的访问权限默认是public,那么我的实现类在覆写方法的时候,就只能使用public
接口是类的规范,而类是接口的实现
一个类既有父类又有接口的时候:先继承,在实现
枚举:枚举也是类的一种,但是一个特殊的类,他的父类是Enum,但是不能显示的制定
枚举的构造方法默认是无参私有的
枚举得对象必须放在第一行,枚举对象之间使用逗号隔开,对象和方法之间必须用分号隔开
Java中的模式:
模版模式:就是定义一个接口,将一些方法定义在里面,然后让其他类去实现这个接口,就必须实现接口里边的方法(规范)
适配器模式:这个模式其实就是模版模式的一个变形,他是先用一个类去实现一个接口去写一个这个接口的简单实现类,然后其他类想要实现该接口的时候,
可以继承他的简单实现类,去复写自己想要实现的方法,而不必要实现接口中的所有方法
方法覆写原则: 一同两小一大
一同:方法签名相同
两小:
1:子类方法的返回值类型小于等于父类方法返回值得的类型(这里说的是子类和父类的关系)
2:子类方法中声明抛出的异常类型是父类方法生命抛出异常类型的子类或相同类
也就是说:子类方法不能抛出新的异常类型子类方法可以同时声明抛出多个父类方法声明抛出异常类的子类:(RuntimeException例外)
一大:子类方法的访问权限大于等于父类方法的访问权限
finally语句只有在一种情况下不会执行,就是在虚拟机停止的时候catch块里卖弄有这个语句System.exit(0);
而且一般不会在finally里面写retrun和throw语句,因为它总是执行,而且try catch块中的return都会失效
关于String类:String s ="";其实""是一个匿名对象,他也可以调用String类的方法
进程和线程:
进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以有多个线程。比如在windows系统中,一个运行的xx.exe就是一个进程
Java程序的进程里有几个线程:至少有两个,主方法的主线程,垃圾回收线程(后台线程)
线程是指进程中的一个执行任务(控制单元),一个进程中可以运行多个线程,多线程可共享数据
多进程:操作系统中同时运行的多个程序
多线程:在同一个进程中同时运行的多个程序
一个进程中至少有一个线程,为了提高效率,可以在一个进程中开启多个控制单元
并发运行。如多线程下载软件
多线程是为了同步完成多项任务,不是为了提供运行效率,通过提高资源使用效率来提高系统的效率
当覆写Object的equals方法时,通常有必要覆写hashCode方法,以维护hashCode方法的常规协定,该协定生命相等的对象必须具有相等的哈希码
如果一个类没有覆写Object类的equals方法的话,那么他就和==等价,比较的是对象在内存中的地址