java基础学习记录

2020/9/12

静态,非静态变量(类变量),局部变量初始化时机与过程

首先,这三种变量都需要被初始化才能使用,其中除了局部变量以外,区域两种就算没有显示初始化也会被默认置为0(初始化之前就发生),而局部变量在初始化不会有置为0的这个动作,但是编译器会检查,如果局部变量没有初始化就会报编译时错误
对于静态变量和类变量,在其初始化之前都会发生一次默认的赋初始值的操作,然后才是执行初始化等等。
静态变量:只会被初始化一次,在类第一次被加载到内存的时候,还是先被赋默认值再执行初始化
类变量:类变量时在新建一个对象的时候才会得到初始化,但是顺序时如下的:先进行默认的赋值操作,然后如果类变量定义处有初始化操作那么就执行这个操作,然后才是轮到执行构造器。

关于静态代码块和静态变量

首先只再加载时执行一次时毋庸置疑的,而在加载时,是先找到金泰变量为他们分配空间并完成默认赋值,这个是在类加载的准备阶段完成,然后会按照顺序执行静态代码块和静态变量的赋值操作,这个阶段是初始化阶段,

特别注意在静态代码块中使用的变量如果是在静态变量声明之前的话就只能赋值而不能访问。

2020/9/13

访问权限控制

访问权限有类的访问权限和域的访问权限
类的访问权限:类的访问权限只有两种,那就是public,和包访问权限,他们是什么意思呢,比如包访问权限控制的类表示不能在包外创建他的实例对象,而public修饰的可以在任何地方创建对象,但是即使是包访问权限的,也不会阻碍在包外使用其public的static方法,因为并没有创建对象。
域的权限控制:一共有四种,控制的是能不能访问其方法或者成员变量。还有我认为就是能不能被继承。

2020/9/14

继承

  • 只能单继承
  • 导出类能获得基类的所有字段和方法
  • 分为显示继承和隐式继承

重写

不是所有的方法都能被重写

  • 构造函数不能重写
  • 静态函数不能重写
  • finly不能被重写,私有方法不能重写(个人觉得没有访问权限的不能重写更合适)
  • 字段也是不能被重写的,子类定义一个相同的化不是重写,那是一个子类的新字段。而且字段也是没有多态这个说法的,编译时期就确定了。
  • 能不能重写关键看于能不能发生多态或者是前期绑定,静态,final. private在编译时期就能确定方法,所以是肯定不能被重写的。反正关系密切。

多态和向上转型

注意不要把多态和向上转型搞混了。多态是动态绑定,以前常常把向上转型也归类为多态了
注意只有普通的方法访问时多态的,而域的访问不是多态的,在编译期间就进行了绑定。静态方法也没有多态。
**当子类有个和基类一样的字段时,访问的默认是子类的字段。**可以说是被认为是多态的假象,不要被迷惑了p157.

特别强调方法的继承

主要是显示继承和隐式继承的区别
-显示继承:子类可以直接使用
-隐式继承:子类无法使用,只能通过从基类继承到的其他方法进行一个对他的访问,(这里当然说起来就有点矛盾了)。。。。

构造器的调用顺序

当new一个对象的时候

  • 调用基类构造器
  • 按照声明顺序调用成员的初始化方法
  • 调用导出类构造器的主题

2020/9/16

接口

接口的域:默认是static final public的,一般不会用接口实现域
final关键字修饰的域在声明的时候必须被初始化。

内部类

分类:首先我认为内部类可以分成两类:静态内部类和非静态内部类
首先我认为再内部类的歇息中对于this指针的注意是非常重要的,因为一个内部类的创建不许与外部类有联系,我的理解是,必须在有this指针的外部类方法里(非静态方法)才能被创建,
1 :声明的时候,除了在外部类的所有方法中可以直接用类名声明外,其他类中都要用外部类.内部类类名进行声明(这里与编程思想上不一样,书上说除了外部类的非静态方法外都要这样声明,书上的更合理,因为静态方法毕竟没有this指针,但是上述那样做也行得通)
2:创建一个内部类对象是必须要和外部类对象有关联的,否则无法创建,我的理解就就是需要this指针,这也方便判断,因为创建一个内部类对象时需要通过这个this指针和一个外部类对象进行某种联系,总结就是在外部类的非静态方法里面才能创建,静态方法里面不能,在其他地方想要用这个内部类的对象就只能通过其外部类提供的接口进行获取。
3:内部类的相关特性: 内部类对象与其外部类关系密切,内部类能够访问其外部类的所有成员。在拥有外部类对象之前是不可能创建内部类对象的,除非是嵌套类(静态内部类)
4:在内部类中想要获取外部类的引用: 外部类的名字后面加圆点紧跟着一个this。
5:.new语法有一些时候我们在一些方法中想要创建一个类的内部类对象,但是该方法有没有其外部类对象的this指针,那么这个.new语法可以帮助我们
例如:M m=m.new n() n是m的内部类
还比如在外部类的非静态方法中也可以用,这种情况比如是比想要创建的内部类对象关联到方法的this指针对应的对象,而是其他外部类对象.

2020/9/17

内部类

分类

  1. 普通内部类
  2. 静态内部类
  3. 局部内部类
  4. 匿名内部类

知识点
5. 内部类可以访问外围类的所有成员,除了静态内部类只能访问外围类的静态成员。
6. 继承一个内部类 一个普通类继承一个内部类必须要在普通子类的构造器传传一个其内部类父类的外围类的引用用于调用其父类的构造器
7. 内部类的覆盖 首先是无法被覆盖的,要想其内部类的方法也有覆盖的特性就只能明确继承。

持有对象(集合初见)

Java容器类类库的用途是“保存对象”,并将其划分为两个不同的概念。

  • collection:list按照插入顺序保存元素 set不能持有重复的元素 queue按顺序产生对象
  • map 键值对形式
    1:添加一组对象
Arrays.LIst()可以接受数组,可变参数列表然后转换成list,但是底层还是数组
Collections.addAll()接受柯柏年参数,数组,集合对象然后添加到第一个集合里面
cokkection对象.addAll(),只能接受集合对象然后添加到方法调用者里面。

List

- ArrayList:长于随机访问,插入和移除元素较慢
- LinkList:插入和移除元素较快,水及访问慢些

迭代器

  • 使用方法iterator()返回一个iterator,并且准备好返回序列的第一个元素
  • next()方法用于获取序列的下一个方法
  • hasNext()方法检查序列中是否还有元素
  • remove()将迭代器新返回的元素删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值