初识java:类和对象。

1. 类与对象的初步认知

JAVA是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。
面向过程注重的是过程,在整个过程中所涉及的行为,就是功能。
面向对象注重的是对象,也就是参与过程所涉及到的主体。是通过逻辑将一个个功能实现连接起来。

2. 类和类的实例化

类相当于一个模板,对象是由模板产生的样本。一个类,可以产生无数的对象。
声明一个类就是创建一个新的数据类型,而类在 Java 中属于引用类型, Java 使用关键字 class 来声明类。
注意事项:
new 关键字用于创建一个对象的实例。
使用 . 来访问对象中的属性和方法。
同一个类可以创建多个实例。

3. 类的成员

基本语法:

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

类的成员可以包含以下:字段、方法、代码块、内部类和接口等。
class为定义类的关键字,ClassName为类的名字,{}中为类的主体。
类中的元素称为:成员属性。类中的函数称为:成员方法。

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

默认值规则:
对于各种数字类型, 默认值为 0。
对于 boolean 类型, 默认值为 false。
对于引用类型(String, Array, 以及自定制类)默认值为NULL。

null 在 Java 中为 “空引用”, 表示不引用任何对象. 类似于 C 语言中的空指针. 如果对 null 进行 . 操作就会引发异常。

如果在任何方法上应用 static 关键字,此方法称为静态方法。
静态方法属于类,而不属于类的对象。
可以直接调用静态方法,而无需创建类的实例。
静态方法可以访问静态数据成员,并可以更改静态数据成员的值。

注意事项1:
静态方法和实例无关, 而是和类相关. 因此这导致了两个情况:
静态方法不能直接使用非静态数据成员或调用非静态方法(非静态数据成员和方法都是和实例相关的。
this和super两个关键字不能在静态上下文中使用(this 是当前实例的引用, super是当前实例父类实例的引用, 也是和当前实例相关。
注意事项2:
我们曾经写的方法为了简单, 都统一加上了 static. 但实际上一个方法具体要不要带 static, 都需要是情形而定。
main 方法为 static 方法。

4. 封装

private/ public 这两个关键字表示 “访问权限控制” 。
被 public 修饰的成员变量或者成员方法, 可以直接被类的调用者使用.。被 private 修饰的成员变量或者成员方法, 不能被类的调用者使用。
换句话说, 类的使用者根本不需要知道, 也不需要关注一个类都有哪些 private 的成员。从而让类调用者以更低的成本来使用类。

注意事项:
private 不光能修饰字段, 也能修饰方法。
通常情况下我们会把字段设为 private 属性, 但是方法是否需要设为 public, 就需要视具体情形而定.。一般我们希望一个类只提供 “必要的” public 方法, 而不应该是把所有的方法都无脑设为 public。

当我们使用 private 来修饰字段的时候, 就无法直接使用这个字段了。此时如果需要获取或者修改这个 private 属性,就需要使用getter/setter方法。

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

5. 构造方法

构造方法是一种特殊方法, 使用关键字new实例化新对象时会被自动调用, 用于完成初始化操作。
new 执行过程
为对象分配内存空间
调用对象的构造方法
语法规则:
1.方法名称必须与类名称相同
2.构造方法没有返回值类型声明
3.每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造)

注意事项
如果类中没有提供任何的构造函数,那么编译器会默认生成一个不带有参数的构造函数。
若类中定义了构造方法,则默认的无参构造将不再生成。
构造方法支持重载。

代码实例如下:

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); 
 } 

this关键字
在构造函数的内部,我们可以使用this关键字,构造函数是用来构造对象的,对象还没有构造好,
我们就使用了this,那this还代表当前对象吗?当然不是,this代表的是当前对象的引用。

6. 代码块

根据代码块定义的位置以及关键字,又可分为以下四种:
普通代码块
构造块
静态块
同步代码块

构造块:定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量。

class Person {
    private String name;
    private int age;
     // 构造方法 
    public Person() {
        System.out.println("person");
    }
    
    // 实例代码块
    {
        System.out.println("实例代码块");
    }
    
    // 静态代码块
    static {
        System.out.println("静态代码块 ");
    }
}

public class TestDemo04 {
    public static void main(String[] args) {
         Person person = new Person();
    }
}

运行结果为:

静态代码块
实例代码块
person

注意事项:
静态代码块不管生成多少个对象,其只会执行一次,且是最先执行的。
静态代码块执行完毕后, 实例代码块(构造块)执行,再然后是构造函数执行。

7. 补充

代码示例:

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); 
 } 
} 
public class Main { 
 public static void main(String[] args) { 
 Person person = new Person("caocao",19); 
 person.show(); 
 //我们发现这里打印的是一个地址的哈希值 原因:调用的是Object的toString方法
 System.out.println(person); 
 } 
} 
// 执行结果
name:caocao age:19 
Person@1c168e5

可以使用 toString 这样的方法将对象自动转化为字符串。

注意事项:
toString 方法会在 println 的时候被自动调用。
将对象转成字符串这样的操作我们称为序列化。
toString 是 Object 类提供的方法, 我们自己创建的 Person 类默认继承自 Object 类, 可以重写 toString 方法实现我们自己版本的转换字符串方法。
@Override 在 Java 中称为 “注解”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值