Java学习基础2

  1. 默认值,布尔类型是false,字符串null
  2. 属性可以包含基本数据类型,也可以包含引用类型
  3. Java内存结构分析:栈:一般存放基本数据类型(局部变量);堆:存放对象(Cat cat,数组等);方法区:常量池(常量,比如字符串),类加载信息
  4. 创建对象流程简单分析:Person p = new Person();                                                                                                          p.name = "jack";                                                                                                                        p.age = 10;
  5. 具体步骤如下:先加载Personn类信息(属性和方法信息,只会加载一次);在堆中分配空间,进行默认初始化(如int型默认0,字符串默认null);把地址赋给p,p 就指向对象;进行指定初始化,比如p.name = "jack" p.age = 10
  6. 方法定义:访问修饰符 返回数据类型 方法名(形参列表。。。){语句;return 返回值;}
  7. 实参和形参的类型要一致或兼容,个数,顺序必须一致
  8. 方法里面不能再定义方法(方法不能嵌套)
  9. 同一个类中方法可以直接调用,不必新建对象
  10. 方法重载对形参列表的参数名无要求,对方法返回类型无要求,即仅他们不同仍会被当成相同方法,无法构成方法重载
  11. int... 表示接收int型可变参数,使用可变参数时,可以当作数组使用
  12. 可变参数的实参可以为数组,可变参数的本质就是数组
  13. 可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数放在最后
  14. 一个形参列表中最多可出现一个可变参数
  15. 属性和局部变量可以重名,访问时遵循就近原则
  16. 局部变量或、属性可以被本类使用或被其他类使用(通过对象调用)
  17. 属性可以加修饰符(public等)但是局部变量不能加修饰符
  18. 构造器的修饰符可以默认,也可以是public protected等,构造器没有返回值,方法名和类名必须一样,构造器的调用由系统完成。构造器是类的一种特殊方法,它的主要作用是完成对新对象的初始化,而不是创建对象
  19. 一个类可以定义多个不同的构造器,即构造器重载
  20. 如果没有定义一个构造器,系统会自动给类生成一个默认无参构造器(可用javap指令反编译查看)
  21. 一旦定义了自己的构造器,默认的构造器就覆盖了,就不能再使用默认的无参构造器,除非显式定义一下
  22. 可以看作每个对象都隐藏了this指向它自己
  23. 访问构造器语法:this(参数列表); 注意只能在构造器中使用(即只能在构造器中访问另一个构造器)必须放置在第一条语句
  24. this只能在类定义的方法中使用,不能在类定义的外部使用
  25. 包的本质实际上就是创建不同的文件夹来保存类文件。命名规则:只能包含数字,字母,下划线,小圆点,但是不能以数字开头,不能是关键字或保留字。例:demo.12a//错误,12a是数字开头
  26. 包的命名规范:com.公司名.项目名.业务模块名。如:com.sina.crm.user//用户模块
  27. 访问修饰符用于控制方法和属性的访问权限(范围):1)公开级别:public修饰,对外公开。2)受保护级别:用protected修饰,对子类和同一个包中的类公开。3)默认级别:没有修饰符号,向同一个包的类公开。4)私有级别:用private修饰,只有类本身可以访问,不对外公开
  28. 只有默认和public可以修饰类
  29. 成员方法和属性的访问规则一样
  30. 当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类(基类,超类),在父类中定义这些相同的属性和方法,所有子类(派生类)只需通过extends来声明继承父类即可
  31. 子类继承了所有的属性和方法,但私有属性和方法不能在子类中直接访问,要通过父类提供公共方法去访问
  32. 当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会调用父类的无参构造器,若父类没有提供无参构造器,则必须在子类的构造器中用super去指定使用父类的哪个构造器完成对父类的初始化工作。
  33. super在使用时,必须放在构造器的第一行(super只能在构造器中使用)
  34. super()和this()只能放在第一行,因此这两个方法不能共存在一个构造器中,一山不容二虎
  35. 所有类都是Object类的子类,Objec是所有类的基类
  36. 父类构造器的调用不限于直接父类,将一直往上追溯至Object
  37. 子类最多只能继续一个父类(直接继承)即java中是单继承机制
  38. 继承本质:先在方法区加载类(先加载object,然后爷爷类,然后父类,再子类);然后在堆中分配空间(先在爷爷类开始分配属性空间,然后父类,最后子类)形成son对象;然后将堆中对象的地址返回给主方法的对象引用
  39. 按照查找关系返回信息:首先看子类是否有该属性,如果有且可以访问,则返回信息;如果子类没有该属性,则看父类有没有这个属性(有且可访问,则返回);父类没有就一直向上找,直到object...
  40. 万一在父类中找到某属性,但是不能访问(private),程序将报错,即使可能爷爷类中有该属性,程序也是在父类中找到就停止寻找了,不再向上找
  41. 方法重写:子类方法的形参列表,方法名称,要和父类方法的参数,方法名称完全一样,子类方法的返回类型和父类方法的返回类型一样,或者是父类返回类型的子类,比如,父类返回类型为Object,子类方法的返回类型为String可以方法重写
  42. 子类方法访问权限不能缩小父类的访问权限,但可以扩大访问权限,如父类方法public,则子类只能public
  43. 对象的多态:1)一个对象的编译类型和运行类型可以不一致(比如可以用一个父类的引用指向子类的对象)。2)编译类型在定义对象时,就确定了,不能改变,3)运行类型是可以变化的。4)编译类型看定义时=号的左边,运行类型是看=号的右边
  44. 向上转型:父类类型  引用名 = new 子类类型;父类的应用指向了子类的对象。可以调用父类中所有成员(需遵循访问权限),但是不能调用子类的特有的成员,因为在编译阶段,能调用哪些成员,是由编译类型决定的。最终运行效果看子类的具体实现,即调用方法时,按照从子类(运行类型)开始查找方法。
  45. 编译是从Object到父类结束,而运行是从子类本类开始,逐步向上
  46. 向下转型:子类类型  引用名 = (子类类型)父类引用;只能强制转父类的引用,不能强转父类的对象,2)要求父类的引用必须指向的是当前目标类型的对象(如在前面代码中。父类类型指向了某具体目标对象,此时可以强制转换,进行向下转型),只有前面出现向上转型,才能够向下转型。
  47. 属性没有重写之说,调用属性时的值看编译类型
  48. 动态绑定机制:当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定所以调用方法时(即使在父类中调用方法)都是先从运行类型中开始寻找,当调用属性时,没有动态绑定机制,哪里声明,哪里使用
  49. instanceOf比较操作符,用于判断对象的运行类型是否为XX类型,或者XX类型的子类型。
  50. ==既可以判断基本类型(判断值是否相等),也可判断引用类型(判断地址是否相等)
  51. equals方法只能判断引用类型
  52. hashCode提高具有哈希结构的容器的效率,两个引用如果指向的是同一个对象,则哈希值肯定一样;如果指向不同的对象,则哈希值是不一样的。哈希值主要根据地址号来的,但是不能完全将哈希值等价于地址。
  53. toString方法默认返回:全类名+@+哈希值的十六进制。
  54. 子类往往重写toString方法,用于返回对象属性信息,当直接输出一个对象时,toString方法会被默认直接调用,比如System.out.println(Student),直接输入Student对象,会默认调用Student.toString()方法
  55. 当对象被回收时,系统会自动调用该对象的finalize方法。子类可以重写该方法,做一些释放资源的操作。当某个对象没有任何引用时,则 jvm就认为这个对象是一个垃圾对象,就会使用垃圾回收机制来销毁该对象,在销毁该对象前,会先调用finalize方法。垃圾回收机制的调用,是由系统来决定(即有自己的GC算法),也可以通过System.gc()主动触发垃圾回收机制
  56. 在断点调试过程中,是运行状态,是以对象的运行类型来执行的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值