java学习笔记(2)

IDEA 快捷键和相关操作:
1.类的结构视图:alt+7
2.看类的源码:ctrl+左键
3.自动生成构造器、get、set方法、equals等:alt+insert
4. 査看错误:alt+enter
4.快捷输出常见字符串:a)main public static void main(Stringl] args){}
b)sout   System.out.printIn();
c) soutm  System.out.println(“描述:所在类中的,所在方法”);


等于和equal()方法  equal里面放对象比较的时tostring显示的地址
equal常重写
看看别人的例子

super关键字:1.super“可以看做”是直接父类对象的引用。可通过 super 来访问父类中被子类覆盖的方法或属性。
2. 使用 super调用普通方法,语句没有立置限制,可以在子类中随便调用。
3.在一个类中,若是构造方法的第一行殳有调用 super(..)或者 this(..); 那么 Java 默认都会调用 super(),含义是调用父类的无参数的构造方法


构造方法调用顺序:
构造方法第一句总是:super(...)来周用父类对应的构造方法。所以,流程就是:先向上追溯到 Object,然后再依次向下执行类的初始化块和构造方法,直到当前子类为止。
注:静态初始化块调用顺序,与构告方法调用顺序一样,不再重复。

属性/方法查找顺序:(比如:查找变量 h)
查找当前类中有没有属性 h
依次上溯每个父类,查看每个父类中是否有 h,直到 Object如果没找到,则出现编译错误。
上面步骤,只要找到h 变量,则这个过程终止。


封装:理念:高内聚,低耦合

编程中封装的具体优点:
提高代码的安全性。
提高代码的复用性。
改内部代码,提高可维护性。'高内聚”:封装细节,便于修“低耦合”:简化外部调用,便于调用者使用,便于扩展和协作。

封装的实现一使用访问控制符
Java 是使用“访问控制符”来控制哪些细节需要封装,哪些细节需要暴露的。
Java中4种“访问控制符”分别为 private、default、protected、public。
不懂就搜详细区别

【注】关于 protected 的两个细节!
1.若父类和子类在同一个包中,子类可访问父类的 protected 成员,也可访问父类对象的protected 成员。
2.若子类和父类不在同一个包中,子类可访问父类的 protected 成员,不能访问父类对象的 protected 成员。


开发中封装的简单规则:
属性一般使用 private 访问权限。
的 get/set 方法来访问相关属性,这些方法通常是属性私有后,提供相应public 修饰的,以提供对属性的赋值与读取操作(注意:boolean 变量的 get方法是is 开头!)
方法:一些只用于本类的辅助性方法可以用 private 修饰,希望其他类调用的方法用 public 修饰。
p82



多态:同一个方法调用,不同类出来对象的结果不同

对象的转型:1.父类引用指向子类对象,我们称这个过程为向上转型,属于自动类型转换。2.向上转型后的父类引用变量只能调用它编译类型的方法,
不能调用它运行时类型的方法这时,我们就需要进行类型的强制转换,我们称之为向下转型



抽象方法
1.使用 abstract 修饰的方法,没有方法体,只有声明。
2.定义的是一种“规范”,就是告诉子类必须要给抽象方法提供具体的实现,

抽象类
包含抽象方法的类就是抽象类
通过抽象类,我们就可以做到严格限制子类的设计,使子类之间更加通用。

抽象类的使用要点:
1.抽象类有抽象方法的类只能定义成抽象类
2.抽象类不能实例化,即不能用new 来实例化抽象类。
3.抽象类可以包含属性、方法构造方法。但是构造方法不能用来 new 实例只能用来被子类调用。
4.抽象类只能用来被继承。
5.抽象方法必须被子类实现。


接口的作用:
为什么需要接口?接口和抽象类的区别?
可以更加规范的对子类进行约束。全接口就是比“抽象类”还“抽象”的“抽象类”面地专业地实现了:规范和具体实现的分离。

接口是两个模块之间通信的标准,通信的规范。如果能把你要设计的模块之间的接口定义好,就相当于完成了系统的设计大纲,
剩下的就是添砖加瓦的具体实现了。大家在工作以后,做系统时往往就是使用“面向接口”的思想来设计系统。

接口和实现类不是父子关系,是实现规则的关系。比如:我定义一个接口 RunnableCar 实现它就能在地上跑,
Train 实现它也能在地上跑,飞机实现它也能在地上跑。就是说如果它是交通工具,就一定能跑,但是一定要实现 Runnable 接口。

如何定义和使用接口:
声明格式:
[访问修饰符] interface 接口名 [extends 父接口1 , 父接口2...]{
    常量定义;
    方法定义;
}

定义接口的详细说明:interface
访问修饰符:只能是 public 或默认。
接口名:和类名采用相同命名机制。
extends:接口可以多继承,
常量:接口中的属性只能是常量,总是:public static final 修饰。不写也是。
方法:接口中的方法只能是:public abstract。省略的话,也是 public abstract


默认方法!
Java8及以上新版本,允许给接口添加一个非抽象的方法实现,只需要使用 default 关键字即可,
这个特征又叫做默认方法(也称为扩展方法)。
默认方法和抽象方法的区别是抽象方法必须要被实现,默认方法不是。
作为替代方式接口可以提供默认方法的实现,所有这个接口的实现类都可以得到默认方法。

JAVA8 以后,我们也可以在接口中直接定义静态方法的实现。这个静态方法直接从属于接口(接口也是类,一种特殊的类),
可以通过接口名调用。如果子类中定义了相同名字的静态方法,那就是完全不同的方法了,直接从属于子可以通过子类名直接调用。

每个 class 都有一个运行时常量池。
Java 内存分析中,我们会经常听到关于“常量池”的描述,实际上常量池也分了以下三种:
全局字符串常量池、class 文件常量池、运行时常量池(Runtime Constant Pool)。
我们只关注运行时常量池即可。

==在判断是不是同一个对象,equals比较字符是不是相同

String g1 ="北京尚学堂”;
String g2 =“北京尚学堂”;
String g3 = new String(“北京尚学堂”);
System.out.println(g1 == g2);//true
System.out.printin(g1 == g3); // false
System.out.printin(g1.equals(g3));//true
所以比较字符串用equals


string类常用方法:
char charAt(int index)                       返回字符串中第 index 个字符
boolean equals(String other)                  如果字符串与 other 相等,返回 true;否则,返回 false。
boolean equalslgnoreCase(String other) 如果字符串与 other 相等(忽略大小写),则返回 true;否则返回 false。
int indexOf(String str)  返回从头开始查找第一个子字符串 str 在字符串中的索引位置。如果未找到子字符串 str,则返回-1。
lastIndexOf()  返回从未尾开始查找第一个子字符串 str 在字符串中的索引位置。如果未找到子字符串 str,则返回-1。
int length()  返回字符串的长度。
String replace(char oldChar,char newChar)  返回一个新串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。
boolean startsWith(String prefix)  如果字符串以 prefix 开始,则返回 true。
boolean endsWith(String prefix)  如果字符串以 prefix 结尾,则返回 true。
String substring(int beginindex)  返回一个新字符串,该串包含从原始字符串 beginlndex 到串尾
String substring(int beginindexint endlndex)  返回一个新字符串,该串包含从原始字符串 beginndex 到串尾或 endlndex-1 的所有字符。
String toLowerCase() 返回一个新字符串,该串将原始字符串中的所有大写字母改成小写字母。
String toUpperCase()  返回一个新字符串,该串将原始字符串中的所有小写字母改成大写字母。
String trim()  返回一个新字符串,该串删除了原始字符串头部和尾部的格。





内部类:
内部类的两个要点:
内部类提供了更好的封装。只能让外部类直接访问,不允许同一个包中的其他类直接访问。
内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员。但外部类不能访问内部类的内部属性。
注意:
内部类只是一个编译时概念,,一旦我们编译成功,就会成为完全不同的两个类。
对于个名为 Outer的外部类和其内部定义的名为Inner的内部类。
编译完成后会出现 Outer.class和 Outer$lnner.class 两个类的字节码文件。
所以内部类是相对独立的一种存在,其成员变量/方法名可以和外部类的相同。

内部类能访问外部类,外部类不能访问内部类

非静态内部类:
非静态内部类(外部类里使用非静态内部类和平时使用其他类没什么不同)
1.非静态内部类对象必须寄存在一个外部类对象里。因此,如果有一个非静态内部类对象那么一定存在对应的外部类对象。非静态内部类对象单独属于外部类的某个对象。
2.非静态内部类可以直接访问外部类的成员,但是外部类不能直接访问非静态内部类成员。
3.非静态内部类不能有静态方法、静态属性和静态初始化块
4.成员变量访问要点:
    1.内部类属性:this.变量名。1.
    2.外部类属性:外部类名.this.变量名。

内部类的访问:
1.外部类中定义内部类:new Inner()。2.外部类以外的地方使用非静态内部类:
Outernner varname = new Outer().new Inner().


静态内部类:

使用要点:
1.静态内部类可以访问外部类的静态成员,不能访问外部类的普通成员
2.静态内部类看做外部类的一个静态成员,

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值