java中类和对象的详细介绍

 更新时间:2021年3月5日 20:48  点击:1954

面向过程和面向对象

  • C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
  • JAVA是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。
  • 面向过程注重的是过程,在整个过程中所涉及的行为,就是功能。
  • 面向对象注重的是对象,也就是参与过程所涉及到的主体。是通过逻辑将一个个功能实现连接起来

【面向对象概念】

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

【面向对象设计】

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

开发时:找对象,建对象,用对象,并维护对象之间的关系。

总结:面向对象就是用代码(类)来描述客观世界的事物的一种方式. 一个类主要包含一个事物的属性和行为

类和类的实例化

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

一个类可以实例化无数个对象

下面我们通过一个例子了解类和类的实例化

class Person {
 public int age;//成员属性 实例变量 字段 属性
 public String name;
 public static String sex; //静态成员变量 方法区
 public void eat() {//成员方法
 System.out.println("吃饭!");
 }
 public void sleep() {
 System.out.println("睡觉!");
 }
 public static void func(){
 	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();

		//静态成员变量和方法的调用
		System.out.println(Person.sex);
		Person.func();
 }
}

成员变量:

定义在类的内部,方法的外部

通过对象的引用来访问

如果没有初始化,那么它的值就是一个默认默认值(默认零值)

  • 如果是引用类型,那么值就是null(包括数组,String字符串等)
  • 如果是简单类型,那么值就是其这种类型所对应的默认值
byte short int long float double char boolean
0 0 0 0L 0.0f 0.0 '\u0000'十六进制(也可以当作0) false

行为/方法:

【eat() sleep()】为实例成员方法

func()为静态成员方法

对于静态的成员变量和成员方法该该怎么访问呢

这里可以看到,对于静态的,不需要实例化对象!!!

直接调用

类名.静态成员变量/静态成员方法

总结static:

  • 对于静态的成员属性或者静态的成员方法,是不依赖于对象的。
  • 静态的成员变量 ,只有一份,存储在方法区中。
  • 静态的方法内部是不可以访问非静态的数据的。

实例化类的存储结构

初始化成员变量的方式

1、就地初始化(在类内进攻初始化)

2、默认初始化

3、类外初始化(用的比较多)

public class Main{
 public static void main(String[] args) {
 Person person1 = new Person();
 person1.name = "星星";
 person1.age = 20;

 Person person2 = new Person();
 person2.name = "狒狒";
 person2.age = 40;
 }
}

封装

在我们写代码的时候经常会涉及两种角色: 类的实现者和类的调用者. 封装的本质就是让类的调用者不必太多的了解类的实现者是如何实现类的,只要知道如何使用类就行了.

这样就降低了类使用者的学习和使用成本, 从而降低了复杂程度

private/ public 这两个关键字表示 “访问权限控制” .

  • 被 public 修饰的成员变量或者成员方法, 可以直接被类的调用者使用.
  • 被 private 修饰的成员变量或者成员方法,不能被类的调用者使用

举个例子

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.show();
 }
}

  • 此时字段已经使用 private 来修饰. 类的调用者(main方法中)不能直接使用. 而需要借助 show 方法. 此时类的使用者就不必了解 Person 类的实现细节.
  • 同时如果类的实现者修改了字段的名字, 类的调用者不需要做出任何修改(类的调用者根本访问不到 name, age这样的字段)

getter和setter方法

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);
 }
}
class Main {
 public static void main(String[] args) {
  Person person = new Person();
  person.setName("caocao");
  String name = person.getName();
  System.out.println(name);
  person.show();
 }
}

this关键字

我们在刚才的代码可以看到setter方法

private String name;
public void setName(String name){
		//name = name;//不能这样写
  this.name = name;//this引用,表示调用该方法的对象
}

this表示当前对象引用, 可以借助 this 来访问对象的字段和方法

三个用法:

  • this.属性; //访问当前对象的属性
  • this.方法;//调用当前对象的方法
  • this(); //调用当前对象的构造方法 (ps:必须放在第一行,且只能存在一个构造方法内部)

构造方法

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

实例化一个对象/创建一个对象分几步

Student stu = new Student() ;//实例化一个对象

两步

  1. 为对象分配内存
  2. 调用合适的构造方法,说明构造方法不止一个,可能更多

语法规则

  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);
 }
}
public class Main{
 public static void main(String[] args) {
  Person p1 = new Person();//调用不带参数的构造函数 如果程序没有提供会调用不带参数的构造函数
  p1.show();
  Person p2 = new Person("zhangfei",80,"男");//调用带有3个参数的构造函数
  p2.show();
 }
}

toString方法

  Person person = new Person("caocao",19);
  System.out.println(person);

如果打印引用,他会默认调用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);
 }
}

这样打印引用的化,就会按照想要的内容进行输出。

匿名对象

匿名只是表示没有名字的对象.

  • 没有引用的对象称为匿名对象.
  • 匿名对象只能在创建对象时使用.
  • 如果一个对象只是用一次, 后面不需要用了, 可以考虑使用匿名对象

new Person("caocao",19).show();//通过匿名对象调用方法

特点:不依赖于对象,我们只需要通过类名就可以调用其属性或者方法

代码块

  • 本地代码块
  • 静态代码块
  • 实例代码块/构造代码块
  • 同步代码块(多线程)

本地代码块: 在方法中的代码块

public class Main{
 public static void main(String[] args) {
  { //直接使用{}定义,普通方法块
   int x = 10 ;
   System.out.println("x1 = " +x);
  }
  int x = 100 ;
  System.out.println("x2 = " +x);
 }
}

静态代码块: 一般用于初始化静态成员属性

//静态代码块
static {
count = 10;//只能访问静态数据成员
System.out.println("I am static init()!");
}

实例代码块: 定义在类中的代码块,构造代码块一般用于初始化实例成员变量

//实例代码块
{
this.name = "bit";
this.age = 12;
this.sex = "man";
System.out.println("I am instance init()!");
}

执行顺序

静态代码块实例代码块构造方法

总结

到此这篇关于java中类和对象的文章就介绍到这了,更多相关java类和对象内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

[!--infotagslink--]

相关文章

  • Java实现经典游戏复杂迷宫

    这篇文章主要介绍了如何利用java语言实现经典《复杂迷宫》游戏,文中采用了swing技术进行了界面化处理,感兴趣的小伙伴可以动手试一试...2022-02-01
  • php svn操作类

    以前我们开发大型项目时都会用到svn来同步,因为开发产品的人过多,所以我们会利用软件来管理,今天发有一居然可以利用php来管理svn哦,好了看看吧。 代码如下 ...2016-11-25
  • java8如何用Stream查List对象某属性是否有重复

    这篇文章主要介绍了java8如何用Stream查List对象某属性是否有重复的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-11
  • PHP 数据库缓存Memcache操作类

    操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
  • java 运行报错has been compiled by a more recent version of the Java Runtime

    java 运行报错has been compiled by a more recent version of the Java Runtime (class file version 54.0)...2021-04-01
  • 在java中获取List集合中最大的日期时间操作

    这篇文章主要介绍了在java中获取List集合中最大的日期时间操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
  • R语言 如何删除指定变量或对象

    这篇文章主要介绍了R语言删除指定变量或对象的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • 教你怎么用Java获取国家法定节假日

    这篇文章主要介绍了教你怎么用Java获取国家法定节假日,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-04-23
  • Java如何发起http请求的实现(GET/POST)

    这篇文章主要介绍了Java如何发起http请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-31
  • 浅谈Java与C#的一些细微差别

    说起C#和Java这两门语言(语法,数据类型 等),个人以为,大概有90%以上的相似,甚至可以认为几乎一样。但是在工作中,我也发现了一些细微的差别...2020-06-25
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • Php文件上传类class.upload.php用法示例

    本文章来人大家介绍一个php文件上传类的使用方法,期望此实例对各位php入门者会有不小帮助哦。 简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮...2016-11-25
  • 解决Java处理HTTP请求超时的问题

    这篇文章主要介绍了解决Java处理HTTP请求超时的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
  • 如何在Spring WebFlux的任何地方获取Request对象

    这篇文章主要介绍了如何在Spring WebFlux的任何地方获取Request对象,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下...2021-01-26
  • java 判断两个时间段是否重叠的案例

    这篇文章主要介绍了java 判断两个时间段是否重叠的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
  • 超简洁java实现双色球若干注随机号码生成(实例代码)

    这篇文章主要介绍了超简洁java实现双色球若干注随机号码生成(实例代码),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-02
  • JavaScript预解析,对象详解

    这篇文章主要介绍了JavaScript预解析,对象的的相关资料,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助...2021-11-10
  • Java生成随机姓名、性别和年龄的实现示例

    这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
  • java 画pdf用itext调整表格宽度、自定义各个列宽的方法

    这篇文章主要介绍了java 画pdf用itext调整表格宽度、自定义各个列宽的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-31
  • 牛叉的Jquery――Jquery与DOM对象的互相转换及DOM的三种操作

    只有jQuery对象才能调用jQuery类库的各种函数,同样有些dom对象的属性和方法在jQuery上也是无法调用的,不过基本上jQuery类库提供的函数包含了所有的dom操作。这就需要我们知道如何将jQuery对象和DOM的相互转换的方法。1...2015-10-30