今天继续了数组的学习,对数组的内存方面和算法方面进行了一个复习吧。
数组在内存方面确实很重要,很经典的例子:
int [] a = new int[]{1,2,3};
int [] b = new int[3];
b = a;
b[0] = 0;
system.out.println(a[0]+" "+b[0]);
结果是0 0;
原因是a和b都代表了地址,a数组的地址给了b,在栈中有a和b两个变量,但在堆中只有一个数组,a与b只是指向同一个数组而已,所以改变b数组就是改变了堆中唯一一个数组,a也指向那个数组,所以a也会改变
之后开始面向对象
面向对象:
三条主线:
1.Java类及类的成员:属性、方法、构造器;代码块、内部类
2.面向对象的三大特征:封装性、继承性、多态性、(抽象性)
3.其他关键字:this、super、static、final、abstract、interface、package、import
样例:
class Person{
String name;
public void eat(){
system.out.println("");
}
}
Java中数据成员的访问权限,每一个数据成员前写明,没有写明就是缺省
//*************
随机数 (数据类型,默认为double)(Math.random()*((max-min+1)+min))
括号不能省略
面向对象中数据成员的定义的权限都要单独在前面写清
此处声明:Java的对象数组必须实例化,即在定义之后还需要new 变量名();
用类创建数组是创建了指针,指针并没有指向任何东西;还需要实例化,与类套上关系。
/************************************/
试验代码
public class Array_class {
public static void main(String[] args) {
Student [] std = new Student[20];
for(int i=0;i<20;i++)
{
std[i] = new Student();
std[i].num = (int)(Math.random() * ((20-1+1)+1));
std[i].state = (int)(Math.random() * ((6-1+1)+1));
std[i].score = (int)(Math.random()*((100-0+1)+1));
std[i].output3();
}
}
}
class Student{
int num;
int state;
int score;
public void output()
{
System.out.println("number:"+num);
System.out.println("state:"+state);
System.out.println("score:"+score);
System.out.println();
}
public void output3()
{
if(state==3)
output();
}
}