java第三讲课后动手动脑及代码编写
1.
类就是类型,对象就是这种类型的实例,也就是例子。类是抽象的东西,对象是某种类的实实在在的例子。例如:车是一个类,汽车,自行车就是他的对象。
对象的定义方法?
(1)对象声明:类名 对象名;
前者是原始数据类型,例如int,float之类的变量,定义一个原始类型的变量时,会马上给其分配内存。
后者是引用类型变量,“引用”一个对象的变量称为“引用类型”的变量,对象变量的初始化中,该变量若不引用一个真实的对象,则必须声明为null。而且引用对象后的对象变量,且如果不再使用此变量,将会回收类定义的对象所占用的内存。(对象变量)


答: 一般不可以。类似于字符串的比较大小,使用equals()进行比较,用法与其相同。当“==”施加于“原始数据类型”变量时,是比较变量所保存的数据是否相等。当“==”施加于引用类型变量时,是比较这两个变量是否引用同一对象。引用代表地址,所以当施加于引用类型变量时,实际上是比较两个引用类型变量中保存的对象地址是否一样。但是当对象进行赋值是可以判等的。
运行结果:
3.
答:“内容相等”,其实是就“对应字段值”一致。在JAVA中要比对两个对象的字段值,可以 重写基类的equals()方法;Object是Java的最顶层基类,其中定义了equals( )方法。
在java中要比较两个对象的字段值,可以重写(override)基类的equals()方法。
重写方法如下:
运行结果:
4.
答:这个方法没有返回值类型,而且和类名一样。
答:在一个类中若没有定义构造方法,依然可以创建一个无参数的对象,这是因为java编译器会自动为该类生成一个默认的构造方法,程序在创建对象时会自动调用默认的构造方法。默认的构造方法没有参数,在其方法体中也没有任何代码,即什么也不做。由于系统提供的默认的构造方法往往不能满足用户的需求,所以用户自己定义构造方法,一旦用户定义了构造方法,系统就不再提供默认的构造方法,这是Java的覆盖所致。所以上述定义的构造方法是有参数的赋值,定义的对象并没有,所以编译不能通过。
5.
答:当类成员指定的默认值写在了初始化块前边,初始化块说了算。反之,类成员定义时指定的默认值说了算。
对于类的构造函数,类的初始化块不接收任何参数,而且只要一创建类的对象,他们就会被执行(构造函数),因此适用于封装那些“对象创建时必须执行的代码”。
运行结果:
6.
首先,当静态初始化块和非静态的初始化块都存在时,各个类先执行静态初始化块。
创建子类型对象时,也会追寻到父类,使父类也执行静态初始化块。且首先执行父类的静态初始化块内容,接着执行子类的静态初始化块方法,直到所有子类的静态初始化块内容执行完成。再回到父类,查看非静态的初始化块和构造方法,如果有继续执行。父类的非静态初始化块和构造方法执行完毕在执行子类的。总之,每个类的静态初始化块先执行,执行完毕在执行各个类的非静态初始化块。
运行结果:
7.
答:可以先用new创建一个对象,通过对象去调用成员方法和变量。如图:
8.
在JAVA中,数据类型可分为两大种,基本数据类型(值类型)和类类型(引用数据类型)。基本类型的数据不是对象,所以对于要将基本数据类型当对象使用的情况,JAVA提供的包装类。
所谓装箱,就是把基本类型用他们相对应的引用类型包装起来,使他们可以具有对象的特质,如我们可以把int型包装成Integer类的对象,或者把double包装成Double等等。
所谓拆箱,就是跟装箱的方向相反,将Integer及Double这样的引用类型的对象重新简化为值类型的数据。
J2SE5.0后提供了自动装箱和拆箱的功能,此功能事实上是编译器来帮忙,编译器在编译时依照编写的方法,决定是否进行装箱或拆箱动作。
自动装箱的过程:每当需要一种类型的对象时,这种基本类型就自动的封装到与它相同类型的包装中。
自动拆箱的过程:每当需要一个值时,被装箱对象中的值就被自动的提取出来,没必要再去调用intValue()和doubleValue()方法。
自动装箱只需将该值赋给一个类型包装器引用,java会自动创建一个对象。例如:
Integer i = 100;
包装类(Wrapper Classes),拆箱和装箱
基本类型和对应的包装类可以相互装换:
由基本类型向对应的包装类转换称为装箱,例如把double包装成 Double 类的对象;
包装类向对应的基本类型转换称为拆箱,例如把 Integer 类的对象重新简化为 int。
但是:
为什么?
在java中,“==”是比较object的reference而不是value,自动装箱后,代表的都是Integer这个Object,因此“==”比较的是其引用。
java为了提高效率,IntegerCache类中有一个数字缓存了值从-128到127的Integer对象,当我们调用Integer.valueOf(int i)的时候,如果i的值是>=-128且<=127时,会直接从这个缓存中返回一个对象,否则就new一个Integer对象。所以结果2比较的是引用,两者属于两个对象,内存也不一样,理所当然返回false。
对于结果1,虽然比较的时候还是比较对象的引用,但是自动装箱时,java在编译的时候Integer i1 = 100;被翻译成Integer i1 = Integer.valueOf(100);关键就在于这个valueOf()的方法。
9.
源程序代码:
import java.util.*;
public class No3kelianxi
{
public static void main(String[] args)
{
System.out.println("输入要创建对象的个数");
Scanner reader=new Scanner(System.in);
int n=reader.nextInt();
demo[]expe=new demo[1000];
for(int i=0;i<n;i++)
{
expe[i]=new demo();
}
System.out.println("一共创建了"+demo.num+"个对象");
reader.close();
}
}
class demo
{
static int num;
static
{
num=0;
System.out.println("调用了静态初始化块!");
}
public demo()
{
num++;
}
}
运行结果:
java第三讲课后动手动脑及代码编写的更多相关文章
- java第二次课件课后动手动脑习题整理总结(2019年9月23号)
一.动手动脑 1 1.题目 2.程序源代码 package yang8; import java.util.Scanner; import java.util.Random; public class ...
- JAVA语法基础作业——动手动脑以及课后实验性问题 (八)
一.动手动脑 运行AboutException.java示例,了解Java中实现异常处理的基础知识. 1)源代码 import javax.swing.*; class AboutException ...
- java课堂第一次随机测试和课件课后动手动脑问题解决(2019-9-16 )
一.课堂测试 1.课堂测试:花二十分钟写一个能自动生成30道小学四则运算题目的 “软件” 要求 (1)减法结果不能为负数 (2)乘法结果不得超过一百,除法结果必须为整数 (3)题目避免重复: (4)可 ...
- JAVA方法03之动手动脑问题解决
动手动脑1.当JAVA里定义的函数中去掉static后,怎么办?(如下程序,将square()函数的static去掉) public class SquareIntTest { public stat ...
- Java类和对象动手动脑
动手动脑1 以下代码为何无法通过编译?哪儿出错了?
- 11.8java课后动手动脑
package 动手动脑; import javax.swing.*; class AboutException { public static void main(String[] a) { int ...
- Java文件与类动手动脑
动手动脑1: 使用Files. walkFileTree()找出指定文件夹下所有大于指定大小(比如1M)的文件. package classJava; import java.io.IOExcepti ...
- Java第一节课动手动脑
在第一节课的动手动脑中,主要解决四则运算问题. 首先第一个是出30道四则运算题目,在100以内.这个问题需要控制随机数生成的范围和结果的范围在100以内就可以. 第一次改进是3点:一为避免重复,二为定 ...
- 10.18号java课后动手动脑
问题一结论:类如果提供了一个自定义的构造方法,将导致系统不再提供默认构造方法. 问题二结论:(1)程序运行的结果是100和300,field=200为类的初始化块,可以在类中使用“{”和“}”将语句包 ...
随机推荐
- ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于Wi-Fi模块(ESP8266)AT指令TCP透传方式,MQTT通信控制升级(加入数据校验)
前言 这节演示下,上两节写的利用MQTT来控制STM32控制的程序 测试准备工作(默认访问我的服务器,改为自己的服务器,请看后面说明) 一,下载BootLoader程序(请自行下载) 首先BootLo ...
- [转]numpy的getA()/getA1()/getH()/getI()函数
转自https://blog.csdn.net/weixin_42906066/article/details/82625779 1.mat.getA() 将自身矩阵变量转化为ndarray类型的变量 ...
- 【新特性速递】CSS3动画增强
FineUIPro/Mvc/Core的下个版本(v6.1.0),我们对多个地方的CSS3动画进行了增强,使得用户体验更好. 1. 树控件启用EnableSingleExpand时,使得展开动画和折叠其 ...
- 物联网架构成长之路(43)-k8s从入门到放弃
0. 前言 这段时间要入门一下CI/CD了,以前简单的了解过Jenkins,现在要把以下的这个图的架构搭建起来.国外可能一两个命令就安装完成的事情,我折腾了2天多,真的差点放弃了. 1. 安装Virt ...
- 安装pip-9.0.1-py2.py3-none-any.whl
pip的安装 1.从https://pypi.python.org/pypi/pip#downloads下载所需的.whl文件 2.将下载的文件放入Python的根目录 我的根目录是F:\Python ...
- ThinkPHP 3.2 自定义基类 Model
ThinkPHP 提供了一个 Model 类,供其他的 Model 进行继承.Model 类中是 MVC 中的模型类,它是调用 持久层 的上层类.感觉这么描述问题很多,但是有什么办法呢?但是,这个 M ...
- Delta-wave HDU - 1030
Delta-wave HDU - 1030 A triangle field is numbered with successive integers in the way shown on the ...
- RabbitMQ如何保证消息99.99%被发送成功?
1. 本篇概要 RabbitMQ针对这个问题,提供了以下几个机制来解决: 生产者确认 持久化 手动Ack 本篇博客我们先讲解下生产者确认机制,剩余的机制后续单独写博客进行讲解. 2. 生产者确认 要想 ...
- C# 消息队列之 RabbitMQ 基础入门
Ø 简介 C# 实现消息队列的方式有很多种,比如:MSMQ.RabbitMQ.EQueue 等,本文主要介绍使用 RabbitMQ 实现消息队列的基础入门.包括如下内容: 1. 什么是消息队列? ...
- Filebeat和pipleline processor-不部署logstash,实现对数据的处理
利用ingest node所提供的Pipeline帮我们对数据进行处理. 在Elasticsearch中的配置文件elasticsearch.yml文件中配置:node.ingest: true in ...