简聊类和对象

我们在了解类和对象前,先聊下面向对象程序设计,面向对象程序设计就是通过对象来进行程序设计,对象表示一个可以明确标识的实体,比如:一辆车、一个人、一朵花等等,每个对象都有它自己独特的标识:状态和行为;

类:

由N多对象,抽取出象的部分(简称抽象),像的部分包含(属性和方法)称为类的特征,然后再根据这个特征判断其它对象是否属于该类别;

对象:

对象是通过 new 关键字调用构造函数创建出来的。

public class Phone{// 手机的牌子String brand;// 手机的类型(智能机、音乐手机等)String type;// 手机的价格double price;public void info(){System.out.println(brand+"---"+type+"---"+price);}//无参的构造方法public Phone(){}// 有参的构造方法public Phone(String brand,String type,double price){this.brand=brand;this.type=type;this.price=price;}}
public class TestPhone {public static void main(String [ ]args){Phone p1=new Phone(); // 创建出一个手机对象System.out.println("p1="+p1);p1.brand="三星";p1.type="s20";p1.price=4999.00;p1.info();//调用方法System.out.println("------------------------");Phone p2=new Phone("苹果", "4s", 6999.9);p2.info();Phone p3=p1;//把p1的地址"复制一份"赋值给p3p3.info();System.out.println("p1="+p1+"\tp3="+p3);p2=null;//将null赋值给p2}
}

每个对象的属性都是相互独立的而方法都是共享的。

使用new关键字创建对象。

构造方法:

构造方法是在使用new关键字创建对象时才被调用,构造方法的作用就是初始化对象中的属性;

构造方法与一般方法的区别:

  • 构造方法的方法名和类名相同;
  • 没有返回值,连void都没有;
  • 当创建对象时才会被调用;
  • 和一般方法一样也是可以有重载方法的(无参构造方法、有参构造方法);
//无参的构造方法
public Phone(){}
// 有参的构造方法
public Phone(String brand, String type){this.brand = brand;this.type = type;
}
// 有参的构造方法
public Phone(String brand,String type,double price){this.brand = brand;this.type = type;this.price = price;
}
// 类中默认就有无参构造方法

引用变量访问对象和调用数据域和方法:

我们访问对象是通过对象类型变量来访问,该变量包含了对对象的引用。使用操作符: . 来访问对象数据和方法;

在java中除了基本数据类型外就是引用数据类型,创建对象会在堆内存中分配空间,然后通过引用变量来访问,引用地址的变量就是引用变量,也就是引用数据类型。

声明对象类型变量有两种方式:

Phone p ; //只声明,未指向一个引用地址
Phone p = null; //p指向一个空地址
//两者基本无区别,null是引用类型的默认值
Phone p2=new Phone("苹果", "4s", 6999.9);//表示创建一个Phone对象,并返回该对象的引用,赋给Phone类型的p2变量。  变量p2包含了一个Phone对象的引用地址。 但通常情况下,直接称变量p2为Phone对象。

引用类型变量和基本类型变量的区别:

每一个变量都代表一个存储值的内存位置。 变量声明时,需要告知编译器该变量可以存储什么类型的值。对基本类型变量来说,对应内存所存储的值就是基本类型值。而对于引用类型变量来说,对应内存所存储的值是一个引用,指向对象在内存中的位置。

int a = 1;
int b = a; // 将a的实际值赋给b
Phone p = new Phone();
Phone p2 = p; //将p的引用地址赋给p2 , p和p2指向同一对象
p2.brand = "iphone";
System.out.println(p.brand); // iphone

总结:

  • 将引用类型变量赋值给另外一个同类型的引用变量,那么这两个引用变量会指向同一个对象,而不是独立的对象。

  • 如果想要指向一个具有同样内容,但不是同一个对象,可以使用clone()方法。

  • 如果不再需要某个对象时,也就是不引用该对象,可以将引用类型变量赋值null,表示引用为空。 若创建的对象没有被任何变量所引用,JVM会自动回收它所占的空间。

静态与实例的区别:

静态变量和静态方法属于类本身,静态变量被由类创建出来的对象所共享,在静态方法中不能直接访问实例变量和调用实例方法;

public class Demo {public int a = 5; // 实例变量public static int b = 10; // 静态变量public Demo(int a) { // 构造方法this.a = a; }public static void main(String[] args) { // 静态方法Demo d1 = new Demo(6);Demo d2 = new Demo(8);System.out.println(d1.a + " " + d2.a); // 6  8, 两个对象互不相关 d1.b = 15; //d1对象修改静态变量 bSystem.out.println(d2.b); //影响d2对象}public void hello(){ // 实例方法,属于通过类创建出来的对象// ....}
}

静态变量将变量值存储在一个公共地址,被该类的所有对象共享,当某个对象对其修改时,会影响到其他对象。而实例的实例变量则是存储在不同的内存位置中,不会相互影响 ;

this关键字的使用:

关键字this表示的是当前的对象,引用对象本身, 可以用于访问实例的数据域 ;

作用:

this.属性名称 – 指的是访问类中的成员变量,用来区分成员变量与局部变量;

class Person{private String name;private int age;private String gender;Person(){}Person(String name,int age,String gender){this.name = name;this.age = age;this.gender = gender;}public void setName(String name){name = name;}public String getName(){return name;}public void setAge(int age){age = age;}public int getAge(){return age;}public void setGender(String gender){gender = gender;}public String getGender(){return gender;}}

方法传递 - 引用参数:

方法是一种功能的集合,表明可以做什么,封装了实现功能的代码,想要实现某个功能只需要调用相关的方法即可,我们不需要关注方法的实现细节;

  1. java中的方法可以传递参数,参数的传递方法就是值传递。

  2. 参数有形参和实参,定义方法时写的参数叫形参,真正调用方法时,传递的参数叫实参。

  3. 调用方法时,会把实参传递给形参,方法内部其实是在使用形参。

  4. 所谓值传递就是当参数是基本类型时,传递参数的值,比如传递i=10,真实传参时,把10赋值给了形参。

  5. 当参数是对象时,传递的是对象的值,也就是对象的首地址。就是把对象的地址赋值给形参。

传递基本数据类型与传递引用类型的区别:

  • 基本数据类型的变量中直接存放数据值本身,所以改的时候改的是数据值本身;
  • 引用类型不同的地方在于真正的数据并没有在栈区的变量中保存,而是在堆区里面保存着,所以虽然也拷贝了一份,也是副本,但是二者指向的是同一块堆区

引用数据类型就好比说是两个小伙伴共同拥有一双鞋子,其中一个把它穿破了,那么另外一个小伙伴也会受到影响

基本数据类型就好比说是仿造了一双相同的鞋子,其中一个穿破了并不影响另外一个小伙伴穿

Java基础-简聊类与对象相关推荐

  1. Java基础笔记_6_类和对象_成员变量

    一 类和对象 类是抽象的概念,是对象的模板 对象是具体的事物,是类的具体实例 创建类的语法 public class 类名{  // 类内容 } 创建对象的语法 new 关键字就是实例化对象的意思.& ...

  2. [Java基础]获取Class类的对象

    代码如下: package ClassObjectPack;public class Student {private String name;int age;public String addres ...

  3. 多重继承_Python 和 Java 基础对比 10 —— 类的封装、继承和多态

    @Python大星 一.Python 类的封装.继承和多态 封装 继承 Python 支持多父类的继承机制,所以需要注意圆括号中基类的顺序,若是基类中有相同的方法名,并且在子类使用时未指定,Pytho ...

  4. 【狂神说笔记—— Java基础07-常用类】

    Java基础07-常用类 Object类 大家都知道Object是所有类的父类,任何类都默认继承Object. 理论上Object类是所有类的父类,即直接或间接的继承java.lang.Object类 ...

  5. Java基础:String类

    相关阅读 Java基础:String类 Java字符串格式化 Java基础:正则表达式 1. 概述 字符串是由多个字符组成的一串数据(字符序列),字符串可以看成是字符数组. 在实际开发中,字符串的操作 ...

  6. 一文带你深入理解【Java基础】· 枚举类

    写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...

  7. 八、Java面向对象编程(类、对象、方法、重载、可变参数、作用域、构造器、this本质)

    文章目录 Java面向对象编程(类.对象.方法.重载.可变参数.作用域.构造器.this本质) 一.类与对象 1. 类与对象的引出 2. 使用现有技术解决 3. 现有技术解决的缺点分析 4. 类与对象 ...

  8. Java基础复习-常用类

    Java基础复习-常用类 本文仅对学习过程中所缺java知识点的查缺补漏复习 String 代表字符串.Java程序中的所有字符串字面值(如"abc")都作为此类的实例实现. St ...

  9. Java基础知识运用,用对象,线程,Java窗口画出太阳系

    一个项目让你搞懂对象:Java基础知识运用,用对象,线程,GUI画出太阳系 一.需求分析: 用java基础知识画出太阳系八大行星的运行轨迹图,要求:运行轨迹图是动态图片,画出运行轨迹,画出地月系(不需 ...

最新文章

  1. 比Tiny YOLOv3小8倍,性能提升11个点,4MB的网络也能做目标检测
  2. webzip下载整个网站工具-WebZip
  3. 第五章 逻辑回归模型在评分卡开发中的应用
  4. sklearn中的Pipline(流水线学习器)
  5. linux关闭xdmcp服务,使用Xmanager远程CentOS 7服务器(XDMCP)
  6. 【CyberSecurityLearning 7】AD域
  7. 旧调重弹-SetUnhandledExceptionFilter的使用问题
  8. 【华为大咖分享】3.如何做Code Review 与 结对编程?
  9. c语言编fermat素数检验,记信安实验(一):Fermat 素性检验算法
  10. vue 项目常见功能(搜索 时间戳转换 过滤器)
  11. Blog主场转至51CTO.com
  12. 高性能的MySQL(8)优化服务器配置一安全与稳定
  13. 数据结构 第四章 串
  14. 推荐系统实践学习系列(七)推荐系统实例
  15. FTA故障树分析法-DFMEA的另外一张脸
  16. python django项目创建步骤
  17. octave运行.m文件
  18. 一张图理解栈顶指针加加减减的问题
  19. 全智通A+常见问题汇总解答—A+人脉关系中的新建权限取消掉后,保存权限,权限依然存在
  20. AcWing《蓝桥杯集训·每日一题》—— 3777 砖块

热门文章

  1. android平板忘了密码,平板电脑忘记密码怎么办
  2. Node学习HTTP模块(HTTP 服务器与客户端)
  3. 程序人生|五年java 含泪总结,建议小白看
  4. 五点三次平滑滤波在消除随机噪声中的应用以及其Maltab程序
  5. 电商RPA | 董明珠接班人带货引争议,达人资源有多难得?
  6. IBM JDK的Java堆空间的碎片问题
  7. 浏览此博客者开年必时来运转,否极泰来
  8. html生成无序列表,HTML的ul无序列表
  9. python 椭圆检测_使用OpenCV和Python检测触摸/重叠圆/椭圆
  10. 重磅!西安交通大学使用脑机接口技术实现了高位截瘫失语患者“说”出“心里话”