zoukankan      html  css  js  c++  java
  • 面向对象基础——类与对象的定义

     面向对象的概念



    封装性:对外部不可见。能够保护程序中的某些内容。

    继承性:扩展功能的。

    类与对象的关系:




    定义类和对象的方法?



    类图的画法:Person类图

    分为三层:

    第一层表示类的名称,类的名称与之前一样要求开头首字母大写。

    第二层表示属性的定义,依照" 訪问权限 属性名称:属性类型 " 的格式定义;

    第三层表示类中方法的定义,依照"  訪问权限 方法名称():方法返回值类型  " 的格式定义。

    例如以下图所看到的:


    类与对象的进一步研究

    掌握Java中的内存划分,java引用传递 以及垃圾的产生分析。



    重点:对象是保存在内存之中的(指针/引用),属性是保存在堆内存之中;而方法是保存在全局代码区之中的,此区中的内容是全部的对象共享的。  注意:在使用对象的时候。对象必须被实例化后才干够使用(并非单单指的是直接通过newkeyword进行实现,仅仅要有其堆内存的空间指向,则就表示实例化成功)。假设不进行实例化就会出现空指针异常。


    此时出现了一个空指向异常。在引用操作中。假设一个对象没有堆内存的引用,而调用了类中的属性或方法,就会出现此问题。

    所谓的引用数据类型时间上传递的是堆内存的使用权,能够同一时候为一个堆内存空间定义多个栈内存的引用操作。

    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方法仅仅须要简单的取回就可以。





  • 相关阅读:
    记一次 .NET 某智能服装智造系统 内存泄漏分析
    记一次 .NET 某化妆品 webapi 卡死分析
    记一次 .NET 某公交卡扣费系统 程序卡死分析
    去掉烦人的:要恢复页面吗?Chrome未正确关闭
    C#Excel转图片代码
    ArcEngine实现pagelayout中文本元素的属性对话框
    arcgis 模型版本问题最大
    Arcengine开发所遇错误解决方案(持续更新)
    ArcEngine IPageLayout 添加经纬网和公里网
    Arcengine的复制粘贴
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7112056.html
Copyright © 2011-2022 走看看