JAVA自学笔记08

1、构造方法私有,外界就不能再创建对象

2、说明书的制作过程

1)写一个工具类,在同一文件夹下,测试类需要用到工具类,系统将自动编译工具类;工具类的成员方法一般是静态的,因此在测试类中可直接通过

工具类名.方法名(参数列表);

的方法来调用

2)加入文档注释

@ 文字(作者、版本)

@ param / return

3)用工具解析文档注释:javadoc

格式:javadoc -d 目录名-author-version 工具类名.java

可创建未存在的目录

3、工具类配合说明书使用

1)找到并打开文档

2)点击显示,找出索引,找出搜索框

3)观察该类的构造,需不需要导包(java.lang包下的类不需要导入)等等

4)观察类说明,构造方法及成员方法和版本

成员变量 字段摘要

构造方法 构造方法摘要

成员方法(静态?返回值类型?) 方法摘要

有构造方法就创建对象;没有构造方法可能就是静态的

5)使用

@例题1:观察JAVA1.7API文档,学习math类

@例题2:借助Math工具类,编写猜数字程序

import java.util.Scanner;
public class Guess { public static void main(String[] args) {
// TODO 自动生成的方法存根 int num = (int)( 100*Math.random()+1);
System.out.println(num);
int i=5;
Scanner sc = new Scanner(System.in);
System.out.print("猜数字,范围在0~100间");
String s2 = "大了";
String s3 = "小了";
String s4 = "猜对了,游戏结束";
String s5 = "请输入数字"; int x=sc.nextInt();
for(;x!=num&&i>0;i--) {
if(x>num) {
System.out.println(s2);
System.out.println(s5);
}
if(x<num) {
System.out.println(s3);
System.out.println(s5);
}
x=sc.nextInt();
}
if(x==num) {
System.out.println(s4);
}else {
System.out.println("五次机会用完,游戏结束");
}
}
}

3、代码块

1)用{}括起来的代码

2)可分为局部代码块、静态代码块、同步代码块、构造代码块

3)局部代码块:在方法中出现,用于 限定变量生命周期,及早释放,提高内存利用率

4)构造代码块:在类中方法外(类中的成员位置)出现,多个构造方法中 方法中相同的代码存放到一起,每次调用构造方法时都执行(但在main方法之后),并且在构造方法前执行,可以把多个构造方法的共同代码放到一起,用于对对象进行初始化

5)静态代码块:在类中方法外(类中的成员位置)出现,并加上static修饰,即static{…};一般用于给类进行初始化,在加载时就进行,并且只进行一次

执行顺序5、4、构造方法,与实际顺序无关

4、继承

1)定义:多个类(子类、派生类)中存在相同属性和行为时,将这些内容抽取到单独一个类中,只需继承那个类(被称为父类、基类或超类)即可

2)通过extends关键字可以实现类与类的继承

class 子类名 extends 父类名{};

3) 提高代码的复用性、提高代码的维护性、使类与类间产生了关系,是多态的前提

4)弊端:类的耦合性增强,我们需要低耦合高内聚

5)特点:①JAVA中只支持单继承,不支持多继承,但它支持多层继承

6)注意事项:

①子类只能继承父类所有的非私有的成员(方法及变量)

②不要为了部分功能去继承一个类

③子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法

7)使用继承的时机

8)成员变量的关系:

①在子类方法中访问一个变量的查找顺序:首先在子类的局部范围内查找,有就使用;接着在子类的成员范围找,有就使用;最后,在父类的成员(变量)内寻找(仅考虑单继承的情况,其余同理类推)

②this和super的区别

%访问成员变量:

this/super.成员变量

调用本类的成员变量/调用父类的成员变量

%调用构造方法:

this(…) 调用本类的构造方法

super(…) 调用父类的构造方法

%调用成员方法:

this.成员方法名 调用本类的成员方法

super.成员方法名 调用父类的成员方法

③继承中构造方法的关系:子类中所有的构造方法默认都会访问父类的无参构造方法

原因:因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前一定要先完成父类数据的初始化

子类的每一个构造方法的第一条语句默认为super();

④继承中构造方法的注意事项:

如果父类中没有无参构造(即已给有参构造方法)方法,系统调用子类的构造方法将报错

解决方法:解决方法:在子类构造方法最前面加

super(参数列表);

来调用父类其他的带参构造方法即可

或者用子类通过this调用本类的其他构造方法来间接调用父类的带参构造方法

super(…)和this(…)必须放在第一句否则就会出现父类数据多次初始化的情况

⑤一个类的初始化的过程:默认初始化、显示初始化、构造方法初始化

@例题3:看程序写结果

class Father{
static{System.out.println("静态代码块Father");
}
{System.out.println("构造代码块Father");
}
public Father(){
System.out.println("构造方法Father");
}
}
class Son extends Father{
static{System.out.println("静态代码块Son");
}
{System.out.println("构造代码块Son");
}
public Father(){
System.out.println("构造方法Son");
}
}
class Demo{
Son s = new Son();
}

执行结果为:

静态代码块Father

静态代码块Son//加载类时执行

构造代码块Father

构造方法Father

构造代码块Son

构造方法Son

JAVA自学笔记08的更多相关文章

  1. JAVA自学笔记09

    JAVA自学笔记09 1.子类的方法会把父类的同名方法覆盖(重写) 2.final: 1)可修饰类.方法.变量 2)修饰类时:此时该类变为最终类,它将无法成为父类而被继承 3)修饰方法时:该方法将无法 ...

  2. JAVA自学笔记05

    JAVA自学笔记05 1.方法 1)方法就是完成特定功能的代码块,类似C语言中的函数. 2)格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,-){ 函数体; return ...

  3. JAVA自学笔记06

    JAVA自学笔记06 1.二维数组 1)格式: ①数据类型[][]数组名 = new 数据类型[m][n]; 或 数据类型[]数组名[]=new 数据类型[m][n]; m表示这个二维数组有多少个一维 ...

  4. JAVA自学笔记04

    JAVA自学笔记04 1.switch语句 1)格式:switch(表达式){ case 值1: 语句体1; break; case 值2: 语句体2; break; - default: 语句体n+ ...

  5. JAVA自学笔记07

    JAVA自学笔记07 1.构造方法 1) 例如:Student s = new Student();//构造方法 System.out.println(s);// Student@e5bbd6 2)功 ...

  6. JAVA自学笔记10

    JAVA自学笔记10 1.形式参数与返回值 1)类名作为形式参数(基本类型.引用类型) 作形参必须是类的对象 2)抽象类名作形参 需要该抽象类的子类对象,通过多态实现 3)接口名为形参 需要的是该接口 ...

  7. JAVA自学笔记13

    JAVA自学笔记13 1.StringBuffer类 1)线程安全的可变字符序列 线程安全(即同步) 2)StringBuffer与String的区别:一个可变一个不可变 3)构造方法: ①publi ...

  8. JAVA自学笔记11

    JAVA自学笔记11 1:Eclipse的安装 2:用Eclipse写一个HelloWorld案例,最终在控制台输出你的名字 A:创建项目 B:在src目录下创建包.cn.itcast C:在cn.i ...

  9. JAVA自学笔记14

    JAVA自学笔记14 1.正则表达式 1)是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.其实就是一种规则.有自己的特殊应用 2)组成规则: 规则字符在java.util.rege ...

随机推荐

  1. libsecp256k1 与 openssl ecdsa

    1. 历史 区块链节点在接收到的用户发送的交易时,首先会验证交易所涉及utxo的可用性.方法是验证用户签名的合法性,涉及的签名算法就是secp256k1,一种椭圆曲线加密算法. 长期以来,实现了该算法 ...

  2. BZOJ1911 [Apio2010]特别行动队 - 动态规划 - 斜率优化

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 UPD(2018-04-01):用Latex重打了公式…… 题意概括 把一个整数序列划分成任意连续的段,使得划分出 ...

  3. Spring Data Redis实现消息队列——发布/订阅模式

    一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式.利用redis这两种场景的消息队列都能够实现. 定义:生产者消费者模式:生产者生产消息放到队列里,多个消费者同时监听队列, ...

  4. 导入项目报错:Type Java compiler level does not match the version

    1,导入项目报错一般是因为缺少jar包或者是jar包冲突 2,导入的jar包版本问题 3,环境需要重新修改,比如build path 中重新add libararies 遇到这种compiler环境问 ...

  5. LoadRunner中 host-mapping的Capture Level说明

    lr录制后空白,那么就要弄明白lr中host-mapping的Capture Level选项socket level data.winnet level data.socket level andwi ...

  6. 初窥Java之二

    一.java中存在三大注释: 第一大注释:  单行注释   一般用于信息量比较少的地方 第二大注释:  多行注释   一般用于信息比较多的地方 多行注释注意事项:1.多行注释的开始行与结尾行不能写注释 ...

  7. TF:利用TF的train.Saver载入曾经训练好的variables(W、b)以供预测新的数据—Jason niu

    import tensorflow as tf import numpy as np W = tf.Variable(np.arange(6).reshape((2, 3)), dtype=tf.fl ...

  8. ASP.Net Core中使用jquery-ajax-unobtrusive替换Ajax.BeginForm

    在大潮流下,大家都在研究MVVM框架,但是做面向搜索引擎的外网项目还是得用服务器渲染. 在.Net中肯定就是用Razor模板引擎了. .Net Core断臂式重构后,很多在老得Mvc中使用得好好的一些 ...

  9. AspectJ 切面注解中五种通知注解:@Before、@After、@AfterRunning、@AfterThrowing、@Around

    https://blog.csdn.net/u010502101/article/details/78823056

  10. Linux下 niginx部署

    部署nginx   一.新建文件夹,给放文件     conf 二.写入主页文件   三.复制配置文件   四.修改配置文件80           五.修改media  六. pkill -9 ng ...