//实验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实验四》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. Alpha

    100% — FF95% — F290% — E685% — D980% — CC75% — BF70% — B365% — A660% — 9955% — 8C50% — 8045% — 7340% ...

  2. 使用分布式数据库集群做大数据分析之OneProxy

    一.十亿数据,轻松秒出 实时监控领域有两个显著的特点,一是数据来源很多而且数据量大,有来自监控摄像头.GPS.智能设备等:二是需要实时处理.我们的客户在做实时处理时,就遇到这样的问题.客户的某个数据表 ...

  3. VS2012更改项目编译后文件输出目录

    1.现在我的解决方案里有存在两个项目,分别是类库项目ClassLibrary1和控制台项目ConsoleApplication1,默认情况下当解决方案重新生成后,这两个项目所对应的编译后文件分别会存在 ...

  4. [maven] pom.xml 文件详解

    参考资料: http://blog.csdn.net/uohzoaix/article/details/7035307 http://www.cnblogs.com/qq78292959/p/3711 ...

  5. Ubuntu下配置和编译cpp-ethereum客户端

    Ethereum,中文翻译是“以太坊”,是一个公有区块链的开源项目.因为以太坊是基于P2P网络所以没有中心节点,所以用户仅安装Ethereum客户端即可连入Ethereum公共网络或者在自己的test ...

  6. 匹配session

    package dl.zhang.test.util; import java.io.IOException; import java.io.Reader; import org.apache.iba ...

  7. 如何在linux系统下面编译C++(写给小白)(-1)

    首先 , 对于redhat,openSuse来说 ,C/C++的编译器已经集成了 大多数应该使用的是Ubuntu ,Ubuntu只有gcc(一个编译C语言的编译器), 因此还需要使用命令apt-get ...

  8. Combinations [LeetCode]

    Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exampl ...

  9. Asp.net 解析json

    Asp.net Json数据解析的一种思路 http://www.cnblogs.com/scy251147/p/3317366.html http://tools.wx6.org/json2csha ...

  10. 采购订单限价(包含阶梯价)ME_PROCESS_PO_CUST

    为了能管控到钱财的每个环节,公司要求采购订单需要使用物料限价,当有报价低于先前的价格时,在采购订单保存时,更新最低限价 BADI:ME_PROCESS_PO_CUST process~item里做限价 ...