Java学习回忆录-基础理论-014
java的包机制
概述:包其实就是文件夹。
作用:就是对类进行分类管理。
划分分类:按安装功能划分,按照模块划分
建议规范:包名以公司的域名反写,以. 分割
注意:package 语句必须是有效代码的第一行。
java的导包
如果在一个包中,要使用到其他包中的类.
- 使用这个类全限定名称.
包名.类名.
这样写,太长,太繁琐. 可以使用导包语句. - 导包.
import 包名.类名;
有了导包语句之后,在程序中,就不用 包名.类名的访问。
java 的权限修饰符
本类 | 同一个包中不同类 | 不同包中子类 | 不同包普通类 | |
---|---|---|---|---|
public | ok | ok | ok | ok |
protected | ok | ok | ok | |
default | ok | ok | ||
private | ok |
注意: public 最好理解,权限最大,如果一个类中的成员被public 修饰,意味没有限制,都可以访问到.
private 也好理解,权限最小,只能在本类内部访问.
default:
包权限.
一旦类的成员没有加访问修饰符,就是默认的.
这样的成员,不能跨包(只能在一个包中访问)
protected
和default 如果是同一个包中,没有区别.
如果跨包:
protected 多了一种选择, 可以给子类访问.
default : 不可以的.
api文档的使用
-
打开jdk官方文档。
显示->索引->出现搜索框.
可以在搜索框中,输入需要使用的,类名.
例如: 输入Random 类. -
查看类的说明
-
看类所属的包.
- 如果该类位于java.lang 包中.
使用该类,不用导包. - 如果不是java.lang 包中
使用该类,需要导包.
- 如果该类位于java.lang 包中.
-
看看类的关系
父类, 子类, 实现的接口. -
再看看类的描述
是否是抽象类. 是否是final 类.
如果抽象类->放弃. 这类不能创建对象.
如果是final 类 -> 该类不能被子类继承… -
阅读类的说明
通常是看不懂的… -
查看类的构造方法
有没有无参数构造. -
查看类的成员方法
重点是这些
-
Object 类
- 该类是所有类的父类.
显示的:自定义类,没有继承其他类,他的父类就是Object
隐式的:自定义类,继承了其他类,此时该类是简介继承的Object类 - 该类的方法
toString ->返回一个字符串.
建议子类需要重写,返回更有意义的,更易于阅读的字符串.
通常自定义类使用工具生成.
equals ->该方法返回布尔值.
用于比较两个对象是否想
Object 类底层 比较的是对象的地址是是否相等. 建议子类都要重写该方法.建立子类自己的比较方式(通常会比较内容是否一致)
通常也会使用工具生成。
String类
-
String类特点
String 类代表字符串。 字符串底层是就是一个字符数组.
-
String类创建对象的方式:
查看api文档,阅读了关于String类的描述,该类提供了众多的构造方法. 能够通过这些构造方法,创建字符串对象: 方式一: 通过构造方法 String(String original) 初始化一个新创建的 String 对象 String(char[] value) 分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。 String(char[] value, int offset, int count) 分配一个新的 String,它包含取自字符数组参数一个子数组的字符。 最好的理解方式,测试(写代码) 由于字符串在程序中出现的频率很高,(经常使用) 方式二: 直接赋值法 String s="abc";
-
创建字符串对象两种方式有区分么?
创建的字符串对象. 会在堆内存中开辟空间. 直接赋值法: 创建的字符串对象,直接在字符串常量池. 字符串常量池:(思想) 提升性能,节约内存... 消耗内存... 硬件
StringBuilder类
字符串缓冲区,是一个可变的容器.
String 类缺陷:
1. 如果要大批量的操作字符串.
例如: 要拼接字符串时.
一旦有拼接产生, 由于字符串对象是不可变, 字符串在拼接时,产生一个新的字符串对象,丢弃掉就的字符串对象...
这样,如果有大批量操作字符串, 性能就很低了,导致字符串常量池,出现了大量的不再使用的字符串对象(垃圾)
2. java 为了解决该缺陷.
设计了字符串缓冲区. 这个缓冲区是一个容器,并且是可变的...
StringBuilder类和String 类的区别:
String 类:
对象是不可变.
例如: 进行字符串拼接是.
String s1="abc";
s1+="hello";
由于字符串对象不可变.在常量池中 "abc" "hello" 完成拼接: 最终产生新的字符串对象: "abchello"
性能不高:字符串较多时,性能低.
StringBuilder 类
对象是可变的.
例如:创建了StringBuilder 类对象,就叫做创建了字符串缓冲区.
缓冲区只有一个, 但是可以不停的操作缓冲区,往这缓冲区增加新的字符串. 而缓冲区只有一个...
优于缓冲区只有一个,性能高于字符串..