1.Java中内存的分配
(1)栈:存放局部变量(方法参数或者方法定义的变量)
(2)堆:存放new出来的对象
(3)方法区:字节码文件,静态变量,静态方法,常量
2.数据类型分类:
基本数据类型:int,byte,short,long,double,float,boolean,char
引用数据类型:String,数组,类
3.基本数据类型传值:(值传递,方法的参数是基本数据类型),在方法中交换值,交换完后原来的值不变;
public static void main(String[] args) {
int num1=8;
int num2=10;
System.out.println("num1="+num1+",num2="+num2);//8,10
StudentManager sm=new StudentManager();
sm.changeNum(num1, num2);
System.out.println("num1="+num1+",num2="+num2);//8,10
}
引用数据类型传值:(引用传递,方法的参数是引用数据类型),在方法中交换值,交换完后原来的值改变;
public static void main(String[] args) {
Student s1=new Student();
s1.setName("张三");
s1.setAge(10);
System.out.println("没执行方法前,学生姓名:"+s1.getName()+",年龄:"+s1.getAge());
StudentManager sm=new StudentManager();
sm.changeStu(s1);
System.out.println("执行方法后,学生姓名:"+s1.getName()+",年龄:"+s1.getAge());
System.out.println(s1);
}
4.对象数组:由数据类型相同的对象组成。数组中的每一个元素是一个对象。
//对象数组的声明
Student[] stus=new Student[3];
//给对象数组赋值
stus[0]=new Student();//因为数组中的每个元素是对象,对象就要先创建出来,才能使用
stus[0].setName("aa");
stus[0].setAge(18);
stus[1]=new Student();
stus[1].setName("bb");
stus[1].setAge(88);
stus[2]=new Student();
stus[2].setName("cc");
stus[2].setAge(28);
//输出数组中的值
System.out.println("姓名\t年龄");
for (Student stu : stus) {
System.out.println(stu.getName()+"\t"+stu.getAge());
}
5.内部类:在一个类的里面,再声明一个类。
成员内部类的访问修饰符跟成员变量是一样的,可以是默认,private,protected,public
(1)实例内部类:在一个类的里面,声明成员的内部类。
//创建一个实例内部类的对象
Outer.Inner inner1=new Outer().new Inner();
Outer out1=new Outer();
Outer.Inner inner1=out1.new Inner();
a.在实例内部类中可以调用外部类中的成员变量(包括静态的成员变量和常量)。
b.在实例内部类的实例方法中可以调用外部类的实例方法和静态方法。
c.在外部类和实例内部类中的变量如果同名,内部类中的变量优先级更高。
d.在内部类中,调用内部类的成员变量: this.变量名
在内部类中,调用外部类的成员变量:外部类的类名.this.变量名。
(2)静态内部类:在一个类的里面,声明成员的静态的内部类。
//创建一个静态内部类的对象
Outer.Inner inner2=new Outer.Inner();
a.在静态内部类中不可以调用外部类中的实例变量和实例方法。
b.在静态内部类中,调用外部类的静态变量:外部类的类名.变量名。
(3)局部内部类:在一类的方法里面,再声明一个内部类。
a.局部内部类不能采用访问控制修饰符(private,protected,public,static)来修饰。
b.局部内部类仅在声明那个方法中有效。
(4)匿名内部类:在一个类的里面,再声明一个没有名字的类。相当接口多态性。
a.匿名内部类的语法
/**
- 接口,用来匿名内部类的使用
- @author sx
*/
public interface NiMing {
public void show();
}
/**
- 研究匿名内部类的使用
- 外部类
- @author
*/
public class Outer {
/**
* 匿名内部类,NiMing是用父接口作为类型,
* 匿名内部类的唯一的实例对象,
* new NiMing()只是保证结构完整性
* {}这部分是匿名内部类中的主要代码
*/
NiMing nm=new NiMing() {
@Override
public void show() {
// TODO Auto-generated method stu
}
};
}
b.匿名内部类的使用场景:
该类只需要创建一次对象且该对象只使用一次,则不需要去创建该类,建议采用匿名内部类的方式,减少类的个数。
c.一个匿名内部类,只有一个对象实例。
6.一个类对应一个.class字节码文件。无论你这个类是内部类,还是普通类。