目录
(2)创建第二个对象,执行上述操作,体会同一个类的不同对象之间的关系。
编写程序,声明一个method方法,在method方法提供m和n两个参数,方法中打印一个m*n的*型矩形,并计算该矩形的面积,将其作为方法返回值。
对象数组题目:定义类Student,包含三个属性:学号number(int),年级state(int),成绩score(int)。创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。
间题一:打印出3年级(state值为3)的学生信息。问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
第一题:
利用面向对象的编程方法,设计类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的)加载到堆空间中
③方法区存放的是类的加载信息,常量池,静态域