Java面向对象
类中属性的使用
属性(成员变量) vs 局部变量
1.相同点:
1. 定义变量的格式:数据类型 变量名 = 变量值
2. 先声明,后使用
3. 变量都有其对应的作用域
2.不同点:
1. 在类中声明的位置的不同
2. 属性;直接定义在类的一对{}内
3. 局部变量;声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量。
3.权限修饰符
属性:可以在声明属性时,指明其权限,使用权限修饰符
常用的权限修饰符:private、public、缺省、protected
局部变量:没有默认初始化值
- 意味着,我们在调用局部变量之前,一定要先进行赋值
- 形参在调用时,我们赋值即可。
void:使用void的表示没有返回值的意思
public void eat(){}
void类型表示没有返回值
public void sleep(int hour){}
表示没有返回值的int类型形参
public String getName(){}
String表示有返回值类型,无形参
public String getNation(String nation){}
String返回值类型和String类型形参
方法的声明:权限修饰符 返回值类型 方法名(形参列表){
方法体
}
返回值类型:有返回值 vs 没有返回值
- 如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中需要使用 return 关键字来返回指定类型的变量或常量
- 如果方法没有返回值,则方法声明时,使用 void 来表示。通常,没有返回值的方法中,就不用使用 return 。但是,如果使用的话,只能使用 “return”;表示结束此方法的意思。
练习题一
package day08;
public class ceshi {
String name;
// 定义String类型的name
int age;
// 定义int类型的age
/**
* sex : 1表明是男性
* sex : 2表明是女性
*/
int sex;
// 定义int类型的sex
public void Study() {
// 定义一个void返回值类型的方法变量名定义为study
System.out.println("studying");
}
public void showAge() {
System.out.println("age:"+age);
}
public int addAge(int i) {
// 定义一个int返回值类型的方法,并定义int类型的形参
age += i;
return age;
}
public static void main(String[] args) {
ceshi p1 =new ceshi();
// 下面是调用属性
p1.name = "王";
p1.age = 12;
p1.sex = 1;
// 下面是调用方法
p1.Study();
p1.showAge();
// 下面是重新定义一个变量进行重新赋值,并添加
int newAfe = p1.addAge(2);
System.out.println(p1.name+"的新年龄为:"+newAfe);
}
}
练习题二、
package day08;
//利用面向对象的编程方法,设计类Circle计算圆的面积
public class ceshi {
public static void main(String[] args) {
// 方法一
Circle c1 = new Circle();
c1.radius = 2.1;
double area = c1.findArea();
System.out.println("方法一:"+area);
// 方法二
c1.radius = 2.1;
c1.findAree();
}
}
//圆
class Circle{
// 属性
double radius;
// 求圆的面积
// 方法1. 有返回值
public double findArea(){
double area = 3.14 * radius * radius; //Math.PI == 3.14
return area;
}
// 方法2. 没有返回值
public void findAree() {
double area = Math.PI*radius*radius;
System.out.println("方法二:面积为:"+area);
}
}
练习三
package day08;
//问题一:打印一个十行八列的矩形
//问题二:计算矩形的面积,并作为返回值
//问题三:修改上一个程序,接收m和n两个参数,
//方法中打印m*n的*型矩形,并计算面积
public class ceshi {
public static void main(String[] args) {
// 通过造对象来调用 ceshi
ceshi c1 = new ceshi();
// 实现对象调用对象
// 第一题结果
c1.method();
// 分隔符
System.out.println("---_--_----__-----__----__--");
// 第二题结果
// 直接使用 “c1.methodd();”没有打印出结果,
// 这里使用一个变量进行接收并打印
// 做法1
// int arr= c1.methodd();
// System.out.println("面积为: "+arr);
// 做法二
System.out.println("面积为: "+c1.methodd());
// 分隔符
System.out.println("---_--_----__-----__----__--");
// 第三题结果
int arrr1 = c1.methoddd(12,10);
System.out.println("面积为: "+arrr1);
}
// 第一题
public void method() {
for(int i = 0;i < 10; i++) {
for(int j = 0;j<8;j++) {
System.out.print("* ");
}
System.out.println();
}
}
// 第二题
// 因第二题需要进行返回值,所以这里不能使用 void 关键词,
// 这里使用的是 int 返回值类型
public int methodd() {
for(int i = 0;i < 10; i++) {
for(int j = 0;j<8;j++) {
System.out.print("* ");
}
System.out.println();
}
return 10 * 8;
}
// 第三题
public int methoddd(int m,int n) {
for(int i = 0;i < m; i++) {
for(int j = 0;j<n;j++) {
System.out.print("* ");
}
System.out.println();
}
return m*n;
}
}
练习四
package day08;
//4. 对象数组题目: 定义类Student,包含三个属性:学号number(int),
//年级state(int),成绩 score(int)。 创建20个学生对象,学号为1到20,年级
//和成绩都由随机数确定。
//问题一:打印出3年级(state值为3)的学生信息。
//问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
//提示:
//1) 生成随机数:Math.random(),返回值类型double;
//2) 四舍五入取整:Math.round(double d),返回值类型long。
public class ceshi {
public static void main(String[] args) {
//声明Student类型的数组
xuesheng[] stus = new xuesheng[20];
for(int i = 0;i < stus.length;i++) {
// 给数组元素赋值
stus[i] = new xuesheng();
// 给xueseng对象的属性赋值
stus[i].number = (i+1);
// 年级:给学生的年级进行(1~6)之间随机数定义
stus[i].stuate = (int)(Math.random()*(6-1+1)+1);
// 成绩:给学生定义成绩在(1~100)之间的随机数定义
stus[i].score = (int)(Math.random()*(100-0+1));
}
// 遍历赋值之后的学生列表
for(int i=0;i<stus.length;i++) {
// System.out.println(stus[i].number+","+stus[i].stuate+","+stus[i].score);
System.out.println(stus[i].info());
}
System.out.println("******************************");
// 问题一:打印出3年级(state值为3)的学生信息
for(int i=0;i<stus.length;i++) {
if(stus[i].stuate == 3) {
System.out.println(stus[i].info());
}
}
// 问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
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) {
xuesheng temp = stus[j];
stus[j] = stus[j+1];
stus[j+1] = temp;
}
}
}
System.out.println("******************************");
//遍历学生数组
for(int i = 0;i < stus.length;i++) {
System.out.println(stus[i].info());
}
}
}
class xuesheng{
int number;//姓名
int stuate;//年级
int score;//成绩
// 定义一个显示学生信息的方法
public String info() {
return "学号:"+number+",年级:"+stuate+",成绩:"+score;
}
}
第四题优化
package day08;
//4. 对象数组题目: 定义类Student,包含三个属性:学号number(int),
//年级state(int),成绩 score(int)。 创建20个学生对象,学号为1到20,年级
//和成绩都由随机数确定。
//问题一:打印出3年级(state值为3)的学生信息。
//问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
//提示:
//1) 生成随机数:Math.random(),返回值类型double;
//2) 四舍五入取整:Math.round(double d),返回值类型long。
public class ceshi2 {
public static void main(String[] args) {
//声明Student类型的数组
xuesheng1[] stus = new xuesheng1[20];
for(int i = 0;i < stus.length;i++) {
// 给数组元素赋值
stus[i] = new xuesheng1();
// 给xueseng对象的属性赋值
stus[i].number = (i+1);
// 年级:给学生的年级进行(1~6)之间随机数定义
stus[i].stuate = (int)(Math.random()*(6-1+1)+1);
// 成绩:给学生定义成绩在(1~100)之间的随机数定义
stus[i].score = (int)(Math.random()*(100-0+1));
}
// 遍历赋值之后的学生列表
ceshi2 test = new ceshi2();
// 遍历学生数组
test.print(stus);
System.out.println("******************************");
// 问题一:打印出3年级(state值为3)的学生信息
test.searchState(stus,3);
// 问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
test.sort(stus);
System.out.println("******************************");
// 遍历学生数组
test.print(stus);
}
// 遍历xuesheng1[ ]数组操作
public void print(xuesheng1[] stus) {
for(int i=0;i<stus.length;i++) {
System.out.println(stus[i].info());
}
}
// 给xuesheng数组筛选
public void searchState(xuesheng1[] stus,int state) {
for(int i=0;i<stus.length;i++) {
if(stus[i].stuate == state) {
System.out.println(stus[i].info());
}
}
}
// 给xuesheng1数组排序
public void sort(xuesheng1[] 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) {
xuesheng1 temp = stus[j];
stus[j] = stus[j+1];
stus[j+1] = temp;
}
}
}
}
}
class xuesheng1{
int number;//姓名
int stuate;//年级
int score;//成绩
// 定义一个显示学生信息的方法
public String info() {
return "学号:"+number+",年级:"+stuate+",成绩:"+score;
}
}