#Java笔记2
p107
局部变量和成员变量的区别
-
局部变量:在方法内部
成员变量:在方法外部,直接写在类当中
-
局部变量:只有在方法中可以使用,出了方法就不能再用了
成员变量:整个类中都可以通用
-
局部变量:没有默认值,必须手动赋值
成员变量:有默认值
-
局部变量:栈内存
成员变量:堆内存
-
局部变量:方法进栈诞生,方法出栈消失
成员变量:对象创建诞生,对象垃圾回收消失
p108
- 封装性:将细节信息封装起来,对外界不可见
- 方法就是封装
- private也是封装(用了private,只有本类可以访问,超出类了就不能访问)
- 间接访问private变量用getxxx和setxxx。
- 对于boolean类型,setxxx和isxxx
p112
构造方法
- 构造方法的名称必须和类名称一样,大小写也一样
- 构造方法不需要写返回值类型,void也不写
- 构造方法不能用return返回具体的值
- 如果没有写构造方法,编译器会默认一个构造方法,没有参数,方法体什么都不做
- 一旦写了构造方法,编译器就没有默认的构造方法了
P113
标准类
- 所有的成员变量都要用private修饰
- 为每一个成员变量写一个get和set方法
- 编写无参数的构造方法
- 编写全参数的构造方法
自动生成代码
code---->generate
p114
API:应用程序编程接口。JDK提供的现成的类的说明文档。
API文档最应该关注的三点:包路径、构造方法、方法摘要
P115
引用类型使用
-
导包
- import 包路径.类名称
- 如果目标类和当前类在同一个包下面,可以省略导包
- 只有java.lang不需要导包,其他的都要导包
-
创建
- 类名称 对象名=new 类名称()
-
使用
- 对象名.成员方法名()
P118
匿名对象
- 只能使用一次,下次使用只能创建一个新的对象
- 如果只使用一次就可以使用匿名对象
P121
Random的nextInt()随机数为整个int范围,nextInt(n),左闭右开的区间。(比如n=10,范围就是0-9)
P128
- 如果想要对ArrayList使用基本数据类型,必须使用类型对应的包装类(包装类都位于java.lang下面)
- bye Byte
- short Short
- int Integer
- long Long
- float Float
- double Double
- char Character
- boolean Boolean
- 自动装箱拆箱,基本类型和包装类型可以自动转换
P133
字符串特点:
- 字符串内容用于不可变
- 字符串可以共享使用(节省内存)
- 字符串效果是上是char[]的字符数组,底层是byte[]字符数组
P135
程序中直接写双引号的字符串,都是在字符串常量池中的
对于引用类型来说,==比较的是地址
P136
- 任何对象都可以用object接收
- equals具有对称性
- 一个常量一个变量推荐把常量写在前面,例如“abc".equals(str)
P137、P138、P139、P140
- length
- concat
- charAt
- indexOf
- substring
- toCharArray
- replace
- split(方法参数是正则表达式,英文的句号.切割不了,用双斜杠点切割\\ .)
P145
- 使用static修饰成员方法,就成为了静态方法,静态方法不属于对象,属于类
- 如果没有static关键字,必须先创建对象,通过对象才能使用
- 有了static关键字,不需要创建对象,直接用类名称就可以使用
- 成员变量或是成员方法有了static都推荐使用类名称进行调用
- 静态只能访问静态,不能访问非静态(在内存中先有静态内容,再有非静态内容)
- 静态方法不能用this(this代表当前对象)
- 根据类名称放问静态成员变量时和对象没有关系,只和内存有关系
##P147
- 静态代码块当第一次用到本类时,静态代码块执行唯一一次
- 静态内容总是优先于非静态,静态代码块比构造方法先执行
- 典型用途:一次性的对静态成员变量进行赋值
P148
-
toString将数组转化为字符串
-
字符串默认是sort升序排列
-
如果是自定义类型,必须要compareable或者comparator接口支持
P150
- abs(绝对值)
- ceil(向上取整)
- floor(向下取整)
- round(四舍五入)
P152
- 面向对象:封装、继承、多态
- 继承是多态的前提
- 继承解决共性抽取的问题
- 父类(基类、超类)
- 子类(派生类)
- 子类可以拥有父类的内容
- 子类可以拥有自己的专属内容
P154
1.继承关系中如果父子成员变量充满,则创建子类对象访问时有两种方法
- 直接通过子类对象访问成员变量(等号左边是谁就优先用谁,没有就向上找)
- 简洁通过成员方法访问成员变量(该方法属于谁就用谁的,没有就向上找)
P155
局部变量:直接写成员变量名
本类成员变量:this.成员变量名
父类成员变量:super.成员变量名
P156
父子继承访问成员方法的规则:创建的对象是谁,就优先用谁,没有就向上找
成员变量和成员方法都是向上找的
P157、P158
重写override(覆盖、覆写)
- 在继承关系中方法名称一样,参数列表也一样
- 重载overload方法名称一样,参数列表不一样
- Object类是所有类的公共最高父类
- 子类的返回值必须小于等于父类的返回值
- 子类方法的权限必须大于等于父类方法的修饰权限(default不是关键字)
P160
继承关系,父子构造方法:
- 子类构造方法中默认隐含一个super,先执行父类再执行子类
- 子类调用super必须再构造方法的第一句,而且只能用一次super
- 子类必须调用父类的构造方法,不写就用默认的,写了用自己的
P161
super用法
- 在子类的成员方法中访问父类的成员方法
- 在子类成员方法中访问父类成员变量
- 在子类构造方法中访问父类构造方法
P162
super访问父类内容,this访问子类内容。
this作用呢
- 在本类成员方法中访问本类成员变量
- 在本类成员方法中访问本类的另一个成员方法(而不是父类的方法)
- 在本类的构造方法中访问另一个构造方法(this在构造方法中调用也必须是第一个语句。super和this不能同时在构造方法中使用)
P164
Java特点
- 单继承的,只能有一个直接父类
- 可以多级继承
- 一个父类可以有很多子类
P166、P167、P168
抽象方法:加上abstract关键字,去掉大括号,直接分号
抽象类:抽象方法必须在抽象类,在class之前加上abstract
- 不能直接创建抽象类对象
- 必须用子类继承抽象父类
- 子类必须覆盖重写所有抽象方法
- 抽象类中不一定有抽象方法
P171
接口:公共规范标准。符合规范标准就能通用
接口最重要的内容就是其中的抽象方法
接口中可包含的内容:
- java7 常量、抽象方法
- java8 默认方法、静态方法
- java9 私有方法
P172
- 接口中抽象方法,修饰符必须是固定的public abstract
- 两个关键字可以选择性省略
- 接口不能直接使用,必须有一个实现类来实现接口
- 接口的实现必须覆盖重写接口中所有的抽象方法
- 创建实现类对象进行使用
- 如果实现类没有覆盖重写所有的抽象方法,这个实现自己就必须是抽象类
- 不能通过接口实现类的对象来调用接口中的静态方法,通过接口名称直接调用静态方法
P181
- 接口也可以使用成员变量,但必须使用public static final三个关键字进行修饰
- 一旦使用final说明不可改变
- 可以省略public static final关键字但是省略也是这个意义
- 接口中的常量必须赋值
- 接口中常量的名称完全大写,用下划线分隔
P183
- 接口不能有静态代码块
- 接口不能有构造方法
- 一个类父类唯一,一个类可以实现多个接口
- 如果多个接口存在重复的抽象方法,只覆盖重写一次即可
- 如果实现类没有覆盖重写接口中的所有抽象方法,则实现类必须是抽象类
- 如果实现类实现的接口中有重复的默认方法,必须对冲突的默认方法进行覆盖重写
- 一个类继承父类也实现接口了继承优先于接口实现
P184
- 类与类是单继承的
- 类与接口是多实现的,一个类可以实现多个接口
- 接口和接口是多继承的
- 多个父接口的抽象方法可以重复
- 多个父接口中的默认方法如果重复,必须进行覆盖重写,必须带着default关键字
P185
- 面向对象特性:封装、继承、多态
- extends和implements是实现多态的前提
P186
代码中体现多态性:父类引用指向子类对象
父类名称 对象名=new 子类名称();
接口名称 对象名=new 实现类名称();
P187
多态访问成员变量:
- 直接通过对象名称访问成员变量,看等号左边是谁就优先用谁,没有就向上找
- 间接用成员方法访问,看该方法属于谁就用谁,没有就向上找
P188
在多态代码中成员方法访问规则:
看new的是谁就优先用谁,没有就向上找
P190
- 对象向上转型是多态的写法
- 向上转型一定是安全的
P191
对象一旦向上转型就无法调用子类特有方法(用对象的向下转型)
子类名称 对象名=(子类名称)父类对象
将父类对象还原为子类对象,类似于强制转换
P192
如何知道一个父类的引用是一个什么类型的子类
格式:对象 instanceof 类名称
将会得到一个boolean值结果,判断对象能否当做后面类型的实例
P195
final的常用四种方法
- 修饰一个类
- 修饰一个方法
- 修饰一个局部变量
- 修饰一个成员变量
P196-P199
- final 修饰一个类的时候,没有任何的子类
- 一个类是final的,其中的所有成员方法都无法进行覆盖重写
- final修饰成员方法,这个方法就是最终方法,不能被覆盖重写
- 对于方法来说,abstract和final矛盾
- final修饰局部变量,该局部变量不能改变。
- 对于成员变量来说,由于成员变量有默认值,用了final之后必须手动赋值,就没有默认值了
- 对于final的成员变量,要么直接赋值,要么通过成员方法赋值。(用构造方法赋值必须保证所有构造方法都能赋值)
P200
java中的四种权限修饰符
public > protected > default > private
同一个类 Y Y Y Y
同一个包 Y Y Y N
不同包子类 Y Y N N
不同包非子类 Y N N N