Java基础部分重要笔记,Java基础重要笔记
分享于 点击 15882 次 点评:121
Java基础部分重要笔记,Java基础重要笔记
Java修饰符的访问权限public(共有的) | protected(保护的) | default(默认的 | private(私有的) | |
当前类 | ✔ | ✔ | ✔ | ✔ |
子类(当前包 | ✔ | ✔ | ✔ | ✖ |
当前包 | ✔ | ✔ | ✔ | ✖ |
子类(其他包 | ✔ | ✔ | ✖ | ✖ |
其他包 | ✔ | ✖ | ✖ | ✖ |
- @Override(重写=覆盖)——>子类重写父类方法体,但方法名和参数相同
- @Overload(重载=重构)——>写一个新的方法,方法名相同,参数不同
- 修饰的类为最终类,不能被继承。
- 可以修饰方法,修饰的方法不能被覆盖 。
- 可以修饰属性,修饰的属性不能在任何地方被修改,这个属性被创建时就要有值。
- 修饰类,该类为抽象类 抽象类不能被实例化
- 修饰方法要去掉方法作用域,并在方法结尾加“;”
- 抽象方法只能出现在抽象类中,非抽象类不能有抽象方法
- 只有抽象类和方法,没有抽象属性
- 子类除非实现父类的所有抽象方法,否则子类必须是抽象类(接口同样)
- 看似创建抽象类的对象,实质上是创建了抽象类的子类,覆盖子类方法并实现
- 由于创建的子类没有名字,因此称为匿名类
- animal是创建的对象 Animal是抽象父类 匿名类是创建的子类
- People p1=new People();———>People p1=new People();
- Dog dog=new Dog(); —————>p1.pet=new Dog();
- p1.pet=dog; ————————>没有声明对象名,因此为匿名对象,只能调用这一次
- 接口:接口不能添加属性、方法
- 可以添加抽象方法,方法的public abstract可以不用写
- 接口可以让两个毫无相关的类实现相同的方法
- 实现接口的类必须实现接口全部抽象方法,否则该类必定是抽象类
- 接口是用来被实现的,不能创建对象
- Serializable 是系统提供的一个接口,没有定义任何方法
- (飞机和鸟这两种类的飞行方法,无直接父类,用接口)
- Have——a
- 相同 使用一个大的类型表示一系列小的类型都表示一种规范,模版存在
- 继承只能继承一个父类,接口可以实现多个接口,以“,”隔开。继承可以继承方法和属性 接口只有抽象方法,没有属性 接口只能定义静态常量 public static final
- 修饰方法可以不实例化直接调用
- 修饰属性也可以直接调用
Java中的数组
- 数据类型 对象名[]={值1,值2,值3,......}
- 数组使用:对象名[索引值](索引值从0开始)
- 数组在范围之外=数组越界
- int 数组长度变量=数组对象名.length (定义数组长度)
- 数据类型 对象名[]=new 数据类型[数组长度] (创建一个指定长度的数据,值都为0)
- 除了8个基本数据类型,其他初始化数组都为空
- 调用数组中的每一个元素叫做遍历
- 数组声明: 数据类型[] 数组名称; 推荐使用,更规范
- 数组赋值(初始化):静态初始化:创建数组的时候直接为数组中元素赋值
- Java 中关于容器提供了两个接口 :Collection,Map 都可以用来存储多个元素
-
继承Collection接口的常用接口:list、set
-
Collection、list、set都是接口
-
List 中的元素可以重复
-
List 的实现类很多,常用ArrayList
- ArrayList长度可变,可以添加不同类型的元素
- size(); 可以获取容器长度,元素个数 对象名.size();
- add(放入值); 可以放入容器 对象名.add(放入值,可以不同数据类型);
- get(想要取出元素的索引值); 取出容器中元素 对象名.get(索引值);
- get();方法取出来的为Object类型
- remove(索引值/元素值); 删除容器中的元素 对象名.remove(索引值/元素值); 删除时注意!传给remove()方法的元素值应该是整体元素值。例如:一个students集合,想要删除不止要传给remove()方法 students的某一个属性,要传整个student才能删除
- removeAll(集合对象名); 删除一组元素,传一个Collection对象,删除的元素为调用该方法的集合中,与传进去的集合相同的元素
- clear(); 清空集合
- indexOf(元素值); 根据元素值获取该元素在集合中的索引值 对象名.indexOf(元素值); 如果返回索引为-1,则说明集合中无该元素
- contains(元素值); 返回值为boolean 类型 判断集合中是否包含该元素
-
List 的实现类很多,常用ArrayList
-
Set 中元素不可重复
-
Set 的实现类也很多,常用HashSet
- HashSet使用方法和ArrayList几乎一样 区别在于添加元素不能重复
- Set是无序的,没有索引的概念,通过遍历和添加顺序无关,ArrayList有索引概念
- 不能指定获取Set中的某一个元素 必须通过遍历判断去获取指定元素 所以没有get();方法
- 实际开发中并不会使用ArrayList存多种类型 通常作为可变长度数组使用只会存储一种数据类型
-
Set 的实现类也很多,常用HashSet
-
List 中的元素可以重复
-
Collection、list、set都是接口
-
Map跟Collection不同在于
- Map为两个容器,一个存key,一个存value
- 同时key和value存在一一对应的关系
-
key—>Set 不允许有重复元素
- HashMap<String, String> map=new HashMap<String, String>();
- HashMap<数据类型, 数据类型> 对象名=new HashMap<数据类型, 数据类型>();
- Set<String> keysSet=map.keySet(); 获取Map中的key 容器是Set
- value—>List 允许有重复元素
- Collection<String> value=map.values(); 获取Map中的Value 容器是Collection
- map.put(key,value); 存储,包含key:不可重复。value:存储的内容,可重复
- map.get(key); 只能根据key获得value值,不能反过来,Map中无索引概念
- map.remove(key); 根据key删除容器中的 Key和Value
-
遍历: 分别遍历key或value或者直接遍历key、value :
- Set<Map.Entry<String, String>> entry=map.entrySet();
- Set<Map.Entry<数据类型, 数据类型>> 对象名=map.entrySet();
- e.getKey(); 获取Key的值 e.getValue; 获取Value值
- Map是没有顺序的,遍历的顺序和添加的顺序无关,不一定一致
- Hashtable : HashMap和Hashtable的区别在于,table中value不能为空(null)
- map中的value可以为空(null)
- 其他使用方式完全一致
- for(数据类型 实例化对象名:数组名){便利数组中的每一个元素}
-
数据类型一定要和数组或集合类型保持一致 只能用来遍历数组和集合
- 实例化对象名:在每一次循环中就表示索引对应的元素
- T:type 最常用
- E:Element
- K:Key
- V:Value
-
栈(Stack):占用空间较小,读取速度较快
- 栈上内存由计算机自动分配和释放
-
堆(heap):占用空间较大,读取速度相对较慢
- 堆上内容由程序员手动分配和释放
- 常量区:不会变化的数据
- 静态变量:static修饰的变量与方法
- 代码区:.class文件内容,代码结构方法
- 类的元数据区:存放生成类的元素对象
- 基本数据类型都放在栈上,占用空间小
- 引用类型所占空间比基本数据类型大很多,所以引用类型的值放在堆上,并在栈上保留一个堆的地址引用
- 基本数据类型值在栈上,相互独立
- 引用类型值在堆上,栈上只是堆的地址引用,对堆上的值进行修改,所有栈上引用都受影响
-
变量名/指针:因为变量经常使用,所以内存分配在栈上。
- 变量为基本数据类型 : 值在栈上
- 变量为引用数据类型 : 值在堆上
- 当一个引用类型中有另一个引用类型属性时,该引用类型堆上存储的是 另一个引用类型属性的堆上的地址
- ArrayList 添加元素是存数元素堆上的地址
- Java中认为-128~127之间的数字为常用的,把这些数字对象定义为常量对象,当使用 -128~127之间的数字对象时,引用指向常量区的同一个数字
- 如果使用new创建新对象,即便在常量范围内也要新建对象
- Boolean中的两个值也定义为常量
- String不使用new直接初始化,则值存放在常量区(首先去常量区查看是否有改值的常量,有则直接指向该常量,无则创建后指向该值)
- 对于多次使用的字符串,使用常量(指向常量空间)节省空间
- 对于使用一次的字符串,使用变量(new一个新空间)使用完即释放内存
- arrayList.add(10);——>arrayList.add((new Integer)10)
- Integer a=100+200;
- 两个栈上基本类型相加得到一个堆上引用类型
-
FileInputStream 对象名=new FileInputStream("文件路径");
- 文件读入,将文件中的数据读入电脑
-
FileOutputStream 对象名=new FileOutputStream("文件路径");
- 文件写出,将电脑中的数据写出到文件
-
FileReader 对象名=new FileReader("文件路径");
- 文件读入,将文件中的数据读入电脑,char类型读入(汉字不会出现乱码)
-
FileWriter 对象名=new FileWriter("文件路径");
- 文件写出,将电脑中的数据写出到文件 直接String类型输入
-
当用Writer输入时;
- 对象名.newLine();可以换行(只有writer可以有换行)
- ObjectOutputStream
- ObjectInputStream
-
writeObject(object对象名);
- object写入,每次写入一个对象
- readObject();文件object类型读取,返回值为object,每次读取一个对象
-
对象io写入时必须进行对象序列化:序列化过程就是把对象中的数据转换成二进制的过程,让电脑可识别
-
Serializable : 可序列化接口
- implements Serializable,实现该接口就可以自动实现序列化
-
Serializable : 可序列化接口
IO中常用到的一些方法
-
字符串.startsWith(String)
- 当调用这个方法的意思是字符串以什么开头,返回值是boolean
-
字符串.endsWith
- 当调用这个方法的意思是字符串以什么结尾,返回值同样是boolean
-
字符串.split("分割位置标记")
- 当调用这个方法是,将字符串以“分割位置标记”为基准分割,当标记为“|”时,会将字符串每一个单独拆分出来
-
字符串.getBytes()
- 将字符串转换为byte类型
-
字符串.toCharArray();
- 将字符串转换为char类型
-
字符串.toLowerCase();
- 将字符串转换为小写
-
字符串.toUpperCase();
- 将字符串转换为大写
-
read()方法是一个需要传入一个数组并且返回值为int类型的方法
- 当FileInputStream.read(byte数组)
- 当FileReader.read(char数组)
- 返回值为读入的内容长度,当该值为-1时没有值被读入 该方法是读取文件的操作)
-
readLine();
- 直接读取一行的信息,返回值即为该行字符串
-
String string=new String(value, offset, count)
- value为转换为String类型的值,一般为byte或char数组
- offset为需要转换数组起始索引值,一般为0
- count为需要转换的长度
- 通过在枚举中定义选项,对部分内容做规范。
- 定义类中属性时,如果属性的值是一个可选的范围,则使用枚举。
- 可选范围较大时,使用枚举
- 会增加复杂度,则不适用
-
枚举不能被继承
- 每一个枚举都本质上是一个最终类继承自系统的enum,因此不能被继承
- 例如 : public final class Week extends enum(伪代码,无法实现)
- 枚举中可以定义属性和方法,可以正常调用 可以写构造方法,但是必须用private修饰
- 枚举类型相当于每一个都是枚举的一个对象
- 默认调用无参构造方法,如果重载则会导致报错,必须将对象调用的无参构造改为有参
- 枚举可以实现接口
-
.File类
-
file.createNewFile()
- 新建一个文件
- boolear类型返回值,是否操作成功
-
file.file.delete()
- 删除一个文件
- boolear类型返回值,是否操作成功
-
file.renameTo(file2)
- 把file变成file2
- 该方法是重命名,把file2放进去重命名并修改路径
- boolear类型返回值,是否操作成功
-
file.list()
- 返回路径下所有文件及文件夹名字
- 返回值为String数组
-
file.listFiles()
- 返回路径下所有文件
- 返回值为File数组
-
file3.getName()
- 返回文件的名称
- 返回值为String类型
-
file.getPath()
- 返回文件相对路径
- 返回值为String
-
file.getAbsolutePath()
- 返回文件绝对路径
- 返回值为String
-
file3.isDirectory()
- 判断是否为文件夹
- 返回值为boolear
-
file3.isFile()
- 判断是否为文件
- 返回值为boolear
-
file.createNewFile()
-
Date类(时间类)
-
Date date = new Date();
- 无参构造
- 返回现在计算机时间
-
Date date = new Date(long参数);
- long参数构造
- 返回19700101_080000加上long值的毫秒值
-
System.currentTimeMillis()
- 获取从19700101_080000到现在的毫秒数
-
Date date = new Date();
-
SimpleDateFormat类 : 时间转换类
-
SimpleDateFormat format = new SimpleDateFormat()
- 时间转换器
-
format.format(date)格式化时间方法
- 返回值为String
- 返回默认格式时间
-
SimpleDateFormat format = new SimpleDateFormat(时间格式)
- 时间格式:yyyy 年份 MM 月份 dd 日期 hh 小时 mm 分钟 ss秒
-
format.parse(string)将字符串换为Data类型
- 返回值为Data
- 字符串必须和Data格式相同
-
SimpleDateFormat format = new SimpleDateFormat()
-
Calendar类 : 日历类
-
Calendar calendar=Calendar.getInstance()
- 创建日历对象
-
calendar.get(int参数)
- int静态常量,标识方法返回的属性
- 也可以调用其他静态常量返回其他属性
- 该方法返回值的月份是从0开始的,星期从周日开始为1,依次到周六为7
- System.out.println(calendar.get(Calendar.YEAR)); 打印年
- System.out.println(calendar.get(Calendar.MONTH)+1); 打印月
-
System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); 打印几号
-
Date也可以
- System.out.println(calendar.get(Calendar.DAY_OF_WEEK)); 打印周几(周日为第一天)
-
Date也可以
-
calendar.set(field, value);
- 设置日历,field 选择设置内容(静态常量选择)value设置值
- calendar.add(field, amount);
- 设置日历 field 选择设置内容 amount 在当前日期基础上向前或者后推的值
-
calendar.getActualMaximum(Calendar.DAY_OF_MONTH)
- 返回一个月的最大天数
- 返回值为int
-
Calendar calendar=Calendar.getInstance()
-
Integer类
-
Integer.parseInt(string)
- 将string转化为integer类型
-
Integer.parseInt(string, radix);
- String类型
- radix为进制
- 将该进制转换为10进制
-
Integer.max(4, 5)
- 求最大值
-
Integer.min(4, 6)
- 求最小值
-
Integer.sum(1, 4)
- 求和
-
Integer.toBinaryString(int);
- 将int转换为2进制
-
Integer.toHexString(int);
- 将int转换为16进制
-
Integer.parseInt(string)
-
Math类
-
Math.random();
- 生成0<=i<1的随机数
-
Math.floor(double);
- 将double向下取整
- 返回值为double
-
Math.ceil(double);
- 将double向上取整
- 返回值为double
-
Math.random();
-
StringBuffer类:拼接字符串类
-
article.append(content)
- 将content拼接到article中
-
article.append(content)
相关文章
- 暂无相关文章
用户点评