《Java实验四》
//实验4--附录一代码
public class PassValueTest
{
//静态代码块,类一加载就执行的部分。
//所以运行这个程序会输出 class loding
static {
System.out.println("class loding");
}
public static void main(String[] args){ }
}
//实验4--附录二代码 /*
所有解释体现在代码中的注释中。
*/
public class PassValueTest
{
private int i = -100; //定义一个私有的成员变量i,初值是-100. //定义一个test1方法,参数类型是整形,功能是给局部变量b赋值为100.
public void test1(int b)
{
b = 100;
} //定义一个test2方法,参数是类PassValueTest类型的引用变量,功能是修改私有
//变量i的值为100.
public void test2(PassValueTest b)
{
b.i = 100;
} //定义一个test3方法,参数是类PassValueTest类型的引用变量,功能是把本对象的私有
//成员变量赋值给局部类类型的变量b。
public void test3(PassValueTest b)
{
b = this;
} //定义主函数。
public static void main(String[] args)
{
//创建一个类PassValueTest的对象。
PassValueTest obj = new PassValueTest(); //定义一个整形变量temp,赋值为100.
int temp = 100; //调用成员方法test1,并对方法中的局部整形变量赋值为100.
obj.test1(temp);
System.out.println(temp); //调用成员方法test2,并修改其成员变量i的值为100.
obj.test2(obj);
System.out.println(obj.i); //修改私有成员变量i的值为100.
obj.i = 100;//这句代码对吗?哦哦,对,因为是在一个类中访问的。 //创建一个类PassValueTest的对象。
PassValueTest newobj = new PassValueTest();
//调用成员方法test3,并把当前对象的私有成员变量i的值(为-100)赋给局部类类型
//的变量b
newobj.test3(newobj);
System.out.println(newobj.i);
}
}
////实验4--附录三代码
/*
问题如下:
编译如下代码,分析结果;将“注释这行”所在的行注释,再将
注释的call2方法和main方法中的“StaticTest.call2(obj);”方
去掉注释,再次编译,观察结果分析其原因。 回答如下:
(1)在没有去掉注释之前进行编译,会发生如下错误:
========================================================================
StaticTest.java:13: 错误: 无法从静态上下文中引用非静态 方法 nonstaticmethod()
nonstaticmethod();//注释这行.
^
1 个错误
===========================================================================
这个错误说明:在用类名直接调用静态方法时可以的,但在此例中(没有去掉代码中的注释),
直接用类名调用了call1方法(StaticTest.call1();)但是在call1方法中有调用到了静态的
staticmethod()方法,这是没错的,但是在call1方法中又调用了非静态的nonstaticmethod
方法。此时编译器出现报错提示如上。
从而也就是说:静态的方法可以有类名直接调用,非静态的方法不能有类名调用。 (2)按照题目要求的做法后,在编译不会出现问题;
运行结果是:
静态方法被调用
非静态方法被调用
非静态方法被调用 分析运行结果如下:
首先在主函数中创建了一个StaticTest类的对象obj,然互直接由类名调用静态方法
call1,在call1方法中又调用到了静态的staticmethod方法,然后输出(1)“静态方法被调用”。
接着用类名直接调用了静态的方法call2,并把对象obj传递给静态方法的形式参数o1.在
静态的call2方法中,传递过来的对象调用了非静态的方法nonstaticmethod,此时便打印输出
了(2)“非静态方法被调用”,紧接着又在静态的call2方法中创建了一个本类对象o2,然后用o2对象
也调用了非静态的方法nonstaticmethod.便输出了(3)“非静态方法被调用” 从以上分析(和自己在代码中的测试)来看:可以总结的是,静态方法可以由类名直接调用,
也可以由对象调用,而非静态的方法只能由对象调用 */ public class StaticTest
{
public static void call1()
{
staticmethod();
//nonstaticmethod();//注释这行.
} public static void call2(StaticTest o1)
{
o1.nonstaticmethod();
/*
*o1.staticmethod();
*这一句是测试用的,是用于测试静态的方法也能由对象直接调用
*如果加上这一句,编译运行都没有错,运行的结果是:
* 静态方法被调用
* 非静态方法被调用
* 静态方法被调用
* 非静态方法被调用
*则说明了静态的方法也能被对象直接调用。
*/
StaticTest o2 = new StaticTest();
o2.nonstaticmethod();
} public void nonstaticmethod()
{
System.out.println("非静态方法被调用");
} public static void staticmethod()
{
System.out.println("静态方法被调用");
} public static void main(String[] args)
{
StaticTest obj = new StaticTest();
StaticTest.call1();
StaticTest.call2(obj);
}
}
//实验四---第三题:
class Circle
{
private final double PI = 3.14;
private double radius;
private double area;
private double length; Circle(){}
//构造函数
Circle(double radius)
{
this.radius = radius;
}
//设置圆半径
public void setRadius(double radius)
{
this.radius = radius;
}
//获取圆半径
public double getRadius()
{
return radius;
} //求圆的面积
public double getArea()
{
area = PI*radius*radius;
return area;
} //求圆的周长
public double getLength()
{
length = 2*PI*radius;
return length;
} public void print()
{
System.out.println("圆的半径="+getRadius()+"圆的面积="+getArea()+"圆的周长="+getLength());
} public static void main(String[] args)
{
Circle c1 = new Circle();
c1.setRadius(1);
//c1.getArea();
//c1.getLength();
c1.print(); Circle c2 = new Circle(100);
c2.print();
}
}
//实验四---第四题:
public class MyDate
{
//成员变量:
private int year;
private int month;
private int day;
private boolean leap; //构造函数
MyDate(){} MyDate(int year,int month,int day)
{
this.year = year;
this.month = month;
this.day = day;
} private void setYear(int year)
{
this.year = year;
}
private int getYear()
{
return year;
} private void setMonth(int month)
{
this.month = month;
}
private int getMonth()
{
return month;
} private void setDay(int day)
{
this.day = day;
}
private int getDay()
{
return day;
} //判断是否是闰年。
public boolean isRunyear(int year)
{
if(year%4==0){
if(year%100==0){
if(year%400==0)
leap = true;
else
leap = false;
}
else
leap = true;
}
else
leap = false;
return leap;
} //计算输入的xx年xx月xx日是本年的第几天。
public int f()
{
int sum=0;
switch(month)
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:System.out.println("data error!");break;
}
sum+=day;
boolean l = isRunyear(year);
if(l && month>2)
sum++;
return sum;
}
//打印相关信息。
public void print(boolean l)
{
if(l)
System.out.print(year+"是闰年 ");
else
System.out.print(year+"不是闰年 ");
System.out.println(year+"/"+month+"/"+day+"是这一年的第"+f());
} public static void main(String[] args)
{
MyDate d1 = new MyDate();
d1.setYear(2012);
d1.setMonth(10);
d1.setDay(1);
int x = d1.getYear();
boolean y = d1.isRunyear(x);
d1.print(y); System.out.println("=======================================");
MyDate d2 = new MyDate(2009,4,1);
int n = d2.getYear();
boolean m = d2.isRunyear(n);
d2.f();
d2.print(m);
}
}
《Java实验四》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- Alpha
100% — FF95% — F290% — E685% — D980% — CC75% — BF70% — B365% — A660% — 9955% — 8C50% — 8045% — 7340% ...
- 使用分布式数据库集群做大数据分析之OneProxy
一.十亿数据,轻松秒出 实时监控领域有两个显著的特点,一是数据来源很多而且数据量大,有来自监控摄像头.GPS.智能设备等:二是需要实时处理.我们的客户在做实时处理时,就遇到这样的问题.客户的某个数据表 ...
- VS2012更改项目编译后文件输出目录
1.现在我的解决方案里有存在两个项目,分别是类库项目ClassLibrary1和控制台项目ConsoleApplication1,默认情况下当解决方案重新生成后,这两个项目所对应的编译后文件分别会存在 ...
- [maven] pom.xml 文件详解
参考资料: http://blog.csdn.net/uohzoaix/article/details/7035307 http://www.cnblogs.com/qq78292959/p/3711 ...
- Ubuntu下配置和编译cpp-ethereum客户端
Ethereum,中文翻译是“以太坊”,是一个公有区块链的开源项目.因为以太坊是基于P2P网络所以没有中心节点,所以用户仅安装Ethereum客户端即可连入Ethereum公共网络或者在自己的test ...
- 匹配session
package dl.zhang.test.util; import java.io.IOException; import java.io.Reader; import org.apache.iba ...
- 如何在linux系统下面编译C++(写给小白)(-1)
首先 , 对于redhat,openSuse来说 ,C/C++的编译器已经集成了 大多数应该使用的是Ubuntu ,Ubuntu只有gcc(一个编译C语言的编译器), 因此还需要使用命令apt-get ...
- Combinations [LeetCode]
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exampl ...
- Asp.net 解析json
Asp.net Json数据解析的一种思路 http://www.cnblogs.com/scy251147/p/3317366.html http://tools.wx6.org/json2csha ...
- 采购订单限价(包含阶梯价)ME_PROCESS_PO_CUST
为了能管控到钱财的每个环节,公司要求采购订单需要使用物料限价,当有报价低于先前的价格时,在采购订单保存时,更新最低限价 BADI:ME_PROCESS_PO_CUST process~item里做限价 ...