java学习(二)
学号 20189214 《Java程序设计》第二周学习总结
教材学习内容总结
java类
创建java对象需要类似的模板,即类(class)
java对象也拥有属性和能够执行的动作。
属性叫做字段(field),而动作叫作方法(method)
字段和方法都是可选的
类是java程序的基本构建模块。java中的所有的程序元素,必须位于一个类中。一个公有类的定义必须存放在一个文件中,这个文件名要和类名相同。
构造方法
每个类至少有一个构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。
构造方法用于构建一个对象。与一个方法的不同在于构造方法不需要有返回值,甚至不需要有void类型的返回值。构造方法可以没有参数。
类成员访问控制修饰符
类成员(方法、字段、构造方法等)可以具备4中访问控制级别之一:
- public 对所有类可见
- protected 对本包和对所有子类可见
- private 仅对本类可见
- default 对本包可见
创建对象
- 声明:声明一个对象,包括对象名称和对象类型。
- 实例化:使用关键字new来创建一个对象。
- 初始化:使用new创建对象时,会调用构造方法初始化对象。
超类的构造方法
如果调用子类的构造方法来实例化一个子类时,
- 首先会调用父类的无参数构造方法。
- 然后父类调用父类的构造方法。
- 直到调用到java.lang.Object类的构造方法。
import 关键字
为了能够使用某一个包的成员,我们需要在 Java 程序中明确导入该包。使用 "import" 语句可完成此功能。
在 java 源文件中 import 语句应位于 package 语句之后,所有类的定义之前,可以没有,也可以有多条,其语法格式为:
- import payroll.*;
- import payroll.Employee;
还可以通过使用该类的完全限定名称:
java.io.File.file = new java.io.File(filenames)
封装和访问控制
封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。
封装的优点:
- 良好的封装能够减少耦合。
- 类内部的结构可以自由修改。
- 可以对成员变量进行更精确的控制。
- 隐藏信息,实现细节。
从一个静态方法的内部,不能调用实例方法或实例字段。但从一个静态方法中,可以访问其他的静态方法或静态字段
声明静态引用变量,该变量会包含一个地址。但是引用的对象是存储在堆中。静态引用变量可以在不同的对象之间共享相同的对象。
加载、连接和初始化
- JVM调用类中main方法
- JVM将java类的二进制表示加载到内存中。
- JVM加载连接其他的类/接口。
- JVM初始化整个过程递归地进行。
继承
所有的java类都不用显式地扩展一个父类,而是自动地继承了java.lang.Object类
一个类只有扩展一个类,使用接口也能实现多继承的效果。
将子类的一个实例赋值给父类的一个引用变量式合法的。
class 父类 {
}class 子类 extends 父类 {
}
方法覆盖
方法覆盖(method overriding)是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
重载规则(重写):
- 参数列表必须完全与被重写方法的相同;
- 返回类型必须完全与被重写方法的返回类型相同;
- 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。将超类中的一个方法的可见性变高式允许的,减少式非法的。
- 父类的成员方法只能被它的子类重写。
- 声明为final的方法不能被重写。
- 声明为static的方法不能被重写,但是能够被再次声明。
- 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
- 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
- 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
- 构造方法不能被重写。
- 如果不能继承一个方法,则不能重写这个方法。(私有方法)
接口
- 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
- 除了明确指定,所有的接口方法都是抽象的。接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述
- 的所有方法,否则就必须声明为抽象类。
- 接口中的字段必须初始化,并且隐式地是公有的、静态的和final的。
- 接口中的抽象方法没有主体。所有抽象方法都隐式的为公开的抽象的。
多态###
同一个事件发生在不同的对象上会产生不同的结果。
多态的实现方式
- 重写
- 接口
- 抽象类和抽象方法
教材学习中的问题和解决过程
- 问题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
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 150/200 | 2/2 | 20/20 | |
第二周 | 200/400 | 1/3 | 20/40 |
计划学习时间:15小时
实际学习时间:20小时
参考资料
java学习(二)的更多相关文章
- java学习(二)多态中成员变量详解
今天我总结了一下java多态中成员变量的赋值与调用 举一个我当初做过的小案例: class Fu{ int num; void show(){} } class Zi extends Fu{ //in ...
- java学习二
一.类 1.类是模子,确定对象将会拥有的特征(属性)和行为(方法) 2.类的特点: (1).类是对象的类型 (2).具有相同属性和方法的一组对象的集合 3.类是抽象的概念,仅仅是模板,比如说:“手机” ...
- 《java学习二》jvm性能优化-----认识jvm
Java内存结构 Java堆(Java Heap) java堆是java虚拟机所管理的内存中最大的一块,是被所有线程共享的一块内存区域. 在虚拟机启动时创建.此内存区域的唯一目的就是存放对象实例,这一 ...
- 《java学习二》并发编程
多线程创建方式 1.继承thread类,重写run方法 CreateThread createThread = new CreateThread(); ------createThread ...
- Java学习:二 基础
2014 - 5 - 22 上午 Java对大小写敏感. 点号(.)用于调用方法,Java的能用语法是: object.method(parameters); Java中的常量声明使用fina ...
- java学习(二)--excel导出
public static String writeFile(String fileName, String[][] content) { WritableWorkbook wwb = null; S ...
- java学习二 数据类型自动提升 0x开头的数据是 16进制且是int型
变量只能定义一次,不能定义两次, 变量的作用域:当前的大括号与子括号才有效 变量的作用:存储值,取值 整型:向上自动升级,向下强制降级 char,byte,shot参与运算时候自动提升为int型 因为 ...
- Java学习-039-源码 jar 包的二次开发扩展实例(源码修改)
最近在使用已有的一些 jar 包时,发现有些 jar 包中的一些方法无法满足自己的一些需求,例如返回固定的格式,字符串处理等等,因而需要对原有 jar 文件中对应的 class 文件进行二次开发扩展, ...
- Java学习-046-日志抓取合并后排序问题解决方案之 --- log4j 二次定制,实现日志输出添加延时10ms
自3月25至今,已经好久没有写学习日志了,今天在写日志抓取合并的小方法,发现抓取后的日志并米有依据系统执行的日志顺序排序.日志抓取排列逻辑如下: 通过日志标识,从各个日志文件(例如 use.log,e ...
- Java学习-028-JSON 之二 -- 数据读取
JSON数据由 JSONObject.JSONArray.key_value 组合而成.通常来说,JSONObject 可以包含 JSONObject.JSONArray.key_value:JSON ...
随机推荐
- sql 查询语句的练习
--1.使用基本查询语句. --(1)查询DEPT表显示所有部门名称. select * from dept; --(2)查询EMP表显示所有雇员名及其全年收入(月收入=工资+补助),处理NULL行, ...
- 分布式一致性算法2PC和3PC
为了解决分布式一致性问题,产生了不少经典的分布式一致性算法,本文将介绍其中的2PC和3PC.2PC即Two-Phase Commit,译为二阶段提交协议.3PC即Three-Phase Commit, ...
- JAVA SpringBoot2 关于 JSON 数据处理,基于 ObjectMapper
1,当今的互联网开发行业,JSON 这种数据格式越来越成为网络开发的主流,尤其是前后端分离之后,几乎百分百的数据交互方式都是采用 JSON 2,由于 SpringMVC 框架的封装性,我们日常开发中只 ...
- [PHP+JS]微信卡券(潦草笔记,全代码,亲测通过)
群发卡券可以通过客服消息推送 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140547 后端代码: define('A ...
- 统计不同渠道的的UV,再合计渠道总计UV
( SELECT `统计时间`, `贷款公司名称`, `推广员姓名`, UV FROM ac_statistics WHERE `贷款公司名称` = "金腰袋" AND `统计时间 ...
- __proto__、prototype和原型对象
一.__proto__ 对象内部存在一个指针,用来指向上一层函数的原型对象.ECMA-262第五版中关这个指针叫[[prototype]],但Firefox.Safari和Chrome在每个对象上都支 ...
- K8s简单yaml文件运行例子deployment
kubectl run 创建并运行一个或多个容器镜像. 创建一个deployment 或job 来管理容器. kubectl run 语法: $ run NAME --image=image [--e ...
- [原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(一) -- 安装jdk(含jre)及 MySql 5.6.39
[原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(一) -- 安装jdk(含jre)及 MySql 5.6.39 回老家已经有一段时间了, 四五线 ...
- ARTS打卡计划第二周-Share-使用java注解对方法计时
现在有这样一种常见,系统中有一个接口,该接口执行的方法忽快忽慢,因此你需要去统计改方法的执行时间.刚开始你的代码可能如下: long start = System.currentTimeMillis( ...
- centos7.4重置root密码
1- 在启动grub菜单,选择编辑选项启动 2 - 按键盘e键,来进入编辑界面 3 - 找到Linux 16的那一行,将ro改为rw init=/sysroot/bin/sh 4 - 现在按下 Con ...