zoukankan      html  css  js  c++  java
  • java学习(二)

    学号 20189214 《Java程序设计》第二周学习总结

    教材学习内容总结

    java类

    创建java对象需要类似的模板,即类(class)
    java对象也拥有属性和能够执行的动作。
    属性叫做字段(field),而动作叫作方法(method)
    字段和方法都是可选的
    类是java程序的基本构建模块。java中的所有的程序元素,必须位于一个类中。一个公有类的定义必须存放在一个文件中,这个文件名要和类名相同。

    构造方法

    每个类至少有一个构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。
    构造方法用于构建一个对象。与一个方法的不同在于构造方法不需要有返回值,甚至不需要有void类型的返回值。构造方法可以没有参数。

    类成员访问控制修饰符

    类成员(方法、字段、构造方法等)可以具备4中访问控制级别之一:

    • public 对所有类可见
    • protected 对本包和对所有子类可见
    • private 仅对本类可见
    • default 对本包可见

    创建对象

    • 声明:声明一个对象,包括对象名称和对象类型。
    • 实例化:使用关键字new来创建一个对象。
    • 初始化:使用new创建对象时,会调用构造方法初始化对象。

    超类的构造方法

    如果调用子类的构造方法来实例化一个子类时,

    1. 首先会调用父类的无参数构造方法
    2. 然后父类调用父类的构造方法。
    3. 直到调用到java.lang.Object类的构造方法。

    import 关键字

    为了能够使用某一个包的成员,我们需要在 Java 程序中明确导入该包。使用 "import" 语句可完成此功能。
    在 java 源文件中 import 语句应位于 package 语句之后,所有类的定义之前,可以没有,也可以有多条,其语法格式为:

    • import payroll.*;
    • import payroll.Employee;

    还可以通过使用该类的完全限定名称

    java.io.File.file = new java.io.File(filenames)
    

    封装和访问控制

    封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。

    封装的优点:

    • 良好的封装能够减少耦合。
    • 类内部的结构可以自由修改。
    • 可以对成员变量进行更精确的控制。
    • 隐藏信息,实现细节。

    从一个静态方法的内部,不能调用实例方法或实例字段。但从一个静态方法中,可以访问其他的静态方法或静态字段

    声明静态引用变量,该变量会包含一个地址。但是引用的对象是存储在堆中。静态引用变量可以在不同的对象之间共享相同的对象。

    加载、连接和初始化

    1. JVM调用类中main方法
    2. JVM将java类的二进制表示加载到内存中。
    3. JVM加载连接其他的类/接口。
    4. JVM初始化整个过程递归地进行。

    继承

    1. 所有的java类都不用显式地扩展一个父类,而是自动地继承了java.lang.Object类

    2. 一个类只有扩展一个类,使用接口也能实现多继承的效果。

    3. 将子类的一个实例赋值给父类的一个引用变量式合法的。
      class 父类 {
      }

      class 子类 extends 父类 {
      }

    方法覆盖

    方法覆盖(method overriding)是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
    重载规则(重写):

    • 参数列表必须完全与被重写方法的相同;
    • 返回类型必须完全与被重写方法的返回类型相同;
    • 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。将超类中的一个方法的可见性变高式允许的,减少式非法的。
    • 父类的成员方法只能被它的子类重写。
    • 声明为final的方法不能被重写。
    • 声明为static的方法不能被重写,但是能够被再次声明。
    • 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
    • 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
    • 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
    • 构造方法不能被重写。
    • 如果不能继承一个方法,则不能重写这个方法。(私有方法)

    接口

    • 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
    • 除了明确指定,所有的接口方法都是抽象的。接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述
    • 的所有方法,否则就必须声明为抽象类。
    • 接口中的字段必须初始化,并且隐式地是公有的、静态的和final的。
    • 接口中的抽象方法没有主体。所有抽象方法都隐式的为公开的抽象的。

    多态###

    同一个事件发生在不同的对象上会产生不同的结果。
    多态的实现方式

    1. 重写
    2. 接口
    3. 抽象类和抽象方法

    教材学习中的问题和解决过程

    • 问题1:方法重载与方法重写的对比
    • 方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
      (1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
      (2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
      (3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

    代码调试中的问题和解决过程

    • 问题1:在书写方法时,在main中调用非静态字段
    • 问题1解决方案:将字段改为静态或者创建实例访问b。

    [代码托管]

    上周考试错题总结

    1
    编译错误:
    public static void main(String[] args)类型的常见错误为:

    • 丢失static;

    • String必须大写;

    • public static void main()是错误的。

    2
    如果C:\workspace\Hello\src中有Main.java如下:

    package cc.openhome;  public class Main { 
    
    	public static void main(String[]args) {   
    
       		System.out.println("Hello World");  
    
    	} 
    
    } 
    

    文本模式下你的工作路径是C:\workspace\Hello,那么如何编译与执行Main类别?
    A .javac src\Main.java java C:\workspace\Hello\classes\Main
    B .javac –d classes src\Main.java java –cp classes Main
    C .javac –d classes src\Main.java java –cp classes cc.openhome.Main
    D .javac –d classes src\Main.java java –cp classes/cc/openhome Main

    javac的详细用法

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 150/200 2/2 20/20
    第二周 200/400 1/3 20/40
    • 计划学习时间:15小时

    • 实际学习时间:20小时

    参考资料

  • 相关阅读:
    Jzoj4822 完美标号
    Jzoj4822 完美标号
    Jzoj4792 整除
    Jzoj4792 整除
    Educational Codeforces Round 79 A. New Year Garland
    Good Bye 2019 C. Make Good
    ?Good Bye 2019 B. Interesting Subarray
    Good Bye 2019 A. Card Game
    力扣算法题—088扰乱字符串【二叉树】
    力扣算法题—086分隔链表
  • 原文地址:https://www.cnblogs.com/Shambryce/p/10506862.html
Copyright © 2011-2022 走看看