A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 咖喱仔 初级黑马   /  2019-5-30 15:47  /  373 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

若要在一个构造方法中调用另一个构造方法,不能直接写,要用this语句,如 this(name) 调用
另外this语句必须写在最前面!!
this语句不能出现在一般方法中!一般方法也不能直接调用构造方法!
详见截图


静态属性存放在 方法区,也叫共享区、数据区(data segmen),另外类中的方法也存放在这里
成员变量(也叫实例变量)/ 静态成员变量(也叫类变量)
主函数可以有多个(可以理解为一个普通函数,只是虚拟机认识这东西),但一般就写一个!
默认的构造方法权限与类权限一致。


写工具类的时候,一般都是定义的静态方法,直接类名调用,根本不用创建工具类对象。
为了防止别人创建工具类对象占用空间,可以将工具类的构造方法私有化!


冒泡其实效率比较低,因为频繁在堆内存中交换两个数,比较耗时。优化方法之一是先不换,先临时
保存在栈内存中,最后再来换。


day06 05 javadoc帮助文档(API)的制作


*************
代码块执行顺序:静态代码块(给类初始化的,类一加载即执行)--> 构造代码块(给所有对象初始化的)
--> 构造方法(给特定对象初始化的)
另外注意 Person p = null; 是不会加载类的


直接写普通方法其实是省略了this.xxx(),静态方法中直接调用静态方法也是省略了类名.xxx()
注意静态东西和this无关,因为this是和当前对象有关的,而静态东西是先于对象加载的。


*******
单例设计模式:饿汉式/懒汉式 ,开发中一般用饿汉式,线程安全简单(面试重点)


方法重写:返回值类型必须是原类型子类,权限修饰符不能比父类更封闭,抛出的异常不能更宽泛
方法重载:只和参数有关,和返回值无关。如果仅仅是返回值不同会编译报错(搞不清究竟调哪一个)
注意:
如果父类中有一个private的方法,子类有一个public的同名方法,这不叫重写!!
因为父类那个私有的方法不对子类暴露,即子类不知道父类有那个方法,没法覆盖,编译能通过。


this本类对象,super父类对象,用法基本一样。
子类的所有的构造方法第一行默认都有一条隐式语句 super() !!!
但是如果第一行是this语句了,则没有隐式super(因为他们都得放第一行!不能共存!),此时,this
语句调用的那个构造函数的第一行也有隐式super(),所以不管怎么子类构造方法一定会调用父类构造方法。


注意:
只要子类不覆盖父类的成员变量,那么子类父类的这个成员共用一块内存空间!!即:
情况一:
父类有个 int a,子类直接继承的父类,这时如果new出一个子类把a改了,那么父类的a跟着变!!
情况二:
父类有个 int a,子类继承父类时也写个成员 int a,同样子类把a改了,父类的a不变!!


抽象类中也可以不定义抽象方法,这样做仅仅是不让该类建立对象。Java中其实有这样的类,但不多。
当一个方法目前不能明确做什么时,可以定义为abstract


注意:
接口中不能有构造方法,但是抽象类中可以有!
接口与接口之间也有继承关系,而且支持多继承!!!
但是,继承的两个接口中不能有仅返回值不同的方法。详见视频day07-13


一般类不能用private或static修饰,但是内部类可以(只有定义再成员位置上时)


匿名内部类是一种局部内部类(在一个方法里面定义的内部类),在java中语句必须写在方法里,匿名
内部类其实就是一条特殊的语句。
******特别注意*****
new B() 只是一个匿名对象,和内部类没关系
new B(){} 是个匿名内部类
上面两条语句都必须放在某个方法中


关于静态方法能否被继承?被重写?详见截图。我觉得很难说清,到底什么才算是继承可能也说不清。
子类能够用父类就是继承的话那么静态也能继承,但从多态角度来说并没有实现动态绑定。


***********
不能放在一起的修饰符:final和abstract,private和abstract,static和abstract,因为abstract修饰的方法是必须在其子类中
实现(覆盖),才能以多态方式调用,以上修饰符在修饰方法时期子类都覆盖不了这个方法,final是不可以覆盖,private是不能
够继承到子类,所以也就不能覆盖,static是可以覆盖的,但是在调用时会调用编译时类型的方法,因为调用的是父类的方法,
而父类的方法又是抽象的方法,又不能够调用,所以上的修饰符不能放在一起。


RuntimeException加深理解:就算函数中throw了,也可以不再函数上声明;声明了也可以不用处理。
因为当这类异常发生时,虚拟机不希望程序继续运行下去(如果try catch了就可以继续运行),而要对
代码进行修正。详见截图。


记住一点:catch是用于处理异常。没有catch就代表异常没有被处理过,如果该异常是检测时异常,则必须声明


直接if判断就行,为什么要用异常?
首先,它能防止输出不该输出的东西,最重要的是,它将正常流程代码和问题处理代码相分离,


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马