首页 > 编程语言 >Java SE 宋红康 days01-查漏补缺

Java SE 宋红康 days01-查漏补缺

时间:2022-09-29 22:35:42浏览次数:46  
标签:查漏 调用 Java 对象 子类 数据类型 days01 父类 方法

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

相关文章

  • 算法题注意事项/debug细节(Java语言)
    注意循环中的序号使用:i,j,k。看清现在在哪一层,要用哪个,不要用错。注意Java中的方法是都是值传递(pass-by-value),没有引用传递。对于对象是地址的值传递不要在循环中反......
  • Javascript 手写 LRU 算法
    LRU是LeastRecentlyUsed的缩写,即最近最少使用。作为一种经典的缓存策略,它的基本思想是长期不被使用的数据,在未来被用到的几率也不大,所以当新的数据进来时我们可以优先......
  • 如何在Intellij IDEA运行和调试JavaScript
    浏览器都可以解析和运行JS,但最好的方式应该还是使用node.js来运行。所以第一步就是安装node。对于Mac,一条命令即可:$brewinstallnode安装完成后,可以检查一下对应的......
  • 常用的Java 架包(jar)的用途
    前言:如果需要在项目中引入jar包,可以采用maven,配置方式在 ​​http://mvnrepository.com​​ 查询 slf4j-api简介:slf4j并不是一种具体的日志系统,而是一个用户日志系统......
  • 003.JavaScript的数据类型
         ......
  • java基础
                   ......
  • java问题
    什么是序列化,什么是反序列表,为什么有时要用到序列化?(1)java序列化就是指把java对象转换为字节序列的过程,反序列化就是指把字节符恢复为java对象的过程。(2)序列化最重要的作用......
  • Java中如何输入一个字符
    1、Scanner类中没有定义读取char的方法。Java中的扫描器类支持nextInt(),nextLong(),nextDouble()等。但是没有nextChar()。要读取char,我们使用next().charAt(0)。next()......
  • java-抽象类笔记
    抽象方法和抽象类抽象方法使用abstract修饰的方法,没有方法体,只有声明。定义的是一种“规范”,就是告诉子类必须要给抽象方法提供具体的实现。抽象类包含抽象方......
  • Java的特性和优势
    简单性:C++纯净版,无头文件,无指针运算,无内存管理,语法基于C面向对象:重点放在对象以及对象之间的接口,模拟人的思维写程序,学习快可移植性:跨平台性,无操作系统和硬盘的限制......