0. Java 相关包
java.lang:包含一些Java语言的核心类,如String、Math、Integer、System和Thread等
java.net:执行与网络相关操作的类和接口
java.io:提供多种输入/输出功能的类
java.util:一些使用工具类,如定义系统特性、接口的集合框架类、日期日历相关函数
java.text:java格式化相关的类
java.sql:java与JDBC数据库编程的相关类、接口
java.awt:构成抽象窗口工具集的多个类,这些类被用来构建和管理应用程序的GUI;
1. 变量(成员变量、局部变量)
成员变量:根据是否由 static 修饰,可分为 ① 类变量 ② 实例变量
局部变量:① 形参(方法、构造器中定义的变量)② 方法局部变量(在方法内定义)③ 代码块局部变量(在代码块内定义);②③需显式初始化;
局部变量加载到栈空间,属性加载到堆空间;
2. 数据类型
整数类型:整型常量默认int型,声明long型常量须加'L'区分(不足以表示较大的数时采用long)
浮点型:浮点型常量默认为double型,声明float型常量要跟 'f' 或 'F' 。(float:7位有效数字,double 16位)
字符型:通常意义上“字符”(2字节);
3. 基本数据类型转换(容量小的类型自动转换为容量大的数据类型)
★当把任何基本数据类型的值和字符串(String)进行连接运算时(+),基本数据类型的值将自动转化为字符(String)类型。
byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
4. 注意 & 和 && (或运算同理)
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
5. 运算符new为之分配空间
6. 内存空间包括:
栈 stack:主要存放局部变量
堆 heap:new出来的结构:对象、数组
方法区:常量池、静态域 static、类加载的一些信息
7. 堆 heap
此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。
JVM规范中的描述是:所有的对象实例以及数组都要在堆上分配。
8. 栈 stack
指虚拟机栈,用于存储局部变量等。
局部变量表:存放了编译期可知长度的各种基本数据类型、对象引用。 方法执行完自动释放。
基本数据类型(boolean、byte、char 、 short 、 int 、 float 、 long 、double)
对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址)
9. 方法区
用于存储已被JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
10. 匿名对象的使用,直接使用 new 方法()当成整体使用;
11. 可变个数的形参(新特性):
格式:数据类型 ... 变量名
注意:可变个数形参在方法中声明时,必须放在末尾;get(int a, object ... obj);
一个方法声明时,有且只有一个可变个数的形参;
12. Java中只存在值传递,即将实际参数值的副本传入方法内,而参数本身不受影响;
形参是数据类型:将实参基本数据类型变量的“数据值”传递给形参;
形参是引用类型:将实参引用数据类型变量的“地址值”传递给形参;
13. 访问权限修饰符
14. UML图
15. this 关键字
在方法内部使用,即这个方法所属对象的引用;在构造器内部使用,表示该构造器正在初始化的对象;
this 可以调用类的属性、方法和构造器;当在方法内需要用到调用该方法的对象时,就用this,但是不能用this(形参列表)方式调用自己;
规定:this(形参列表) 必须申明在构造器首行;构造器内部,最多只能声明一个 this;
16. super 关键字
super 必须在子类构造器的首行出现;
类构造器中,this(形参列表) 和 super(形参列表) 不能同时出现,只能出现一个;
构造器首行,没有显示声明 this(形参列表) 和 super(形参列表) ,则默认调用父类中的无参构造器;
如果没记错的话,如果在子类中使用 super()的有参构造器,父类中必须存在无参构造器;
注:通过子类构造器创建对象时,一定会直接或间接调用父类构造器,以及间接父类构造器,直到调用Java.lang.Object类中的无参构造器。
17. package:同一个包下,不能命名同名的接口、类;
18. MVC设计模式:视图、控制器、模型
模型:主要处理数据(数据对象封装、数据库操作类、数据库);
控制器:处理业务逻辑(应用界面相关、存放fragment、显示列表的适配器、服务相关的、抽取的基类);
视图:view显示数据(相关工具类、自定义view)
19. 子类继承父类的全部结构,也继承间接父类(父类的父类....)的全部结构;
20. 方法重写:在子类中可以根据需要对从父类中继承来的方法进行改造;
a. 子类重写的方法必须和父类被重写的方法具有相同的方法名称、参数列表;
b. 子类重写的方法的返回值类型不能大于父类被重写的方法的返回值类型;
父类返回值为void,子类也只能是void;
父类返回值Object类型,子类返回值必须是Object类或其子类;
若父类返回值类型是数值型,子类返回值必须也是相同的基本数据类型;
c. 子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限;
d. 子类方法抛出的异常不能大于父类被重写方法的异常;
注意:子类与父类中同名同参数的方法必须同时声明为非static的(即为重写),或者同时声明为static的(不是重写)。
static方法是属于类的,子类无法覆盖父类的方法;即静态方法无法被重写;
21. 多态:父类的引用指向子类的对象;
a. Java引用变量有两个类型: 编译时类型(由声明该变量时使用的类型决定)和运行时类型(由实际赋给该变量的对象决定);
b. 若编译时类型和运行时类型不一致 , 就出现了对象的多态性;
编译时,看左边(父类的引用(父类中不具备子类特有的方法));
运行时,看右边(子类的对象(实际运行的是子类重写父类的方法))。
c. 在Java中,子类的对象可以替代父类的对象使用
一个变量只能有一种确定的数据类型;
一个引用类型变量可能指向(引用)多种不同类型的对象;
子类可看做是特殊的父类,所以父类类型的引用可以指向子类的对象:向上转型(upcasting)。
注意:
1. 引用类型变量如果声明为父类的类型,实际引用的是子类对象,就不能访问子类中添加的属性和方法;
2. 虚拟方法:调用子父类同名同参的方法时,实际调用的是子类中的重写方法;(不适用于属性,声明谁使用谁的属性)
3. 动态绑定:编译时为 父类 类型,而方法是 子类 方法的调用,这是在运行时确定的;
22. 重写和多态:
重载:允许存在多个同名方法,而这些方法的参数不同,编译器根据方法不同的参数表,对同名方法的名称做修饰。
编译器认为这些同名方法是不同的方法,调用地址在编译期就绑定了,子类可以重载父类的同名不同参数的方法。
对于重载而言,在方法调用之前,编译器就已经确定了所要调用的方法,这称为“早绑定”或“静态绑定”;
多态:只有等到方法调用的那一刻,解释运行器才会确定所要调用的具体方法,这称为“晚绑定”或“动态绑定”。
23. 向下转型:多态在使用时,若是想访问子类中的特有属性和方法,可以加强制转换,由高转低;
注意:向下转型的前提是,new 的对象一定是下层的子类对象;
24. Object类结构:
① 所有类的根父类
② 如果在类的声明里没有使用extends指明父类,则默认Object类为父类
③ 类中属性、方法通用;
25. == 和 equals() 比较
==(左右两边类型要一致)
比较即便数据类型变量,比的是两个变量保存的数据值是否相等(类型不一定相同);
比较的事引用数据类型,比的是两个对象的地址值是否相等,即是否指向同一对象实体;
equals
Object类中定义的equals()和==的作用是相同的,比较两个对象的地址是否相同;
String、Date、File、包装类等都重写了equals()方法;比较的是两个对象的实体内容是否相同;
equals 重写
可以查看系统中已存在的 equals 的方法,仿照去写;实现两个类内各元素的比较;
alt + ins 可以选择自动生成类的equals()重写方法
26. 单元测试的使用方法
a. 首先需要在当前工程中导入JUnit包;
b. 单元测试的要求:此类是 public 的,且提供公共没有返回值的无参构造器;
c. 在方法上添加注释@Test 后,即可在方法内写测试代码;
27. 包装类以及自动装箱/拆箱
包装类---->基本数据类型:调用包装类xxx的xxxValue(比如int a = Integer.IntValue(b));
自动拆箱:赋值过程中,自动把包装类转换成数据类型;(Integer in1; int num3 = in1;)
基本数据类型---->包装类:包装类:调用包装类的构造器(如 Integer a = new Integer(12));
自动装箱:赋值过程中,自动把数据类型转换成包装类;(int num2 = 10; Integer in1 = num2;)
28. static 关键字(可以修饰属性、方法、代码块、内部类)
a. 是否用static修饰属性:分为 静态属性(静态属性归类所有,所有实例共享) 和 非静态属性(实例变量)
① 静态变量随着类的加载而加载,因此可以通过”类.静态变量“方式调用;
② 静态变量的加载要早于对象的创建;
③ 类只会加载一次,因此静态变量在内存中也只有一份(运行程序时会先把整个类加载到方法区的静态域中,加载完后会做缓存)
b. 用static修饰方法:静态方法
① 静态方法随着类的加载而加载,因此可以通过”类.静态方法“方式调用;
② 静态方法中,只可以调用静态的方法或属性;非静态方法中,可以调用静态/非静态的方法和属性;
③ 静态方法内,不能使用 this 和 super 关键字;
29. final 关键字
a. 可以用来修饰类、方法、变量
b. final 修饰类:该类不能被继承,”太监类“;
c. final 修饰方法:此方法不能被重写;
d. final 修饰变量:此时的变量就是常量(全大写);可以考虑初始化的位置有:显示初始化、代码块中、构造器;
综上:static + final 可以用来修饰类 + 方法;
30. 类的成员:代码块(初始化块)
a. 代码块的作用:用来初始化类、对象
b. 只能用 static 修饰代码块,分为静态代码块和非静态代码块;
多个相同类型代码块的执行顺序,按照代码内的声明顺序来;
静态代码块:随着类的加载而执行;只执行一次;初始化类的信息;静态代码块只能调用静态结构;
非静态代码块:随着对象的创建而执行;每创建一个对象执行一次;可以对对象属性进行初始化;都可以调用;
31. 抽象类、抽象方法
abstract 不能修饰 私有方法、静态方法、final 方法、final 类;
抽象类
a. 抽象类不能实例化;
b. 抽象类一定有构造器,便于子类实例化时调用(设计子类对象实例化的全过程);
c. 开发中都会提供抽象类的子类,让子类对象实例化完成操作;
抽象方法
a. 抽象方法只有方法的声明,没有方法体;
b. 包含抽象方法的类一定是抽象类,但是抽象类可以没有抽象方法;
c. 子类必须重写父类所有的抽象方法,否则子类也是抽象类;
32. 接口 Interface
a. JDK7及以前,只能定义全局常量和抽象方法
全局常量:public static final 的,书写时可以省略不写前面一串;
抽象方法:public abstract 的
b. JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法(略);
c. 接口中不能定义构造器,也就是接口不能实例化;
d. 接口通过让类区实现(Implements)的方式来使用
实现类覆盖了接口中所有的抽象方法,则这个实现类就可以实例化;否则就是一个抽象类;
33. 内部类
内部类的分类:成员内部类(静态、非静态)、局部内部类(方法内、代码块内、构造器内)
成员内部类:
作为内部类的成员:
a. 可以调用外部类的结构;
b. 可以被 static 修饰;
c. 可以被 4 种不同的权限修饰;
作为一个类:
a. 类内可以定义属性、方法、构造器等;
b. 可以被 final 修饰,表示不能被继承,不使用 final 修饰则可以被继承;
c. 可以被 abstract 修饰;
标签:查漏,调用,Java,对象,子类,数据类型,days01,父类,方法 From: https://www.cnblogs.com/LinxhzZ/p/16743331.html