目录
1.什么是对象
1.1类和对象
1.1.1类
类定义了数据的结构,对象才是实实在在的例子。(实例)
1.1.2对象
对象就是一种特殊的数据结构。对象是用类new出来的,有了类就可以创建出对象。
1.2语法
1.2.1设计类
public class 类名{
1、变量,用来说明对象可以处理什么数据
数据类型 变量名;
2、方法,描述对象有什么功能,也就是可以对数据进行什么样的处理
public 返回值类型 方法名(参数列表){}
}
public class Teacher {
private String name;
private String id;
public void teach(){
System.out.println("工号为"+id+"的"+name+"老师正在讲课");
}
}
1.2.2使用对象
【1】创建对象语法
类名 对象名 = new 类名()
Teacher teacher=new Teacher();
【2】调用对象属性
对象名.属性名
System.out.println("我的女朋友叫"+girlFriend1.getName()+",身高"+girlFriend1.getHeight()+"厘米,体重"+girlFriend1.getWeight()+"斤。");
【3】调用方法属性
对象名.方法名
teacher.teach();
1.3开发的应用
【1】想描述什么事物,就定义什么类,就创建对应对象去处理。
【2】万物皆对象,描述什么事物,就将事物的数据定义到类中。
2.设计类的细节
2.1构造器
2.1.1语法
【1】方法名和类名一样
【2】没有返回值 连void都没有
【3】构造器允许重载
public Teacher() {
}
public Teacher(String name, String id) {
this.name = name;
this.id = id;
}
2.1.2特点(调用时机)
【1】创建对象的时候会调用对应的构造器。
【2】new 类名() 都会调用该类的构造器。
2.1.3应用场景
【1】创建对象的同时 为对象的成员变量完成赋值操作。简单来说 就是完成成员变量的初始化。
【2】对象创建时,我们可以指定对象去调用哪个构造器执行(有参/无参)。
2.1.4注意事项
【1】类默认就自带了一个无参构造器
【2】如果为类定义了有参数构造器,类默认的无参数构造器就没有了,此时如果还想用无参数构造器,就必须自己手写一个无参数构造器出来。
2.2this关键字
2.2.1this关键字是什么
【1】this就是一个变量,表示当前对象的变量。(this指向当前对象的空间)
【2】方法被那个对象调用了,方法中的this就是谁。
public class Demo {
String name;
double score;
public void printThis(){
System.out.println(this);
}
}
public static void main(String[] args) {
Demo demo=new Demo();
System.out.println(demo);
demo.printThis();
}
2.2.2开发场景
java变量的访问遵循就近原则。如果 局部变量名字和成员变量名字一样,优先默认选择局部变量,我想区分可以使用this.变量名 表示用的是成员变量。
public class Demo {
String name;
double score;
public void like(String name){
System.out.println(this.name+"喜欢"+name);
}
}
public static void main(String[] args) {
Demo demo1=new Demo();
demo1.name="小卢";
demo1.like("御姐");
}
2.3封装
2.3.1封装是什么
【1】类就是一种封装。
【2】面向对象的三大特征:封装、继承、多态
【3】封装的设计要求:合理隐藏、合理暴露
【4】合理隐藏,用private修饰的,外界无法直接访问。
【5】合理暴露 用public修饰的,允许外界直接访问。
2.3.2JavaBean的规范
【1】javabean开发中 又叫做实体类,专门设计的来处理数据的类。
【2】合理隐藏:成员变量私有。
【3】合理暴露:设计get、set方法。
【4】提供无参构造器,有参构造可选。
public class GirlFriend {
private String name;
private double height;
private double weight;
public GirlFriend(String name, double height, double weight) {
this.name = name;
this.height = height;
this.weight = weight;
}
public GirlFriend() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
}
2.3.3实体类的应用场景
实体类定义出来只负责存储数据。数据的操作交给其他类的对象来使用。实现了数据和数据业务处理分离。
3.static(关键)
3.1static是什么
静态关键字,可以修饰成员变量,成员方法
3.2修饰成员变量特点
3.2.1静态成员变量
【1】类名.静态变量(推荐) 对象名.静态变量(不推荐)
【2】属于类,与类一起加载一次,在内存中只有一份,会被类的所有对象共享。如果某个数据只需要一份,希望能够被共享,这个数据就用static修饰。
3.2.2实例变量
【1】没有static修饰的变量 叫实例变量,属于对象,每个对象都有一份。
public class Demo {
//静态变量 有static 修饰的 属于类,只加载一次,可以通过类名直接访问, 可以被类的对象共享
static String name;//饮水机
//实例变量 没有static修饰 ,属于对象,每个对象都有一份
int age;//水杯
}
public static void main(String[] args) {
//静态变量属于类 可以通过类名调用 不需要有对象
//强烈推荐 静态变量通过类名调用
Demo.name = "马东";
System.out.println(Demo.name);
//创建了两个学生对象
Demo s1 = new Demo();
s1.age = 18;
s1.name="马东什么?";//不建议通过对象名调用 不属于对象
Demo s2 = new Demo();
s2.age = 20;
s2.name="什么冬梅?";
//输出 实例变量 实例变量属于对象
System.out.println(s1.age);//18
System.out.println(s2.age);//20 1
//输出 静态变量 可以被对象共享 不推荐!!
System.out.println(s1.name);//什么冬梅?
System.out.println(s2.name);//什么冬梅?
}
3.3修饰成员方法特点
3.3.1静态方法是什么
被它修饰的成员方法,叫静态方法,可以直接通过类名调用
3.3.2静态方法的调用
属于类,所以类名直接方法(用对象访问,也可以但不推荐)
3.3.3应用场景
做工具类。
3.3.4这样应用的好处
工具类中的方法都是一些静态方法,每个方法用来完成一个功能,以便供给开发人员直接使用。
3.3.5为什么工具类要用静态方法
【1】实例方法需要创建对象来调用,此时对象只是为了调用方法,对象占内存,这样会浪费内存。
【2】静态方法,直接用类名调用即可,调用方便,也能节省内存。
3.3.6工具类定义时有什么要求
工具类没有创建对象的需求,建议将工具类的构造器进行私有。
3.4静态方法注意事项
【1】静态方法中可以直接访问静态成员,不可以直接访问实例成员。静态只能访问静态。
【2】实例方法中既可以直接访问静态成员,也可以直接访问实例成员。
【3】实例方法中可以出现this关键字,静态方法中不可以出现this关键字的。(因为没有创建对象)
public class Person {
public static void show(){
System.out.println("这是一个静态方法 通过类名调用");
}
public void method(){
System.out.println("这是一个实例方法,通过对象名调用");
}
}
public static void main(String[] args) {
//演示 静态方法 直接通过类名调用
Person.show();
// Person.method();method属于对象需要先创建对象才能使用
Person p = new Person();
//演示 普通方法 --实例方法
p.method();
//main中可以调用谁
// printA();//必须有对象才能调用
printB();//没有对象 直接调用
}
public void printA(){
System.out.println("A");
}
public static void printB(){
System.out.println("B");
}