类和对象
什么是类?
什么是对象
在java中类相当于c语言的结构体
使用class定义一个类名,在类里面方法的外面定义想要的功能(字段)成员方法(行为),就可以生成一个类,
一个java文件只有一个类,public修饰的类名必须和文件名相同,且一个文件只有一个类才能一键修改
类的实例化:
相当于自己创建了一个类似于iint,double的类型,然后用new这个关键字来实例化Dog这个对象,每一次new都可以实例化一个新的对象
定义的类里面的成员属性就会存储在对象里,如何访问对象的属性?
通过对象的引用来且赋值或者是初始化
对象的成员属性在没有赋值时,引用类型默认时null,简单类型默认时0
同一个类可以创建多个对象
当我们的局部变量名和变量的值相同时,程序采用的是就近原则,
要么参数名和变量名不一样,要么在前面加this,this是当前对象的引用,如果访问当前对象的变量都建议加上this,防止调用方法时出现错误
通过this可以访问当前对象的成员属性/成员变量,但是静态成员的变量不支持
当出现多次调用同一个方法时怎么判断是调给谁呢?
因为方法参数默认隐藏了一个参数Date this,所以我们在调用多次方法时都可以使用
如何初始化对象?
1.构造方法
构造方法是一种特殊的成员方法,并且在整个对象的生命周期只调用一次,当调用完成后构造方法之后对象才产生
方法名必须和类名相同,没有返回值
当我们实例化了一个对象后,在new后面相当于就是在调用Studend这个方法了
也可以在后面进行赋值
构造方法的作用是对对象中的成员进行初始化
当一个类当中没有任何构造方法,java会自动生成一个不带参数的构造方法
而类当中有构造方法,Java是不会自动生成构造方法的
构造方法中是可以构成方法的重载的
this()调用当前类当中的其他方法,只能在当前的构造方法内部使用,只能在第一行
封装:
将数据和数据操作的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开的接口来和对象进行交互
隐藏类的细节,从而达到安全性
private修饰符,封装修饰过后的变量只可以在方法内使用,超出方法外使用就会报错,
如果要给封装的变量初始化,就要另外给封装的变量提供一个方法,一个是get(修改值),一个是set(获取值)
也可以使用快捷键,生成想要的方法,也可以生成构造方法
toString可以让你以一种可读的方式展现对象的状态
封装之包:
这个是java原生的类
可以在原生类查看类在哪个包底下
package是声明当前java文件是在哪个包底下,可以通过import进行导入
如果两个类在同一个包底下,可以合并使用通配符(*)来导入,你的代码想使用谁,他就会导入谁
如果两个包都存在有同名的类,就要把完整的类名写上,因为idear并不知道你要调用哪个包
使用import static导入静态包中的方法和字段
自定义包,包名一般是公司域名的颠倒,全部字母必须小写
这里要设置把包打开,这里创建了一个包,包里面是3个文件夹,想往哪个文件夹写东西都是可以的,每个包底下都可以新建一个包
在文件的最上方加上一个package语句指定该代码在哪个包,没有的话该类会被放在一个默认的包
static:静态“变量”,加上了static修饰之后的变量就不依赖对象,使用方法就是类名.修饰的变量名,不属于某个对象,是所有对象所共享的,且static方法是存储在方法区
生命周期跟随类,类销毁静态变量也会跟着销毁
静态方法不需要实例话对象,且静态方法不可以直接调用非静态方法,静态方法里面不可以使用this,普通方法可以调用static方法,可以通过对象调用,也可以通过类名.静态方法名方式调用
代码块:
静态代码块,实例代码块,普通代码块,同步代码块,代码块都是在类里,
如果在一个类中同时有静态代码块,实例代码块,构造方法,会优先执行静态代码块,但调用同时调用同一个类静态代码块只会执行一次,多个静态代码块会按照先后顺序执行,
实例代码块只有在创建对象的时候才会执行
静态代码块只要类被加载就会被执行