- 接收键盘的输入:1.创建一个键盘扫描器对象 java.util.Scanner s=new Scanner(System.in); 2.接收用户输入s.nextInt();
- 静态变量在类加载的时候就分配内存了,实例变量在对象创建时才会分配内存,静态代码块和静态变量都是在类加载的时候执行,所以要按顺序执行
- 静态代码块在类加载的时候执行且只执行一次,实例代码块在每执行一个构造方法执行之前就执行一次,静态变量在类加载时赋初值,实例变量在创建对象时赋初值 继承:(作用:可以实现方法的重复使用,但最重要的是有了继承才会有方法的覆盖和多态机制)
- 私有方法不能继承
- 构造方法不能继承
- java只支持单继承
- 当源码当中一个方法以";"结尾,并且修饰符列表中有“native”关键字,表示底层调用了C++写的dll程序(dll动态链接库文件)
- 直接输出一个引用,会调用引用的toString方法
- 方法重载和方法覆盖
- 方法重载(Overload):在同一个类中功能相似的方法
- 1.在同一个类中
- 2.方法名相同
- 3.参数列表不同(个数、类型、顺序)
- 4.其它可以随意
方法覆盖(Override/Overwrite):父类的需求已经不足以满足子类的业务需求,子类需要重写父类的方法
- 1.两个类必须有继承关系
- 2.重写之后的方法和之前的方法具有:相同的返回值类型(对于基本数据类型,必须相同,对于引用数据类型,重写之后可以变小,由Animal变成Cat)、相同的方法名、相同的形式参数列表
- 3.访问权限只能更高(public、protected、缺省、private)
- 4.抛出异常只能更少
- 方法覆盖注意事项:
- 私有方法只能间接访问,所以不能覆盖
- 构造方法只能通过super()访问,不能覆盖
- 静态方法不存在方法的覆盖(因为没有意义),所以只针对实例方法
public class Test16 { public static void main(String args[]){ Animals animal=new Animals(); animal.doSome(); } } cla ss Animals { public static void doSome() { System.out.println("Animal的doSome方法执行"); } } class Cats extends Animals { public static void doSome() { System.out.println("Cat的doSome方法执行"); } }
Animal的doSome方法执行
- 私有变量也可以被继承,这是不能直接进行访问,必须通过get、set方法进行访问,私有方法也必须是通过公共方法来访问
- 方法重载(Overload):在同一个类中功能相似的方法
- 在使用toString方法的时候,一般都是要重写toString方法的,因为Object类的toString方法输出的是对象的内存地址,public String toString(){}
- 多态:无论是向上转型还是向下转型,两种类型之间必须要有继承关系,这是首要条件。(向上转型和向下转型是专业的词,自动类型转换和强制类型转化虽然也可以这样说,但是不专业,这一般是说数据类型的)
- Animal a=new Dog();编译时检测到a属于Animal类型所以叫静态绑定,运行时创建Dog对象所以叫动态绑定,所以叫做多态,向上转型,只要编译过了,运行一定不会出错,但是向下转型可能会出错,应该使用instanceof运算符进行判断
- instanceof运算符可以在运行阶段动态判断引用指向的对象类型(引用 instanceof 类型 ),运算结果只能是true或false
- 软件开发的七条原则有一条是:开闭原则OCP(对扩展开放,对修改关闭)
- 多态在开发种的作用:
降低程序的耦合度,提高程序的扩展力
public void feed(Dog dog) { dog.eat(); } public void feed(Cat cat) { cat.eat(); } public void feed(Pet pet) { pet.eat(); }
-
- this和super区别:
- this
- this出现在实例方法和构造方法中
- this的语法是“this.”、"this()"
- this不能使用在静态方法中
- this.大部分情况下可以省略
- this.什么时候不能省略呢,在区分局部变量和实例变量的时候
- this()只能出现在构造方法第一行,通过当前的构造方法调用"本类"中的其他构造方法,目的是”代码复用“
- this可以单独使用,会自动调用引用的toString方法
- super:
- super出现在实例方法和构造方法中
- super的语法是“super.”、"super()"
- super不能使用在静态方法中
- super.大部分情况下可以省略
- super.什么时候不能省略呢,父中有,子中又有,如果想访问“父特征”,super.不能省略
public class Test18 { public static void main(String args[]) { Vip vip = new Vip("张三"); vip.shopping(); } } class Customer { String name; public Customer() { super(); } public Customer(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } class Vip extends Customer { String name; public Vip() { super(); } public Vip(String name) { super(); this.name = name; } public void shopping() { System.out.println(this.name + "正在购物"); System.out.println(super.name + "正在购物"); System.out.println(name + "正在购物"); } }
张三正在购物
null正在购物
张三正在购物 - super()只能出现在构造方法第一行,通过当前的构造方法调用"父类"中的其他构造方法,目的是:创建子类对象时候,先初始化父类型特征
- 重要结论:
- 当一个构造方法第一行,既没有this()又没有super()的话,默认会有一个super(),表示通过当前子类的构造方法调用父类的无参构造方法,所以必须保证父类的无参构造方法是存在的
- this()和super()不能共存,他们都是只能出现在构造方法第一行
- 在java语言中不管new什么对象,最后老祖宗的Object类的无参构造方法一定会执行,并且Object类的无参构造方法一定是最先执行的
- super不是引用,super也不保存内存地址,super也不指向任何对象
- 其实子类可以继承父类的所有东西,包括构造方法和私有变量以及私有方法,只是访问构造方法要通过super()关键字访问,访问私有变量和私有方法要间接的通过公开的方法进行访问
- 静态方法访问的时候最好使用类名.的方式进行访问,因为和对象无关
public class Test16 { public static void main(String args[]){ Animals animal=new Animals(); animal.doSome(); } } class Animals { public static void doSome() { System.out.println("Animal的doSome方法执行"); } } class Cats extends Animals { public static void doSome() { System.out.println("Cat的doSome方法执行"); } }
Animal的doSome方法执行
- 私有的只能在本类中访问,就算用super关键字访问父类的的私有方法和变量都不行,只能通过公开的方法进行间接访问
- System.exit(0);终止程序的执行,退出JVM
- idea和eclipse的区别
- eclipse的workspace相当于idea的project,eclipse的project相当于idea的module,eclipse的main方法输入main,idea的main方法输入psvm,eclipse的输出语句输入syso,idea的输出语句输入sout
- idea是自动保存的,不需要ctrl+s
- eclipse是ctrl+d删除一行,idea是ctrl+y删除一行
- 两者的目录都是左箭头关闭,右箭头展开