第三次课堂实验

Java字段初始化的规律:

代码

package demo;

public class InitializeBlockDemo

{

/**

* @param args

*/

public static void main(String[] args)

{

InitializeBlockClass obj=new InitializeBlockClass();

System.out.println(obj.field);

obj=new InitializeBlockClass(300);

System.out.println(obj.field);

}

}

class InitializeBlockClass

{

//下面这句在初始化块之前与之后,会影响到field字段的初始值

//public int field=100;

{

field=200;

}

public int field=100;

public InitializeBlockClass(int value){

this.field=value;

}

public InitializeBlockClass(){

}

}

注意这是Java字段是放在public int field=100;

之前的。

运行结果截图

如果把Java字段初始化和public int field=100;

调换一下位置的话,其原代码如下:

package demo;

public class InitializeBlockDemo

{

/**

* @param args

*/

public static void main(String[] args)

{

InitializeBlockClass obj=new InitializeBlockClass();

System.out.println(obj.field);

obj=new InitializeBlockClass(300);

System.out.println(obj.field);

}

}

class InitializeBlockClass

{

//下面这句在初始化块之前与之后,会影响到field字段的初始值

//public int field=100;

public int field=100;

{

field=200;

}

public InitializeBlockClass(int value){

this.field=value;

}

public InitializeBlockClass(){

}

}

运行结果如图

因此Java字段初始化的规律是按顺序进行,即字段初始化和局部变量初始化哪个靠后就以哪个为准。

1.当多个类之间有继承关系时,创建子类对象会导致父类初始化的执行。 静态 方法可以继承,而且可以在子类中覆盖! 静态 不能继承。

2.源代码:

package demo;

class Root

{

static{

System.out.println("Root的 静态 初始化块");

}

{

System.out.println("Root的普通初始化块");

}

public Root()

{

System.out.println("Root的无参数的构造器");

}

}

class Mid extends Root

{

static{

System.out.println("Mid的 静态 初始化块");

}

{

System.out.println("Mid的普通初始化块");

}

public Mid()

{

System.out.println("Mid的无参数的构造器");

}

public Mid(String msg)

{

//通过this调用同一类中重载的构造器

this();

System.out.println("Mid的带参数构造器,其参数值:" + msg);

}

}

class Leaf extends Mid

{

static{

System.out.println("Leaf的 静态 初始化块");

}

{

System.out.println("Leaf的普通初始化块");

}

public Leaf()

{

//通过super调用父类中有一个字符串参数的构造器

super("Java初始化顺序演示");

System.out.println("执行Leaf的构造器");

}

}

public class TestStaticInitializeBlock

{

public static void main(String[] args)

{

new Leaf();

}

}

程序运行截图

父类的初始化快会随着子类对象的创建而被调用。父类的构造函数也会随着子类对象的创建而被调用。调用的顺序为,先调用 静态 初始化块,再调用初始化块,最后调用构造函数。在调用这三块的时候,又是按照先调用父类的再调用子类的顺序来完成的。

  1. 静态 方法访问非 静态 变量:

程序源代码:

package test;

public class TestStaticWay

{

public static void main(String args[])

{

Second s = new Second();

s.show();

}

}

class Second

{

int a;

static void show()

{

Second m = new Second();

System.out.println(m.a);

}

}

程序运行截图

在Java的语法里面, 静态 的方法是不能直接访问非 静态 的成员变量的,要想访问非 静态 的成员变量,只能是在方法体里面创建一个对象实例,即使用new关键字来创建一个对象实例,通过这个对象实例来完成对非 静态 成员变量的访问。

种整形的包装类Byte,Short,Integer,Long,Character的对象,在值小于127时可以使用常量池。

源代码及其注释:

package test;

public class StrangeCode

{

public static void main(String[] args)

{

Integer i1=100;

Integer j1=100;

//从常量池当中取数字,是对常量池当中的同一个对象进行操作。所以比较结果为true

System.out.println(i1==j1);

Integer i2=128;

Integer j2=128;

//在堆空间里面创建了两个不同的对象,他们的地址不同,输出的结果为false

System.out.println(i2==j2);

}

}

4.创建一个类,能够随时显示这个类当前的对象的个数

源代码:

package test;

public class TestCreatea

{

static int a = 0;

public TestCreatea()

{

a++;

System.out.println("当前该类的对象的个数为" + a + "个");

}

public static void main(String args[])

{

TestCreatea t = new TestCreatea();

}

}

程序运行结果截图

程序设计思想:

在类体里面创建一个  静态 常量 a,用来记录对象的个数,初始值为0,然后在写一个构造函数,构造函数的语句为输出对象的个数和a++。构造函数是随着对象的创建而自动调用的,所以每创建一个对象就能显示出当前对象的个数。

时间: 2024-12-22 15:09:11

第三次课堂实验的相关文章

1203 实验三 进程调度模拟实验

实验三 进程调度模拟实验 物联网工程   张学玲  201306104140 一.        实验目的        用高级语言完成一个进程调度程序,以加深对进程的概念及进程调度算法的理解. 二.        实验内容和要求 实验内容 完成两个算法(简单时间片轮转法.多级反馈队列调度算法)的设计.编码和调试工作,完成实验报告. 1) 每个进程有一个进程控制块(PCB)表示.进程控制块包含如下信息:进程名.优先级.到达时间.需要运行时间.已用CPU时间.进程状态等等. 2) 每个进程的状态可

第三周课堂笔记请上传

第三周课堂笔记提交地址: https://edu.cnblogs.com/campus/bjgygd/EIE15-1Computersoftwaretechnologyfoundation/homework/316

三次握手实验报告

网络运维 TCP三次握手 实验报告姓名: 李军 班级: NTD1710 日期: 2017 年 1 月 4 日实验任务 任务:用科来网络分析系统表示TCP三次握手的原理思路及实验步骤 首先打开科来网络分析系统并安装启动登录远程桌面登陆同桌的主机然后在科来网络系统里面查看三次握手的信息 第一次握手主机A给主机B发送一个请求包:SYN里面包含我的请求1 和 我所期望B回我的包2 第二次握手主机B给主机A回了一个确认包:里面包含你所期望的包:2,和我想给你发的包3,还有我所期望你回复我的包:4. 第三次

新入手体验:三个小实验

新入手体验:三个小实验 一:一个LED闪烁 控制要求:1个LED灯,每隔50ms闪烁一次 实物连接图: 控制代码: 1 //2018.6/11 2 3 int LED = 10;//定义数字接口10,对应 4 5 void setup() 6 7 { 8 9 pinMode(LED,OUTPUT);//设置数字10 口为输出接口,Arduino 上我们用到的I/O 口都要进行类似这样的定义. 10 11 } 12 13 14 15 void loop() //死循环体 16 17 { 18 19

算法第三章上机实验

算法第三章上机实验 数字三角形 给定一个由 n行数字组成的数字三角形如下图所示.试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大. #include <iostream> using namespace std; int maxsum(int a[100][100],int n){ int b[100][100]={0}; for(int i=n-1;i>=0;i--){ for(int j=i;j>=0;j--){

实验三ShellShock 攻击实验

次旺巴 一. 实验描述 2014年9月24日,Bash中发现了一个严重漏洞shellshock,该漏洞可用于许多系统,并且既可以远程也可以在本地触发.在本实验中,学生需要亲手重现攻击来理解该漏洞,并回答一些问题. 二. 预备知识 1. 什么是ShellShock? Shellshock,又称Bashdoor,是在Unix中广泛使用的Bash shell中的一个安全漏洞,首次于2014年9月24日公开.许多互联网守护进程,如网页服务器,使用bash来处理某些命令,从而允许攻击者在易受攻击的Bash

实验三 进程调度模拟实验

13物联网      201306104107      黄鸿佳 1. 目的和要求 实验目的   13物联网      201306104107      黄鸿佳 用高级语言完成一个进程调度程序,以加深对进程的概念及进程调度算法的理解. 实验要求 设计一个有 N(N不小于5)个进程并发执行的进程调度模拟程序. 进程调度算法:“时间片轮转法”调度算法对N个进程进行调度. 2. 实验内容 完成两个算法(简单时间片轮转法.多级反馈队列调度算法)的设计.编码和调试工作,完成实验报告. 1) 每个进程有一

实验三 ShellShock 攻击实验

ShellShock 攻击实验 沙雨济 一. 实验描述 2014年9月24日,Bash中发现了一个严重漏洞shellshock,该漏洞可用于许多系统,并且既可以远程也可以在本地触发.在本实验中,学生需要亲手重现攻击来理解该漏洞,并回答一些问题. 二. 预备知识 1. 什么是ShellShock? Shellshock,又称Bashdoor,是在Unix中广泛使用的Bash shell中的一个安全漏洞,首次于2014年9月24日公开.许多互联网守护进程,如网页服务器,使用bash来处理某些命令,从

三次Java实验整理汇报:

*第一节 eclipse操作,建Javaproject项目(可直接用中文名命名)->建包与类(名字相同) ->public static void main(String[] args){ } 同一个项目里可有多个包 从控制台输入变量:run configurations 引用import写在package之后,class之前: 引用目前已经接触的几种: import java.util.*; ------Scanner sc=new Scanner(System.in);int a=int