Java入门-对象
1.类
1.概念
类是模板,规划了对象应该拥有怎样的属性和方法。
2.作用
类是一种抽象的概念,把具有相同属性和方法的对象归为一类。
注意:类里只有属性和方法
3.创建类
//创建人类
//注意:类里只有属性和方法
public class Person {
//属性
String name;
int age;
char sex;
//方法
public void eat(){
System.out.println("吃饭饭");
}
public void sleep(){
System.out.println("睡觉觉");
}
}
2.对象
1.概念
对象是类的具体表现形式,我们不能操作类,但可以通过操作对象来改变类方法,比如操作属性和方法。
2.创建对象
//测试类:测试上面写好的人类代码
//测试类必须有主方法
public class Test01 {
public static void main(String[] args) {
//需求:创建人类,再创建人类的对象
//创建人类的对象
Person p = new Person();
//操作属性 -- 设置属性
p.name = "倪飞";
p.age = 21;
p.sex = '男';
//操作属性 -- 获取属性
System.out.println(p.name);
System.out.println(p.age);
System.out.println(p.sex);
//调用方法
p.eat();
p.sleep();
}
}
注意:测试类必须有主方法
创建对象的语法结构:
类名 对象名 = new 类名();
创建对象的步骤:
(1).创建类(属性和方法)
(2).创建对象
(3).设置/获取属性/调用方法
注意:测试类必须有主方法
3.面向对象流程图
总结:1.字节码只能加载一次
2.每个对象独享一份成员变量
3.方法中的this代表调用该方法的对象
4.成员变量
1.含义
成员变量是类里、方法外的变量,作用于整个类。每个对象独享一份成员变量,而且系统会为成员变量赋默认值。
2.注意:
(1).成员变量必须用对象调用;
(2).成员变量的作用域在整个对象;
(3).对象被GC回收后,成员变量也会被回收;
(4).创建对象时,系统会给赋默认值
整数类型:0
浮点类型:0.0
字符类型:’ '
布尔类型:false
引用类型:null
(5).成员变量必须用对象调用;
3.局部变量
局部变量:方法里的变量,作用在该方法内,系统不会给其赋默认值。
方法被调用后,方法中的变量也会被GC立刻回收掉。
局部变量的作用域在该方法;
5.成员方法
1.语法结构
访问修饰符 返回值类型 方法名[参数]{
…代码块…
}
2.成员方法 vs 静态方法
成员方法必须用对象调用;
静态方法必须用类名调用。
6.构造方法
1.含义
与类名相同并且没有返回项的方法
2.作用
1.创建对象。和new一样,都是创建对象。
2.初始化数据。利用有参构造,在new对象时初始化数据。
3.注意
1.没有参数的构造方法叫做无参构造;有参数的构造方法叫做有参构造;
2.如果该类没有构造方法,系统会默认实现无参构造;
3.如果该类有有参构造,系统不会默认实现无参构造;
4.构造方法流程图
5.经典面试题
问:与类名相同的方法一定是构造方法吗?
答:不一定
问 :构造函数必须有无参构造吗?
答:不一定
6.构造方法 vs 普通方法(成员方法和静态方法)
构造方法必须和类名相同且没有返回项;
普通方法必须有返回项(void或具体的返回值)。
7.private 修饰符
1.含义
使属性或方法私有化
2.作用
修饰属性时:该属性不能被外界调用;
修饰方法时:该方法不能被外界(类以外)调用。
注意:private 不能修饰类,但可以修饰内部类
3.应用场景
如果当前类的属性不想让外界调用,就用private修饰
如果当前类的方法不想让外界调用,就用private修饰
8.封装
1.含义
私有化(private)属性,不让外界直接操作属性,通过调用方法去操作属性。
2.好处
1.避免直接操作属性,可以在set/get方法中做额外的功能;
2.私有化属性不让外界随便操作属性,让属性更安全;
3.通过方法去操作属性,可以添加额外的功能.
3.封装的过程
1.私有化属性
2.添加set/get方法
4.封装流程图
9.编写一个类的步骤
1.步骤
步骤1:编写属性,并用private私有化
步骤2:创建无参构造和有参构造
步骤3:添加get、set方法
步骤4:添加其他方法
2.理解
1.为什么私有化属性?
答:不想让外界调用,考虑到数据的安全性
2.为什么添加无参构造和有参构造?
答:添加有参构造的目的是方便在创建对象时就初始化数据,但编写了有参构造,系统就不会默认实现无参构造,所以自己还要去写一个无参构造。
3.为什么添加get/set方法?
答:因为私有化属性后,使用get/set方法对外提供获取和设置的功能,还可以额外添加功能。
10.分包
1.基本作用
防止了类的重名。
2.项目作用
一个项目中有非常多的类,得把这些类分包,不同功能的类存放在不同的包中。
3.公司常用类的命名
工具类:com.公司名.项目名.uitl
实体类:com.公司名.项目名.vo/bean/entity
持久层的类:com.公司名.项目名.dao/mapper
服务层的类:com.公司名.项目名.service
11.this
1.含义
this指本对象。
2.作用
this.属性:调用本对象的属性
this.方法:调用本对象的方法
this() :调用构造方法(必须在构造方法的第一句)
注意:方法中的this代表调用该方法的对象
12.static修饰符
1.含义
static表示静态的。
2.作用
1.修饰属性:类属性/静态变量,直接用类名调用,该类的每个对象共享一份。
应用场景:static + final
静态变量的生命周期:
(1).在类加载到方法区时,系统会扫描该类的静态变量并存在静态区中;
(2).项目结束时,静态区中的数据才会被回收。(强引用)
2.修饰方法(静态方法)
语法结构:访问修饰符 static 返回值类型 方法名(参数){}
应用场景:工具类
注意:如果该类只是纯粹的功能,就可以把该类变为工具类,直接用类名调用静态方法即可。
3.静态代码块
作用:初始化静态变量的数据。
代码块、静态代码块、构造方法的区别:
String str1;//成员变量
static String str2;//静态变量