//实验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. mac 下基于firebreath 开发多浏览器支持的浏览器插件

    mac 下基于firebreath 开发多浏览器支持的浏览器插件 首先要区分什么是浏览器扩展和浏览器插件;插件可以像本地程序一样做的更多 一. 关于 firebreath http://www.fir ...

  2. xcode引入第三方静态类库 duplicate symbol _OBJC_XXX 重复编译错误

    xcode引入第三方静态类库 duplicate symbol _OBJC_XXX 重复编译错误 一:场景 xcode 同时引入了 libA.a, libB.a 两个静态类库,如果 这两个静态类库之中 ...

  3. GRUB4DOS入门

    目 录 第1章 GRUB4DOS入门    1 1.1 用途    1 1.2 安装    1 1.2.1 修改MBR    1 1.2.2 修改PBR    3 1.2.3 DOS    4 1.2 ...

  4. CSS:static/relative/absolute

    static - default and this is the FLOW. ------------------------------------------------------------- ...

  5. 【LINUX】Linux学习小结

    ****xargs命令**** 当需要将参数列表转换成小块分段传递给其他命令时,可以使用xargs命令.栗子如下: 若想在启动lampp之后用kill方式杀掉全部的进程就可以用下面的命令: ps -e ...

  6. Java常用集合类详解

    在Java中有一套设计优良的接口和类组成了Java集合框架,使程序员操作成批的数据或对象元素极为方便.所有的Java集合都在java.util包中. 在编写程序的过程中,使用到集合类,要根据不同的需求 ...

  7. HDU----(4519)郑厂长系列故事——体检

    郑厂长系列故事——体检 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total S ...

  8. linux命令备份

    sort -t $'\t' gcc版本查看 gcc -v 红帽版本查看 cat /etc/redhat-release Linux Core Version  cat /proc/version

  9. Windows Store App 用户库文件操作

    (1)获取用户库位置 如果想要通过应用程序在用户库中创建文件,首先需要获得用户库中指定的位置,例如图片库.文档库等.这里值得注意的是,在获取用户库的位置之前,必须在Windows应用商店项目的清单文件 ...

  10. Excel VBA记录

    -----------快捷键---------- 函数等提示(默认):ctrl+j 注释:上单引号' 设置单元格为空可以用:empty/null -----------基础语法--------- 基本 ...