java-day8
目录
早上
理解对象
生活中,我们所接触到的或者使用到的所有事物,都是对象。
例如现在上课用电脑、杯子、桌子、凳子、吃饭用的碗、筷等都是对象。
在面向对象的思想中,万事万物一切皆为对象。
java是面向对象编程语言中的一种,所有java中也是需要有这样的思想的。
类和对象的关系
对象是需要使用类来进行创建的(结合new关键字)。
类是对事物的一种抽象的概括性的描述。类是抽象的描述
对象是事物的一种具体的个体表现。对象是具体的体现
public class Student{
public long id;
public String name;
public int age;
public void run(){
}
public void play(){
}
}
Student stu = new Student();
stu.id = 1;
stu.name = "zs";
stu.age = 18;
stu.run();
stu.play();
Student stu2 = new Student();
stu.id = 2;
stu.name = "lisi";
stu.age = 19;
stu.run();
stu.play();
JVM中的类和对象
首先类编译后,会被类加载器加载到内存,就是我们编写的类中的代码就保存到了JVM管理的内存中,这时候,如果我们使用new关键字来创建这个类的对象,那么就会先在内存中申请一块空间,准备存放创建出的对象,然后根据内存中之前保存的java类的代码,来创建对象,刚刚申请到的内存空间,就保存这个对象的信息,这个对象的信息,就和java类中所定义的属性和方法保持一致。也就是当前我们在类中定义哪些属性和方法,那么在这个对象中就有这些属性和方法的信息,并这些信息都保存在new关键字申请到的那个内存空间中,所以这个内存空间就是我们所说的对象,在JVM中的表现形式。
创建类的实例
注意,实例和对象在java中,大多数情况下都是指的的同一个意思。
所以以下说法都是正确的:
创建类的实例
创建类的对象
把类进行实例化,得到这个类的一个对象/实例
需要使用new关键字和类中的构造器,结合在一起来创建对象/实例
new 构造器
注意,一个类中,如果我们没主动的去编写一个构造器,那么JVM会
自动的帮我们给这个类添加一个无参的构造器。所以,我们在写完一
个类之后,直接创建对象,就是因为编译后,类中多了一个自动生产
的无参构造器。但是如果我们在自己写类的代码时候,手动编写了一
个构造器,那么编译之后,就不会自动生成其他构造器了。
下午
区分类的属性、方法、构造器
1、属性和方法的区别
属性名后面没有小括号,方法后面有小括号,小括号代表方法的参数列表,也就是说方法有没有参数、几个参数以及参数的类型都是从小括号中体现。
方法其实就是类中的一一个变量,可以把对象相关的值,保存到这个属性中方法后面是有一个大括号的,大括号中是可以编写代码的,将来使用对象调用这个方法时候,大括号中的代码就可以一行行的顺序执行了。
2、构造器和方法的区别
构造器的名字和类名是必须要保持一致的,但是方法的名字我们是可以随意命名的,只要满足标示符的命名规则就可以了。
方法的声明中是一定有返回类型的,真的执行完不返回任何数据,我们也需要用void关键字来表示出来。
例如:
public class Person{
//这个是类中的构造器
public Person(){}
//不符合命名规范的方法
public void Person(){}
}
变量的划分(根据作用范围)
1、局部变量
位置:方法的大括号中或者方法的参数列表中
在方法的大括号中定义的变量和方法的参数列表中定义的变量都是局部变量
//例如
public void test(int a){
int b;
if(a>0){
b=1;
int c=b+2;
}
}
//a、b、c都是局部变量
作用范围:
如果是定义在方法的参数列表中的局部变量,那么在这个方法的
大括号中的任意位置,都是可以访问到这个变量的
如果是定义在方法的大括号中的局部变量,这个变量的作用范围
就是和这个变量最接近的一对大括号之中。
默认值:
局部变量是没有默认值的,也就是如果没给局部变量赋值的话,
这个变量是不能使用的。但是方法的参数列ian表里面的变量没
有赋值我们是可以使用的,这个变量是方法的参数,将来调用方
法的时候一定会传参的,所以我们在方法中写代码的时候,参数
列表中的变量是可以直接使用的。
生命周期:
局部变量在被声明的时候,就产生了,再被赋值之后,就可以使用了,并且在这个变量的作用范围之内,我们都可以使用它。
变量在内存中也是一小块空间,里面存的东西比较少,基本类型变量顶多存64位的数据,引用类型也就是存一个对象的内存空间地址值。
变量的生命周期的最后就是什么时候中国变量对应的内存空间会被释放。
方法中的代码执行的时候,是从上往下一行行顺序执行的,当代码执行超过这个变量的作用范围,也就是它所在的那对大括号的时候,这个局部变量就会被释放了。
2、实例变量
又称为属性、成员变量。
位置:直接在类中定义的变量(实例变量/属性/成员变量)
/*
属性:
大多数编译语言里面都是会这样叫的,而且在这里叫属性也很合适。
成员变量:
我们定义在类中的属性、方法都称之为类中的一个成员,所以会有
成员变量和成员方法这样的叫法。
实例变量:
在java中,类的实例指的就是对象,这种变量只能使用对象实例来
访问,所以会叫做实例变量,如果没有对象/实例,那么这个变量是不
能被访问的
*/
public class Student{
private String name;
}
作用范围:
类中的实例变量,是可以在类中定义的所有方法中进行访问的(先不考虑静态和非静态)
public class Student{
private string name;
public void test(){
System.out.println(name);
}
public void run(){
System.out.println(name);
}
public static void main(String[] args){
//这里不能访问name,因为程序入口是static,而name是非static的
//静态不能访问非静态的
System. out. println(name);
}
}
默认值:
类中的实例变量,是有默认值的,也就是当我们声明了一个实例变量之后,
不需要我们赋值,这个变量就会自动有一个默认值。
但是不同类型的变量的默认值,是不一样的:
整型的默认值都是0
浮点型的默认只都是0.0
字符型的默认值是'\u0000'
boolean类型的默认值是false
所有引用类型的默认值为null
生命周期:
实例变量是属于对象的,当对象创建出来的时候,这个对象中就有了这些实例变量,当这个对象在被使用完之后如果后面不再使用了,垃圾回收器就会帮我们把这个对象所占用的内存给释放掉,那么同时对象中的实例变量也会被释放掉。
只要这个对象存在,没有被GC给释放掉,那么这个对象将会一直存在,我们就可以使用对象来访问这些实例对象
所以实例对象的创建、销毁和释放是和对象的创建、使用和销毁保持同步的