面向对象基础——类与对象的定义
Posted LIUXUN1993728
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象基础——类与对象的定义相关的知识,希望对你有一定的参考价值。
面向对象的概念
封装性:对外部不可见。可以保护程序中的某些内容。
继承性:扩展功能的。
类与对象的关系:
定义类和对象的方法?
类图的画法:Person类图
分为三层:
第一层表示类的名称,类的名称与之前一样要求开头首字母大写。
第二层表示属性的定义,按照" 访问权限 属性名称:属性类型 " 的格式定义;
第三层表示类中方法的定义,按照" 访问权限 方法名称():方法返回值类型 " 的格式定义。如下图所示:
类与对象的进一步研究
掌握Java中的内存划分,java引用传递 以及垃圾的产生分析。
重点:对象是保存在内存之中的(指针/引用),属性是保存在堆内存之中;而方法是保存在全局代码区之中的,此区中的内容是所有的对象共享的。 注意:在使用对象的时候,对象必须被实例化后才可以使用(并不是单单指的是直接通过new关键字进行实现,只要有其堆内存的空间指向,则就表示实例化成功)。如果不进行实例化就会出现空指针异常。
此时出现了一个空指向异常。在引用操作中,如果一个对象没有堆内存的引用,而调用了类中的属性或方法,就会出现此问题。所谓的引用数据类型时间上传递的是堆内存的使用权,可以同时为一个堆内存空间定义多个栈内存的引用操作。
class Person{ String name ; // 声明姓名属性 int age ; // 声明年龄属性 public void tell(){ // 取得信息 System.out.println("姓名:" + name + ",年龄:" + age) ; } }; public class ClassDemo05{ public static void main(String args[]){ Person per1 = null ; // 声明per1对象 Person per2 = null ; // 声明per2对象 per1 = new Person() ; // 只实例化per1一个对象 per2 = per1 ; // 把per1的堆内存空间使用权给per2 per1.name = "张三" ; // 设置per1中的name属性内容 per1.age = 30 ; // 设置per1中的age属性内容 // 设置per2对象的内容,实际上就是设置per1对象的内容 per2.age = 33 ; // 设置per2中的age属性内容 System.out.print("per1对象中的内容 --> ") ; per1.tell() ; // 调用类中的方法 System.out.print("per2对象中的内容 --> ") ; per2.tell() ; // 调用类中的方法 } };
class Person{ String name ; // 声明姓名属性 int age ; // 声明年龄属性 public void tell(){ // 取得信息 System.out.println("姓名:" + name + ",年龄:" + age) ; } }; public class ClassDemo06{ public static void main(String args[]){ Person per1 = null ; // 声明per1对象 Person per2 = null ; // 声明per2对象 per1 = new Person() ; // 实例化per1对象 per2 = new Person() ; // 实例化per2对象 per1.name = "张三" ; // 设置per1中的name属性内容 per1.age = 30 ; // 设置per1中的age属性内容 per2.name = "李四" ; per2.age = 33 ; // 设置per2中的age属性内容 per2 = per1 ; // 把per1的堆内存空间使用权给per2 System.out.print("per1对象中的内容 --> ") ; per1.tell() ; // 调用类中的方法 System.out.print("per2对象中的内容 --> ") ; per2.tell() ; // 调用类中的方法 } };
以为per2改变了指向,所以其原本指向的内存空间没有任何栈内存的引用,则这样的内存就被称为垃圾,等待垃圾回收机制进行回收。 GC:垃圾回收机制的简称。
封装性:
封装就是保护内容。
保证某些属性或方法可以不被外部看见。
封装的实现:
class Person{ private String name ; // 声明姓名属性 private int age ; // 声明年龄属性 public void setName(String n){ // 设置姓名 name = n ; } public void setAge(int a){ // 设置年龄 if(a>=0&&a<=150){ // 加入验证 age = a ; } } public String getName(){ // 取得姓名 return name ; } public int getAge(){ // 取得年龄 return age ; } public void tell(){ System.out.println("姓名:" + name + ",年龄:" + age) ; } }; public class EncDemo04{ public static void main(String arsgh[]){ Person per = new Person() ; // 声明并实例化对象 per.setName("张三") ; // 调用setter设置姓名 per.setAge(-30) ; // 调用setter设置年龄 per.tell() ; // 输出信息 } };
Setter方法中加入验证,getter方法只需要简单的取回即可。
以上是关于面向对象基础——类与对象的定义的主要内容,如果未能解决你的问题,请参考以下文章