`
Scliu123
  • 浏览: 41373 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

JDK_实例(自定义形状类)

阅读更多

长方形

package book.oo;

public class PassParamter {

	public PassParamter() {
	}

	public void methodA(ComplexNumber comNum) {
		// comNum这个引用指向了一个新new出来的对象。
		comNum = new ComplexNumber(1, 2);
	}

	public void methodB(ComplexNumber comNum) {
		// comNum这个引用指向的还是同一个对象,但是,这里修改该对象的值。
		comNum.setRealPart(1);
		comNum.setRealPart(2);
	}

	public void methodC(int num) {
		// 将num的值加1
		num++;
	}

	public static void main(String[] args) {

		PassParamter test = new PassParamter();
		ComplexNumber comNum = new ComplexNumber(5, 5);
		System.out.println("调用methodA方法之前,comNum: " + comNum.toString());
		test.methodA(comNum);
		System.out.println("调用methodA方法之后,comNum: " + comNum.toString());
		System.out.println("调用methodB方法之前,comNum: " + comNum.toString());
		test.methodB(comNum);
		System.out.println("调用methodB方法之后,comNum: " + comNum.toString());
		int num = 0;
		System.out.println("调用methodC方法之前,num: " + num);
		test.methodC(num);
		System.out.println("调用methodC方法之后,num: " + num);

//		 调用methodA方法之前,comNum: 5.0 + 5.0i
//		 调用methodA方法之后,comNum: 5.0 + 5.0i
//		 调用methodB方法之前,comNum: 5.0 + 5.0i
//		 调用methodB方法之后,comNum: 2.0 + 5.0i
//		 调用methodC方法之前,num: 0
//		 调用methodC方法之后,num: 0

		/**
		 * Java的参数传递策略:
		 * 0,所谓传值的意思是:在调用方法时,将参数的值复制一份,方法里面用复件,方法外面用原件,复件改变了,不影响原件;原件改变了,不影响复件。
		 * 1,对于基本数据类型,比如int,long等类型,采用传值的策略。将参数的值复制一份后传给方法,方法可以改变参数值的复件,但不会改变参数值的原件。
		 * 2,对于对象类型,也采用的传值策略,不过,是将参数的引用复制(2个引用指向同一个对象)一份传给方法,方法可以改变参数引用的复件,但不会改变参数引用的原件。
		 * 
		 * 解释三个输出:
		 * 1,调用methodA方法时,首先将comNum对象的引用复制一份,将引用的复件传递给methodA方法,main方法保持引用的原件,此时,引用原件和引用复件都指向comNum对象。
		 * 执行comNum = new ComplexNumber(1,2);语句后,将引用复件指向了另外一个新的对象,此时,引用复件和引用原件指向的是不同的对象。回到main方法时,操作的仍然是引用原件指向的comNum对象。
		 * 2,调用methodB方法时,首先将comNum对象的引用复制一份,将引用的复件传递给methodB方法,main方法保持引用的原件,此时,有引用原件和引用复件都指向comNum对象。
		 * 执行comNum.setRealPart(1);comNum.setRealPart(2);语句后,修改了引用复件所指对象的内容,而此时,引用复件和引用原件指向的是同一个对象,因此,引用原件指向的对象的内容也改变了。回到main方法时,comNum对象也改变了。
		 * 3,调用methodC方法时,首先将num的值复制一份,将值的复件传递给methodC方法,main方法保持值的原件。 执行num
		 * ++;语句后,复件的值会加1。回到main方法时,操作的仍然是原件,值保持不变。
		 */

	}
}

 

三角形

package book.oo.shape;

/**
 * 三角形
 */
public class Triangle extends MyShape{

	//边a的长度
	private double sideA;
	//边b的长度
	private double sideB;
	//边c的长度
	private double sideC;
	//边长错误
	public static final String SIDEERR = "三角形的边长不能够小于0!";
	//不能构成三角形错误
	public static final String SHAPEERR = "三角形的二边之和必须大于第三边!";
	/**
	 *默认构造函数
	 */
	public Triangle(){
		init();
	}
	/**
	 * 用三条边构造一个三角形
	 * @param a	边a的边长
	 * @param b 边b的边长
	 * @param c 边c的边长
	 */
	public Triangle(double a, double b, double c){
		//如果给定的三条边能够组成三角形,便用给定的边长构成三角形
		if (isTrianglelegal(a, b, c)){
			this.sideA = a;
			this.sideB = b;
			this.sideC = c;
		} else {
			//否则,用默认值构造三角形
			init();
		}
	}
	/**
	 * 缺省的三角形
	 */
	private void init(){
		this.sideA = 3;
		this.sideB = 4;
		this.sideC = 5;
	}
	/**
	 * 判断三条边是否能够组成一个三角形
	 * @param a 边a的边长
	 * @param b 边b的边长
	 * @param c 边c的边长
	 * @return 布尔类型,如果能够组成三角形,便返回true,否则返回false
	 */
	private boolean isTrianglelegal(double a, double b, double c){
		//三条边的长度必须大于0
		if ((a <= 0) || (a <= 0) || (a <= 0)){
			System.err.println(SIDEERR);
			return false;
		} else if ((a + b < c) || (a + c < b) || (b + c < a)){
			//两边之和必须大于第三边
			System.err.println(SHAPEERR);
			return false;
		}
		return true;
	}
	public double getGirth() {
		return this.sideA + this.sideB + this.sideC;
	}
	public double getArea() {
		//根据海伦公式计算三角形的面积
		double s = (this.sideA + this.sideB + this.sideC) / 2;
		//利用Math.sqrt()方法进行开方运算
		return Math.sqrt(s * (s - this.sideA) * (s - this.sideB) * (s - this.sideC));
	}
	public String toString() {
		return "三角形的名字是:" + this.name + ", 它的三条边的边长分别是:" 
				+ this.sideA + ", " + this.sideB + ", " + this.sideC;
	}
	public double getSideA() {
		return sideA;
	}
	public void setSideA(double sideA) {
		//在设置边长的时候,依然要检测采用新的边长后,是否能够组成三角形。
		if (this.isTrianglelegal(sideA, this.sideB, this.sideC)){
			this.sideA = sideA;
		} 
	}
	public double getSideB() {
		return sideB;
	}
	public void setSideB(double sideB) {
		if (this.isTrianglelegal(this.sideA, sideB, this.sideC)){
			this.sideB = sideB;
		}
	}
	public double getSideC() {
		return sideC;
	}
	public void setSideC(double sideC) {
		if (this.isTrianglelegal(this.sideA, this.sideB, sideC)){
			this.sideC = sideC;
		}
	}
	public static void main(String[] args) {
		Triangle test = new Triangle();
		test.setName("myTriangle");
		System.out.println(test.toString());
		System.out.println("三角形的周长是:" + test.getGirth());
		System.out.println("三角形的面积是:" + test.getArea());
	}
}

 

 

自定义图形

package book.oo.shape;
/**
 * 自定义图形的基类
 */
public abstract class MyShape {
	/**图形的名字*/
	protected String name; //protected访问控制符表示只有本类和子类能够访问该属性。
	/**
	 * 抽象方法,获取形状的周长
	 */
	public abstract double getGirth();
	/**
	 * 抽象方法,获取形状的面积
	 */
	public abstract double getArea();
	/**
	 * 抽象方法,输出形状
	 */
	public abstract String toString();
	/**
	 * 获取图形的名字
	 * @return 返回图形的名字
	 */	
	public String getName(){
		return this.name;
	}
	/**
	 * 为图形设置名字
	 * @param name	要设置的图形的名字
	 */
	public void setName(String name){
		this.name = name;
	}
}

 

分享到:
评论

相关推荐

    Java JDK实例宝典

    4 自定义形状类 2. 5 类的加载顺序 2. 6 方法和变量在继承时的覆盖与隐藏 2. 7 排序类 2. 8 Singleton单例模式 2. 9 Factory工厂模式 2. 10 Adapter适配器模式 第3章 数字 3. 1 ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例185 自定义泛型化数组类 235 实例186 泛型方法与数据查询 236 实例187 泛型化方法与最小值 238 实例188 泛型化接口与最大值 239 实例189 使用通配符增强泛型 240 实例190 泛型化的折半查找法 241 第9章 编程常用...

    Java创建透明与任意形状窗口

    需要注意的是,透明窗口和自定义形状的窗口在不同的操作系统和Java版本上可能有不同的表现。在某些平台上,窗口的形状可能受到限制,而透明度则可能受到硬件加速的限制。因此,在实际应用中,需要对这些情况进行适当...

    java编程基础,应用与实例

    1.3 安装Java程序开发工具(JDK1.5) 2 1.3.1 安装JAVA 2 Standard Edition 1.5.0 3 1.3.2 安装开发文档及最终完成 5 1.3.3 Java开发工具 6 1.4 Java程序开发过程 7 1.5 运行第一个Java程序 7 1.6 巩固...

    Java开发技术大全(500个源代码).

    示例描述:本章演示如何开始使用JDK进行程序的开发。 HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载Applet的网页文件 第2章 ...

    ArcGIS for android实例

    1. **环境准备**:首先,你需要安装Android Studio,并确保你的开发环境已配置好Java Development Kit (JDK) 和Android SDK。Android Studio的插件管理器会自动安装必要的构建工具。 2. **添加依赖**:在项目的`...

    java显示3d

    开发者可以通过组合这些基本形状,或者自定义更复杂的几何形状,来构建所需的3D模型。 3. **Transformations**:为了控制3D对象的位置、旋转和缩放,Java 3D提供了变换节点。例如,`TransformGroup` 可以用来应用平...

    JAVA经典时钟程序,界面美观

    4. 在主类中创建JFrame实例,并添加自定义的时钟面板,设置无边框窗口(可以通过setUndecorated(true)实现)。 总的来说,这个"JAVA经典时钟程序"展示了Java GUI编程的多个方面,包括自定义组件绘图、线程管理和...

    Java软件开发实战 Java基础与案例开发详解 14-8 练习题 共6页.pdf

    `abstract`修饰符用于声明抽象类和抽象方法,抽象类不能被实例化,只能被继承。 #### 6.8 接口 接口是一种特殊的抽象类,只包含常量和抽象方法,用于定义一组行为规范。 ### 7. 面向对象的分析与设计 #### 7.1 ...

    自己总结的java笔记

    - **自定义异常类**:可以通过扩展 `Exception` 类来自定义异常类。 #### GUI - **概念**:图形用户界面。 - **容器**:用于存放其他组件的组件,如窗口、面板等。 - **布局管理**:用于控制组件在容器中的排列...

    Java3d交互式三维图形编程

    3. **几何形状**:学习如何创建基本的几何形状,如Box、Sphere和Cylinder,并了解如何自定义复杂的形状。 4. **变换**:应用旋转、平移和缩放变换到3D对象上,使场景中的物体能够动态移动和改变形状。 5. **光照与...

    java习题(20211007012756).pdf

    1. 学习如何使用Graphics类进行基本的图形绘制,如线条、形状和文本。 2. 理解Canvas和Panel组件,以及它们在图形绘制中的作用。 3. 掌握事件监听和处理,实现用户与图形的交互。 实验四:事件处理和图形化用户界面...

    BUAA软件学院大二Java大作业,仅使用JavaFX实现了一个Mario游戏.zip

    在JavaFX中,可以创建自定义的形状和图像,这对于游戏开发中的角色和环境设计非常关键。 对于马里奥游戏的实现,开发者可能使用了JavaFX中的Scene类来构建游戏场景,ImageView或Shape类来绘制马里奥、敌人、砖块等...

    飞机大战java

    对于更精确的碰撞检测,可能需要实现自定义的几何形状和碰撞算法。 在游戏的状态管理方面,可以使用状态机模式来设计。游戏有多个状态,如开始、游戏进行、暂停、结束等,每个状态对应一个类,状态之间的切换通过...

    Java自学PPT

    - **图形绘制**:使用Graphics类绘制线条、形状等。 - **颜色处理**:通过Color类设置颜色。 - **2D图形**:介绍Graphics2D类的高级图形处理功能。 #### 第6章:Java用户界面技术 - **用户界面组件**:学习Swing库...

    Java 编写的小型画板

    在这个小型画板项目中,开发人员可能主要使用了Swing库,因为它是Java标准版(JDK)的一部分,无需额外安装。Swing包含了一系列的组件类,如JFrame、JPanel、JButton、JColorChooser等,可以用来构建画板的基本结构...

Global site tag (gtag.js) - Google Analytics