1、什么是对象?什么是类?类和对象有什么关系?
//对象是数据的封装,是类的具体体现;类是具有相同属性、行为的对象的集合。
2、属性如何创建?属性有什么特点?属性如何访问?
//属性通过类创建,不加static;访问:变量名.属性
3、静态变量如何创建?静态变量有什么特点?静态变如何访问?
public static 类型 变量名;静态变量所有成员共享,可以使用类名.属性 或者 变量名.属性;静态方法在成员属性之前加载,所以不能调用
4、对象在内存中如何存放?
对象是存放的具体地址,基本数据直接存放数据。
5、什么是null?对象如何销毁?
null是指数值为空,对象没有被变量指向,而销毁。
6、什么包?包有什么作用?
包是相同类的集合,可以做到信息的隐藏
7、根据代码画出内存图,并说出结果
public class Student {
public int code;
}
public class Test {
public static void main(String[] args) {
int x = 4;
Student s1 = new Student();
Student s2 = new Student();
s1.code = 8;
s2.code = 3;
test(s1,s2,x);
System.out.println(s1.code+" "+s2.code+" "+x);
}
//传参的时候,先把三个形参画出来,并注意,传参的方式。
public static void test(Student s2,Student s1,int x){
s1.code = 2;
s2.code = 5;
s2 = s1;
s1.code = s2.code;//这是一句废话,自己赋值给自己
s1 = new Student();
s1.code = 10;
s2.code = 7;
x = 15;
}
}
方法的重载
重载是发生在一个类中的。两个方法的方法名相同,参数列表不同(参数类型、个数、顺序),和返回类型无关,根据方法的参数来决定调用哪个重载方法。
// public void look(int a){},例如一个有返回,一个没返回,会报错,不形成重载
// public int look(int b){}
// public int look(String a){};=public int look_String(){},这是重载方法在内存中的编译形式
构造方法
构造方法的方法名和类名相同,没有返回类型。利用构造方法,我们可以产生该类的对象。
作用:
1.为对象分配空间;
2.初始化成员变量;如果声明一个对象之后直接打印的话,会打印出空和0
3.返回该对象的引用,构造方法会产生一个返回,来返回对象的引用,再赋值给新的变量接收,比如
在一个类中,虚拟机会默认定义一个构造方法:public Man(){}
在其他类中,引用该类Man m = new Man();
1.如果
4.如果一个类没有定义构造方法,虚拟机会
默认分配一个 无参 构造方法给该类。如果一个类定义了构造方法,默认的无参构造方法就会消失。构造方法在产生对象时调用。
通常使用构造方法做一些初始化动作。
静态方法和this不能同时使用
构造方法便捷初始化对象属性,构造方法重载,this的查找优先级。
public class Stu_reload {
//这是一个构造方法重载文件
public String name ="x";
public int age;
public String tel;
/***
* 这是一个构造方法初始化效果,归根到底是合理利用(this.属性=形参)的方式,进行传参
* @param name
* @param age
* @param tel
*/
public Stu_reload(String name,int age, String tel){//
这是一个构造方法初始化
this.name = name;
this.age = age;
this.tel = tel;
}
/***
*
当构造方法改变之后,就必须要传参,否则报错,这时就可以用重载方法,重载无参的默认构造方法。
*/
public Stu_reload(){}
/***
* 便捷输出对象属性,如果没有同名形参和局部变量,那就默认为this.例如,sysout里面的name没有this,因为没有name形参和局部变量,则还是会找到属性变量name,效果也等同于this.name
*/
public void outshow(){
System.out.println(this.name+" "+this.age+" "+this.tel);
}
}
使用构造方法
public class Stu_reloadTest {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Stu_reload m1 =new Stu_reload();
Stu_reload m2 =new Stu_reload("熊昆伦",25,"123456789");
m2.outshow();
m1.outshow();
}
}