java_care
2021-04-20 09:26
标签:date err char htable 操作系统 字符 转换 栈内存 修饰符 概念:程序运行期间,固定不变的量。 分类: 字符串常量,使用英文双引号引起来的内容。 在Java 9(2017年9月发布)或更早版本的JDK中,数据类型只有两种。 基本类型,包括8种:byte、short、int、long、float、double、char、boolean。 引用类型(除了基本,都算引用),包括:数组、类、接口、Lambda等。 其中的8种基本数据类型: 取模运算:只有对整数使用取模运算,才有余数的数学意义。 比较运算符:用于比较两个数据的关系,运算结果一定是boolean型数据。 强制转换注意事项 一旦使用了简便格式,必须一个步骤完成初始化,不能拆分成为两个步骤。 静态代码块: 无论是成员变量,还是成员方法。如果有了static,都推荐使用类名称进行调用。 静态不能直接访问非静态。 静态方法当中不能用this。 如何使用成员内部类: 间接方式:在外部类的方法当中,使用内部类,然后main只是调用外部类的方法 直接方式: 如果出现了重名现象,那么在成员内部类中使用外部类变量名的格式是:外部类名称.this.外部类成员变量名 输出结果: 一个类是定义在一个方法内部的 定义格式: 只有当前所属的方法才能使用它,除了这个方法外面就不能用了。 方法内不能直接定义静态成员 如果希望访问所在方法的局部变量,那么这个局部变量必须是【有效final的】。即:(从Java 8 开始,只要局部变量事实不变,那么final关键字可以省略) 静态成员: 非静态成员: 可以通过外部类.内部类.静态成员的方式,访问内部类中的静态成员。 当内部类属性与外部类属性同名时,默认直接调用内部类中的成员。 如果接口的实现类(或者是父类的子类)只需要使用唯一的一次,那么这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】. 匿名内部类: 没有类型名称、实例对象名称。 定义格式: 注意事项: 在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式: 在父子类的继承关系当中,创建子类对象,访问成员方法的规则: new的对象是谁,就优先用谁,如果没有则向上找。 编译看左,运行看右 父类与子类: 无论是成员方法还是成员变量,如果没有都是向上找父类,绝对不会向下找子类的。 在本类的成员方法中,访问本类的成员变量。 在本类的成员方法中,访问本类的另一个成员方法。 在本类的构造方法中,访问本类的另一个构造方法。 final 关键字修饰成员变量时 由于成员变量具有默认值,所以用了final 之后必须手动赋值,不会再给默认值了。 对于final 的成员变量,要么使用直接赋值,要么通过构造方法赋值。二者选其一。 必须保证类当中所有重载的构造方法,都最终会对final的成员变量进行赋值 接口:只能被继承,不能被new实例化 写了一个接口,实现类也已经写好了,但是现在又需要增加接口的方法,可以增加默认方法。 默认方法的定义格式: private的方法只有接口自己才能调用,不能被实现类或别人使用。 普通私有方法 静态私有方法 上转型:其实就是多态写法 父类名称 对象名 = new 子类名称(); (Cat是Animal的一个子类) Animal animal= new Cat (); 域与方法都以父类为准,但是如果方法被重写,以子类为准。 不能访问子类相对于父类新添加的域或方法。 下转型:【还原】 对象 instanceof 类名称 Map集合的特点 Map集合是一个双列集合,一个元素包含两个值(key,value) Map集合中的元素,key和value的数据类型可以相同,也可以不同。 Map集合中的元素,key是不允许重复的,vlaue是可以重复的。 Map集合中的元素,key和value是一一对应的。 Map集合保证key是唯一的:作为key的元素,必须重写hashCode方法和equals方法,以保证key唯一。 foreach可以操作数组:底层依然采用or循环+索引来获取数组元素. foreach可以操作Iterable的实例:底层其实采用的terator(迭代器). 直接使用foreach迭代数组和集合元素即可,简单 年份 y 由整数 y - 1900 表示。 月份由从 0 至 11 的整数表示;0 是一月、1 是二月等等;因此 11 是十二月。 日期(一月中的某天)按通常方式由整数 1 至 31 表示。 小时由从 0 至 23 的整数表示。因此,从午夜到 1 a.m. 的时间是 0 点,从中午到 1 p.m. 的时间是 12 点。 分钟按通常方式由 0 至 59 的整数表示。 秒由 0 至 61 的整数表示;值 60 和 61 只对闰秒发生,尽管那样,也只用在实际正确跟踪闰秒的 Java 实现中。于按当前引入闰秒的方式,两个闰秒在同一分钟内发生是极不可能的,但此规范遵循 ISO C 的日期和时间约定。 星期(DAY_OF_WEEK):周日是1,周一是2,…周六是7 直接使用双引号的字符串默认在字符串池中,而new出来的字符串默认不在字符串池中。 字符串对象一旦被创建,内容不可改变。 static String toString(boolean[] a) static void sort(byte[] a) java_care 标签:date err char htable 操作系统 字符 转换 栈内存 修饰符 原文地址:https://www.cnblogs.com/heathhou/p/13285794.html一、基础知识(大部分与C相同)
1.1 关键字:(大部分与C相同)
比如class,public,static,void均为Java已经预设好的。
1.2 常量
1.3 标识符
1. 类 : 每个单词首字母大写,例如Student、HelloWorld。
2. 变量 : 第一个单词完全小写,后续更多单词首字母大写,例如age、ageOfMyGirlfriend。
3. 方法 : 与变量规则一样,例如show()、getAge()。
4. 包(其实就是文件夹,用于对类进行管理):
全部小写,多级包用点隔开。公司域名的反写。
cn.itcast (相当于两级文件夹:cn\itcast)
com.itheima (相当于两级文件夹:com\itheima)
1.4 数据类型:(与C语言有点不同)
1.5 运算
二、数组
2.1 数组的默认规则
2.2 数组的初始化方式
直接指定数组的长度,也就是数组当中到底可以存放多少个数据。
数据类型[] 数组名称 = new 数据类型[数组长度];
数据类型[] 数组名称; 数组名称 = new 数据类型[数组长度];
静态初始化不会直接指定长度,而是直接指定具体的元素内容。
数据类型[] 数组名称 = new 数据类型[] { 元素1, 元素2, 元素3, ... };
数据类型[] 数组名称; 数组名称 = new 数据类型[] {...};
数据类型[] 数组名称 = { 元素1, 元素2, 元素3, ... };
2.3 数组的注意事项
三、方法(函数)
3.1 静态方法
3.2 方法的覆盖与重载
3.3 方法的注意事项
3.4 字符串方法的使用
字符串对象一旦被创建,内容不可改变。
如果希望替换字符串当中的内容,则可以使用方法:
public String replace(CharSequence oldStr, CharSequence newStr)
其中CharSequence现阶段可以简单地认为就是String字符串。而oldStr代表需要被替换的老 字符串,newStr代表需要替换成为的新字符串。
注意,replace方法会将结果作为一个新的字符串返回。
如果希望将字符串按照指定的标记切分成为若干段儿,可以使用方法:
public String[] split(String regex):参数regex代表切割标记,返回值是字符串切割后成为的字符串数组。
注意,强烈推荐现阶段使用英文逗号作为切割标记,不要使用英文句点,因为英文句点在正则表达式(今后学习)中有特殊含义。四、访问权限
4.1 文字
4.2 表格
访问权限
访问权限的作用范围
private
同一类
默认
类,包
protected
类,子类,包
public
全部
4.3 图片
4.4 四种权限修饰符
private
(default)
protected
public
同一个类(我自己)
YES
YES
YES
YES
同一个包(我邻居)
NO
YES
YES
YES
不同包子类(我儿子)
NO
NO
YES
YES
不同包非子类(陌生人)
NO
NO
NO
YES
五、类,封装
5.1 abstract抽象类
5.2 java内存分配
5.3 重名问题
5.4 静态相关
5.5 注意事项
六、内部类
6.1 成员内部类与局部内部类
6.2 成员内部类
修饰符 class 外部类名称 {
修饰符 class 内部类名称 {
//…
}
//…
}
类名称 对象名 = new 类名称();
外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();
public class Outer {
int num = 10;//外部类的成员变量
public class Inner{
int num = 20;//内部类的成员变量
private void methodInner() {
int num = 30;//内部类方法的局部变量
System.out.println("内部类方法的局部变量:" + num);
System.out.println("内部类的成员变量:" + this.num);
System.out.println("外部类的成员变量:" + Outer.this.num);
}
}
public static void main(String[] args) {
Outer.Inner obj = new Outer().new Inner();
obj.methodInner();
}
}
内部类方法的局部变量:30
内部类的成员变量:20
外部类的成员变量:10
6.3局部内部类(包含匿名内部类)
修饰符 class 外部类名称 {
修饰符 返回类型 外部类方法名称(参数列表){
class 局部内部类名称{
//…
}
}
}
1. new 出来的对象在堆内存当中
2. 局部变量是跟着方法走的,在栈内存当中
3. 方法运行结束之后,立刻出栈,局部变量就会立消失
4. 但是new出来的对象会在堆当中持续存在,直到垃圾回收消失
外部类:public /(default)
成员内部类:public / protected / (default) / private
局部内部类:什么都不能写(和方法内部成员使用规则一样)
匿名内部类:什么都不能写
6.4静态内部类
修饰符 class 外部类名称 {
修饰符 static class 内部类名称 {
//…
}
//…
}
1. 外部类名称.属性
2. 外部类名称.静态方法
1. new 外部类名称().属性
2. new 外部类名称().非静态方法
外部类名称.内部类名称 对象名 = new 外部类名称.内部类名称();
1. 如果需要访问外部类中的静态属性,则可以通过外部类.属性的方式;
2. 如果需要访问外部类中的非静态属性,则可以通过new 外部类().属性的方式;
6.5 匿名类(匿名内部类)
接口名称 对象名 = new 接口名称(){
//覆盖重写所有的抽象方法
};
1. 匿名内部类,在【创建对象】的时候,只能使用唯一一次
2. 匿名内部类:没有类型名称、实例对象名称
3. 无法编写构造方法,可以添加构造代码块
4. 不能出现静态成员
5. 匿名内部类:如果希望对此创建对象,而且类的内容一样的话,可以使用单独定义的实现类
6. 匿名对象,在【调用方法】的时候,只能使用唯一一次
7. 匿名对象:如果希望同一个对象,调用多次方法,那么必须给对象起个名字。
8. 匿名内部类是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】
9. 强调:匿名内部类和匿名对象不是一回事!!!。
七、继承
7.1 成员变量重名
等号左边是谁就优先用谁,没有则向上找。
编译看左,运行还看左
new的对象是谁,就优先用谁,如果没有则向上找。
编译看左,运行看右。
7.2 访问成员方法的规则
7.3 super 关键字
7.4 this关键字
this(…)调用也必须是构造方法的第一条语句,唯一一个。
super和this两种构造调用,不能同时使用。
7.5 final关键字
八、 接口
8.1 接口的注意事项
public class 实现类名称 implements 接口名称{
方法体
}
8.2 接口的定义格式
在Java 9版本中,接口的定义格式为:
public interface 接口名称 {
// ...
}
8.3接口的组成部分
8.3.1 常量(java7)
public static final 数据类型 常量名称 = 数值;
8.3.2 抽象方法(java7)
public abstract 返回值类型 方法名称(参数列表);
8.3.3 默认方法(java8)
public default 返回值类型 方法名称(参数列表){
//方法体
}
8.3.4 静态方法(java 8)
public static 返回值类型 方法名称(参数列表){
//方法体
}
8.3.5 私有方法
private 返回值类型 方法名称(参数列表){
//方法体
}
private static 返回值类型 方法名称(参数列表){
//方法体
}
8.4 重名问题
8.5 接口与实现类的使用:(上转型)
接口名称 引用名 = new 实现类名称();
引用名.抽象方法名(参数);
8.6 函数式接口
九、 多态
9.1 上转型与下转型
9.2 格式
9.3 多态中,成员方法的访问规则
9.4 instanceof 关键字
十、 泛型
情况1):泛型类中的泛型只能适用于非静态方法如果需要给静态方法设置泛型,此时使用泛型方法
情况2):泛型类中的泛型应该适用于整个类中多个方法有时候只对某一个方法设置泛型即可.
十一、 集合
10.1 ArrayList
添加:public boolean add(E element)
获取:public E get(int index)
长度:public int size()
注意事项:
ArrayList集合直接打印对象名称,得到的不是地址值,而是内容,格式和数组类似。
简单了解原因:是因为ArrayList这个类其中的toString方法有特殊处理。
从Java7开始优化这个设计,new ArrayList,其实底层创建的使用一个空数组。
Object []elementData = new Object[]{};在第一次调用add方法的时候才会重新去初始化数组.10.2 List集合
10.3 Set集合
10.4 Map集合
10.5 Iterator与ListIterator
10.6 日常数据结构使用什么类
10.7 集合排序
1. int compareTo(T o)
2. 使用前提:被排序的集合里边存储的元素,必须实现Comparable,重写接口中的方法int compareTo(T o)定义排序的规则。
3. 自己(this)和别人(参数)比较,自己需要实现Comparable接口,重写比较的规则compareTo方法
4. Comparable接口的排序规则:自己(this) - 参数:升序
1. int compare(T o1, T o2)
2. 重写Comparator接口中的compare(T o1,T o2)方法
3. 相当于找一个第三方的裁判
4. Comparator接口的排序规则:o1 – o2:升序
10.8 其他注意
10.8.1 Hashtable 与 HashMap
十二、常用类
12.1 Date
12.2 String
12.3 Collections工具类
12.4 Calendar
12.5 Arrays工具类