java的对象的使用
属性(成员变量) VS 局部变量
相同点:
定义变量的格式:数据类型 变量名 = 变量值
先声明再使用
变量都有对应的作用域
不同点:
2.1在类中声明的位置不同
属性:直接定义在类的一对{}中
局部变量:声明在方法内部、方法形参、代码块内、构造器内部的变量、构造器形参
2.2权限修饰符的不同
属性:可以在声明属性时,指明其权限,使用权限修饰符
常用的修饰权限修饰符:private、public、缺省、protect -->具有封装
局部变量:不使用权限修饰符,只有final
2.3默认初始化值得情况:
属性:类的属性,根据其类型,都有默认的初始化值
整型(byte、short、int、long):0
浮点型(float、double):0.0
字符型(char):0(或:’\u0000’)
布尔型(Boolean):false
引用数据类型(类、数组、接口):null
方法:
关于使用方法的修饰权限符:public 、private、protect、缺省;
对于在声明时指定方法的返回值类型,需要有一个return返回一个指定类型的变量或常量,如果该方法没有返回值在声明时需要使用void来表示,通常没有返回值得方法不使用return,使用return即表示结束该方法。
根据要求或者是经验来判断方法是否需要返回值。
方法名属于标识符,需要见名知意(小驼峰);
形参列表,方法可以声明0-n个形参,形参只有声明没有值,值在调用的时候传入。
定义方法时的形参需要根据要求或经验来判断是否需要形参具体问题具体分析。
方法体是方法的功能的提现。
声明方法:
权限修饰符 返回值类型(无返回值为void) 方法名(形参列表){
方法体
}
方法外使用方法通过对象去调用,类中方法可以调用当前类的属性或方法。
package question;
/*
* 定义类Student,包含三个属性,学号number(int),年级state(int),成绩score(int)
* 创建20个学生对象,学号1-20,年级和成绩有随机数确定,
* Q1:打印出3年级(state=3)的学生信息
* Q2:使用冒泡排序按学生成绩排序,并遍历所有学生信息
* 生成随机数:Math.random(),返回值double;
*
* */
public class StudentArrayTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student s1 = new Student();
s1.createInfo();
s1.info();
s1.bubbleSortScore();
s1.info();
s1.state3();
}
}
class Student{
//属性
int number;//学号
int state;//年级
int score;//成绩
Student [] stus = new Student[20];
//生成学生成绩年级信息
public void createInfo() {
for (int i = 0;i < stus.length;i++) {
stus[i] = new Student();
stus[i].number = (i+1);
stus[i].state = (int)(Math.random()*(6-1+1)+1);
stus[i].score = (int)(Math.random()*(100-1+1)+1);
}
}
//打印学生成绩、年级信息
public void info() {
for (int i=0;i<stus.length;i++) {
System.out.print("学号:"+stus[i].number);
System.out.print(" 年级:"+stus[i].state);
System.out.println(" 成绩:"+stus[i].score);
}
}
//打印年级为3的学生的信息
public void state3() {
System.out.println("学生年级为3的学生信息:");
for(int i = 0;i < stus.length;i++) {
if (stus[i].state == 3 ) {
System.out.print("学号:"+stus[i].number);
System.out.print(" 年级:"+stus[i].state);
System.out.println(" 成绩:"+stus[i].score);
}
}
}
//学生按成绩排序
public void bubbleSortScore() {
for (int i = 0;i < stus.length;i++) {
for (int j = 0;j < stus.length-i-1;j++) {
if(stus[j].score > stus[j+1].score) {
//交换学生对象
Student step = stus[j];
stus[j] = stus[j+1];
stus[j+1] = step;
}
}
}
System.out.println("学生成绩已排好!");
}
}
对象数组内存解析: