JAVA类和对象

1.类与对象的初步认知

在这里插入图片描述
【面向对象概念】:

1.面向对象是思考问题的一种思考方式,是一种思想。比如:概念与实例。理论与实践。名和实等等
2.就是一类对象的统称。对象就是这一类具体化的一个实例。
3.面向对象的好处:将复杂的事情变简单了,只要面对一个对象就行。

【面向对象设计】:

面向对象设计把握一个重要的经验:谁拥有数据,谁对外提供操作这些数据(私有)的方法!(被动的一方是数据的拥有者,主动的一方是执行者)

注:开发时:找对象,建对象,用对象,并维护对象之间的关系。
简而言之:
面向对象就是用代码(类)来描述客观世界的事物的一种方式. 一个类主要包含一个事物的属性行为

2.类和类的实例化

2.1类

类就是一类对象的统称。对象就是这一类具体化的一个实例

声明一个类就是创建一个新的数据类型,而类在 Java 中属于引用类型, Java 使用关键字class 来声明类。

// 创建类
class <class_name>{  
    field;//成员属性
    method;//成员方法
}
// 实例化对象
<class_name> <对象名> = new <class_name>();

class为定义类的关键字,ClassName为类的名字,{}中为类的主体。
类中的元素称为:成员属性。类中的函数称为:成员方法

2.2类的实例化

用类类型创建对象的过程,称为类的实例化

class Person {
    public int age;//成员属性 实例变量
    public String name;
    public String sex;
    public void eat() {//成员方法
       System.out.println("吃饭!");  
   }
    public void sleep() {
       System.out.println("睡觉!");  
   }
}
public class Main{
 public static void main(String[] args) {
        Person person = new Person();//通过new实例化对象
        person.eat();//成员方法调用需要通过对象的引用调用
        person.sleep();
        //产生对象     实例化对象
        Person person2 = new Person();
        Person person3 = new Person();
 }
}

注意事项:

new 关键字用于创建一个对象的实例.
使用 . 来访问对象中的属性和方法.
同一个类可以创建对个实例

在这里插入图片描述

3.类的成员

3.1字段/属性/成员变量

类中的成员变量(不加static)都在堆上存储

用于描述一个类中包含哪些数据

class Person {
    public String name;   // 字段
    public int age; }
class Test {
    public static void main(String[] args) {

        Person person = new Person();
        System.out.println(person.name);
        System.out.println(person.age);
   }
}
// 执行结果
null
0

注意事项:

使用 . 访问对象的字段.
“访问” 既包含读, 也包含写.
对于一个对象的字段如果没有显式设置初始值, 那么会被设置一个默认的初值

在这里插入图片描述
认识 null

表示该引用没有指向任何内存空间,若仍然使用该引用去访问内存,操作就会异常

class Person {
    public String name;
    public int age; }
class Test {
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.name.length());   // 获取字符串长度
   }
}
// 执行结果
Exception in thread "main" java.lang.NullPointerException
        at Test.main(Test.java:9)

3.2方法 (method)

方法:用来描述对象的行为

class Person {
    public int age = 18;
    public String name = "张三";
    
    public void show() {
   System.out.println("我叫" + name + ", 今年" + age + "岁");
   }
}
class Test {
    public static void main(String[] args) {
        Person person = new Person();
        person.show();
   }
}
// 执行结果
我叫张三, 今年18

此处的 show 方法, 表示Person这个对象具有一个 “展示自我” 的行为.
这样的 show 方法是和person 实例相关联的. 如果创建了其他实例, 那么 show 的行为就会发生变化

3.3static 关键字

注:出现static对象无关,直接通过类名称调用
在这里插入图片描述

3.3.1修饰属性

静态属性:表示类属性,该类的所有对象共有,直接通过类名称调用

在这里插入图片描述

引用数据类型保存的都是对象的地址,(在桟上保存)
new()出来的对象都在,上。
静态属性JVM方法区保存

3.3.2修饰方法

静态方法:直接通过类名称调用,无需产生该类的对象
在这里插入图片描述

3.3.3修饰代码块

3.3.4修饰类

4.封装

体现在易用性封装性

4.1private实现封装

当一个属性被private修饰,该属性只在类的内部可见,出了类无法使用。

在这里插入图片描述

4.2getter和setter方法

class Person { 
 private String name = "张三"; 
 private int age = 18; 
 
 public void show() { 
 System.out.println("我叫" + name + ", 今年" + age + "岁"); 
 } 
} 

class Test { 
 public static void main(String[] args) { 
 Person person = new Person(); 
 person.age = 20; 
 person.show(); 
 } 
} 
// 编译出错
Test.java:13: 错误: age可以在Person中访问private 
 person.age = 20; 
 ^ 
1 个错误

此时如果需要获取或者修改这个private属性, 就需要使用getter / setter方法

class Person { 
 private String name;//实例成员变量
 private int age; 
 
 public void setName(String name){ 
 //name = name;//不能这样写
 this.name = name;//this引用,表示调用该方法的对象
 } 
 public String getName(){ 
 return name; 
 } 
 
 public void show(){ 
 System.out.println("name: "+name+" age: "+age); 
 } 
} 
public static void main(String[] args) { 
 Person person = new Person(); 
 person.setName("caocao"); 
 String name = person.getName(); 
 System.out.println(name); 
 person.show(); 
} 
// 运行结果
caocao 
name: caocao age: 0

getName 即为 getter 方法, 表示获取这个成员的值.
setName 即为setter方法, 表示设置这个成员的值.
当set方法的形参名字和类中的成员属性的名字一样的时候,如果不使用this, 相当>于自赋值. this表示当前实例的引用.
不是所有的字段都一定要提供 setter / getter 方法, 而是要根据实际情况决定提供哪种方法.
在 IDEA 中可以使用== alt + insert== (或者 alt + F12) 快速生成 setter / getter 方法. 在 VSCode 中可以使用鼠标右键菜单 -> 源代码操作 中自动生成 setter / getter 方法.

5.构造方法

5.1基本语法

构造方法是一种特殊方法, 使用关键字new实例化新对象时会被自动调用, 用于完成初始化操作

new 执行过程
1.为对象分配内存空间
2.调用对象的构造方法

a.如果类中没有提供任何的构造函数,那么编译器会默认生成一个不带有参数的构造函数
b.若类中定义了构造方法,则JVM不再生成默认的无参构造
c.构造方法支持重载(与普通构造方法一致)
d.构造方法支持互相调用

代码实例:

class Person { 
 
 private String name;//实例成员变量
 private int age; 
 private String sex; 
 //默认构造函数 构造对象 
 public Person() { 
 this.name = "caocao"; 
 this.age = 10; 
 this.sex = "男"; 
 } 
 //带有3个参数的构造函数
 public Person(String name,int age,String sex) { 
 this.name = name; 
 this.age = age; 
 this.sex = sex; 
 } 
 public void show(){ 
 System.out.println("name: "+name+" age: "+age+" sex: "+sex); 
 } 
 
} 
public class Main{ 
 public static void main(String[] args) { 
 Person p1 = new Person();//调用不带参数的构造函数 如果程序没有提供会调用不带参数的构造函数
 p1.show(); 
 Person p2 = new Person("zhangfei",80,"男");//调用带有3个参数的构造函数
 p2.show(); 
 } 
} 
// 执行结果
name: caocao age: 10 sex: 男
name: zhangfei age: 80 sex:

构造方法的重载

1.按照构造方法的参数(个数),升序排列
2.使用this();必须放在构造重载的第一行

5.3this关键字

1.修饰属性:表示直接从该类中寻找属性
2.修饰方法:表示调用本类中的方法
3.this表示(通过哪个对象调用的this方法,this就是谁

6.代码块

普通代码块:定义在方法中的代码块
构造代码块:定义在类中,不加任何修饰符,直接用{}生成的代码块
当生成一个对象时,·随着一个对象实现一次·
静态块:定义在类中,用static修饰,(在类加载时产生)静态代码块不管生成多少个对象,其只会执行一次,且是最先执行
同步代码块

7.补充说明

toString方法

在自己定义了一个类时,可以使用toString这样的方法来将对象自动转成字符串

代码实例:

class Person { 
 private String name; 
 private int age; 
 public Person(String name,int age) { 
 this.age = age; 
 this.name = name; 
 } 
 public void show() { 
 System.out.println("name:"+name+" " + "age:"+age); 
 } 
 //重写Object的toString方法
 @Override 
 public String toString() { 
 return "Person{" + 
 "name='" + name + '\'' + 
 ", age=" + age + 
 '}'; 
 } 
} 
public class Main { 
 public static void main(String[] args) { 
 Person person = new Person("caocao",19); 
 person.show(); 
 System.out.println(person); 
 } 
} 
// 执行结果
name:caocao age:19 
Person{name='caocao', age=19}

注意:

toString 方法会在 println 的时候被自动调用.
将对象转成字符串这样的操作我们称为 序列化.
toString 是 Object 类提供的方法, 我们自己创建的 Person 类默认继承自 Object 类, 可以重写 toString 方法实现我们自己版本的转换字符串方法. (关于继承和重写这样的概念, 我们后面会重点介绍).
@Override 在 Java 中称为 “注解”, 此处的 @Override 表示下面实现的 toString 方法是重写了父类的方法.
IDEA快速生成Object的toString方法快捷键:alt+f12(insert)

匿名对象

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值