面向对象(二)练习篇之对象数组问题

目录

第一题: 

利用面向对象的编程方法,设计类Circle计算圆的面积。

main函数

 类1的创建

类2的创建

第二题 

 (1)创建Person类的对象,设置该对象的name、age和sex属性,调用study方法,输出字符串“studying”,调用showAge()方法显示age值,调用addAge()方法给对象的age属性值增加2岁。

(2)创建第二个对象,执行上述操作,体会同一个类的不同对象之间的关系。

主函数:

类的创建:

问题三:

编写程序,声明一个method方法,在method方法提供m和n两个参数,方法中打印一个m*n的*型矩形,并计算该矩形的面积,将其作为方法返回值。

问题四:重难点

对象数组题目:定义类Student,包含三个属性:学号number(int),年级state(int),成绩score(int)。创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。

间题一:打印出3年级(state值为3)的学生信息。问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息

JVM内存结构: (概述)


第一题: 

利用面向对象的编程方法,设计类Circle计算圆的面积。

main函数

public class CircleText {
public static void main(String[] args) {
//实例化类
	Circle1 c1 = new Circle1();
//定义属性
	c1.r1 = 3;
//调用类1来计算圆的面积
	double mianJi = c1.findArea1();
	System.out.println(mianJi);//有返回值,新定义一个变量来接收返回值,然后输出变量
	
	System.out.println(c1.findArea1());//这样也行,相当于直接输出了方法中的返回值

//调用类2来计算圆的面积
	Circle2 c2 = new Circle2();
	c2.r2 = 2;
	c2.findArea2();//没有返回值,但是方法中就自带输出,调用方法就自己输出了
}
}

 类1的创建

package com.haiyu.exer;

public class Circle1 {
	double r1;
	
	public double findArea1() {
		double mianji = Math.PI * r1 * r1;
		return mianji;
	}
}

类2的创建

package com.haiyu.exer;

public class Circle2 {
	double r2;
	
	public void findArea2() {
		double mianJi = Math.PI * r2 * r2;
		System.out.println("面积为"+ mianJi);
	}
}

第二题 


 (1)创建Person类的对象,设置该对象的name、age和sex属性,调用study方法,输出字符串“studying”,调用showAge()方法显示age值,调用addAge()方法给对象的age属性值增加2岁。

(2)创建第二个对象,执行上述操作,体会同一个类的不同对象之间的关系。

主函数:

package com.haiyu.exer;

public class Person {
	String name;
	int age;
	/**
	 * sex为1是男性,sex为2是女性
	 */
	int sex;
	
	public void study() {
		System.out.println("studying");
	}
	
	public void showAge() {
		System.out.println("age :"+ age);
	}
	
	public int addAge(int i) {
		age += i;
		return age;
	}
}

类的创建:

package com.haiyu.exer;

public class Person {
	String name;
	int age;
	/**
	 * sex为1是男性,sex为2是女性
	 */
	int sex;
	
	public void study() {
		System.out.println("studying");
	}
	
	public void showAge() {
		System.out.println("age :"+ age);
	}
	
	public int addAge(int i) {
		age += i;
		return age;
	}
}

问题三:

编写程序,声明一个method方法,在method方法提供m和n两个参数,方法中打印一个m*n的*型矩形,并计算该矩形的面积,将其作为方法返回值。

//测试类:
public class Exer3Text {
public static void main(String[] args) {
	Exer3Text text1 = new Exer3Text();
	
	System.out.println(text1.method(5, 6));
	}

//定义类:
public int method(int m,int n) {
    //打印*矩形的方法
	for(int i =1;i<=m;i++) {
		for(int j =1;j <= n;j++) {
			System.out.print("* ");
		}
		System.out.println();
	}
	return m*n;
}
}

问题四:重难点

对象数组题目:
定义类Student,包含三个属性:学号number(int),年级state(int),成绩score(int)。
创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。

间题一:打印出3年级(state值为3)的学生信息。
问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息

注意:调用属性或方法时必须是一个对象实体来调用,在遍历数组时,那个stus[i]才是对象实体

public class StudentText2 {
public static void main(String[] args) {
	//声明一个Student类型的数组
	Student1[] stus = new Student1[20];
	
	for(int i = 0;i < stus.length;i++) {
		//给数组元素赋值
		stus[i] = new Student1();
		//给对象的属性赋值
		stus[i].number = i+1;
		//年级:[1,6]
		stus[i].state = (int)(Math.random()*(6-1+1)+1);
		//成绩:[0,100]
		stus[i].score = (int)(Math.random()*(100-0+1));
	}
	

	StudentText2 text1 = new StudentText2();
	
	System.out.println("问题一:");
	//间题一:打印出3年级(state值为3)的学生信息。
	text1.searchState(stus, 4);
	
	System.out.println("问题二:");	
	//问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
	text1.sort(stus);
	//遍历数组
	text1.print(stus);
	
}
/**
 *  遍历Student1[]的方法
 * @param stus
 */
public void print(Student1[] stus) {
	for(int i=0; i< stus.length;i++) {
		System.out.println(stus[i].info());
	}
}
/**
 * 查找指定年级的学生的方法
 * @param stus
 * @param state
 */
public void searchState(Student1[] stus,int state) {
	for(int i=0; i< stus.length;i++) {
		if(stus[i].state == state) {
			stus[i].san();
		}
	}
}
/**
 * 使用冒泡排序按学生成绩排序
 * @param stus
 */
public void sort(Student1[] stus) {
	for(int i = 0;i < stus.length-1;i++) {
		for(int j = 0;j < stus.length - 1 -i; j++) {
			//从高到低排序
			if(stus[j].score < stus[j+1].score) {  
				//这里交换的是数组中的元素,即学生,而不是交换学生的成绩
				Student1 temp= stus[j];;
				stus[j] = stus[j + 1];
				stus[j+1] = temp;
			}
		}
	}
}
}

//定义类
class Student1{
	//属性:
	int number;//学号
	int state;//年级
	int score;//成绩
	
	//方法:
	//遍历数组Student1的方法
	
	//显示学生信息的方法
	public String info() {
		return "学号:" + number + "年级:" + state + "成绩:" + score;
	}
	
	//打印三年级学生信息方法
	public void san() {
		System.out.println("学号:" + number + "年级:" + state + "成绩:" + score);
	}

}

JVM内存结构: (概述)

JVM内存结构:
编译完源程序以后,生成一个或多个字节码文件。
我们使用JVM中的类的加载器和解释器对生成的字节码文件进行解释运行。意味着,需要将
字节码文件对应的类加载到内存中,涉及到内存解析。《JVM规范》

①虚拟机栈就是平时提到的栈结构,我们将局部变量存储到虚拟机栈中
②堆,我们将new出来的结构(比如:数组,对象)存放在堆中。对象的属性(非static的)加载到堆空间中
③方法区存放的是类的加载信息,常量池,静态域

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java塑造中...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值