类和对象.


前言

类和对象:存在即合理
编程思想:如何把现实生活问题抽象成代码实现
面向对象编程(更符合人类思考问题的方式):Java语言一切皆对象,所有的操作行为被封装在一个个的对象中。
面向过程编程:C语言全是函数调用,一个函数就代表一个过程。


一、类和对象

类:模板,规定了该类所具备的属性和行为
对象:类的一个实例

比如:
人类:类
普京:对象

类描述了所有对象都具备的一些属性和行为
具体的属性值和能表现出来的行为是由具体的对象来表现
不同对象之间千差万别,主要是属性值不同

1.类

//类的定义
class 类名称{
  属性
  行为/方法
  其他类/接口
}

1.类名称使用大驼峰命名法
从第一个单词开始首字母大写,多个单词都是首字母大写
2.一个源文件*.java必须与该文件中的主类同名(public class),源文件中主类有且只有一个(一般:主方法main存在于主类中,可以没有)
3.一个源文件可以存在N个普通类(直接使用class声明的类,不加public)
在这里插入图片描述

2.对象

根据Person类产生他的对象
一个类可以产生N个对象

Person per = new Person();

如何根据对象来调用属性和方法?
**.**访问修饰符:所有引用数据类型访问堆上空间,使用“.”操作符

per.name="zhang";
per.show();

在这里插入图片描述

二、static

1.static属性:静态属性

表示类属性,该类的所有对象共享该属性,直接通过类名称访问
static修饰的属性保存在JVM方法区,有且只有一个,只和类相关(可以直接China.country,不产生对象就访问,China引用为NULL时,仍然可以访问类的静态变量-类属性)
在这里插入图片描述
在这里插入图片描述
类中常量:static final 此时常量全局唯一且不能修改,所有对象共享此常量

2.static方法:类方法/静态方法(工具方法)

直接通过类名称调用

Arrays.sort();
Arrays.copyOf();

若main中调用静态方法(static修饰的方法),直接使用方法名

思考:
静态方法能否访问类中成员变量?
答:不能,因为成员变量必须有对象,静态方法不需要对象就可以调用
静态方法能否访问类中静态变量?
答:能。(static家族之间可以相互调用-都不要对象)
成员方法能否访问静态变量?
答:能。
成员方法能否访问成员变量?
答:能。一个家族的。

3.static代码块:静态代码块

静态代码块:定义在类中,使用static修饰的代码块
当类加载时执行一次,与对象产生无关。
类加载:就是把需要使用的类加载到JVM中

4.static类:静态内部类

static class-没对象也能用

三、面向对象三大特征:封装、继承、多态

面向对象三大特征:封装、继承、多态

访问权限分为两种:
private:实现属性封装。
1.当一个属性被private修饰,该属性只能在类的内部可见,出了该类无法使用(即使是继承类也不行),此时调用者无法直接使用。
2.类外部操作(取得/修改)private属性,需要使用类提供getter/setter,根据情况决定。
3.private可以修饰内部类不能修饰外部类(因为类就是为了产生对象,若在外部修饰无法使用)

public:公共的,无论如何都能用

四、构造方法

构造方法:是类的特殊方法,构造方法是执行对象的初始化操作

语法:构造方法没有返回值声明,方法名称与类名称相同
访问修饰符(public private)类名称(){}

class Person{
  private String name;
  private int age;
  public Person(){
     System.out.println("hello");
  }
}

a.当类中没有显示声明构造方法时,JVM会生成一个默认的无参构造。当在类中显示提供了构造方法(编写构造方法),JVM将不再生成默认的无参构造

class Person{
  private String name;
  private int age;
  public Person(String n){
     name=n;
  }
}

b.什么是初始化?作用:给类中成员变量赋初值
在这里插入图片描述
c.构造方法的重载:这些重载的构造方法,只是参数的个数不同(因为构造方法就是给类中属性赋值,类中属性的类型再定义时就规定好了)
一般按照构造方法参数个数升序排列
在这里插入图片描述
d.构造方法之间相互调用:使用this(相应参数);(必须放在该方法的第一行,并且调用不能成环)
在这里插入图片描述

五、this关键字

1.this修饰属性,表示 直接从本类中寻找属性

在这里插入图片描述

2.this修饰方法,表示调用本类方法

a.调用本类的构造方法:this(参数)
b.调用本类中普通方法:this.方法名称()
在这里插入图片描述

3.this表示当前对象引用

当前调用的成员方法或变量是通过对象A调用的,则此时this就是代表A
在这里插入图片描述

六、代码块

根据代码块定义的位置及关键字分为:

普通代码块:定义在方法中,使用{}括起来的代码块

构造代码块:定义在类中,不加任何修饰符,直接使用{}定义的代码块

当产生对象时执行构造代码块,优先于构造方法执行。并且有几个对象产生就执行几次构造代码块
在这里插入图片描述

静态代码块:定义在类中,使用static修饰的代码块

当类加载时执行一次,与对象产生无关。
类加载:就是把需要使用的类加载到JVM中
在这里插入图片描述

在这里插入图片描述

同步代码块:多线程部分详解

补充

1.toString()

当调用println方法进行对象输出时,默认输出的时该对象地址hash()->
若想输出对象的内容时,再类中提供toString()方法即可

public String toString(){
  String str = "name" + name + ",age = " + age;
  return str;
}

2.匿名对象:一个对象没有任何引用指向

new Person( );
只能使用一次,没有任何应用指向

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值