面向对象的概念
封装性:对外部不可见。能够保护程序中的某些内容。
继承性:扩展功能的。
类与对象的关系:
定义类和对象的方法?
类图的画法: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方法仅仅须要简单的取回就可以。