程序的发展阶段
程序的发展经历了两个主要阶段:面向过程、面向对象。
对于面向对象与面向过程可以用一个例子解释,如一个木匠要做一个盒子,那么做这个盒子的出发点会有两种方式。
面向对象:先想好要做的盒子,之后再去找相应的工具去做。
面向过程:不去想要做什么样的盒子,随需取用工具。
面向对象的三大特征
1.封装(Encapsulation)
对外部不可见
2.继承(Inheritance)
扩展类的功能
3.多态(Polymorphism)
方法的重载
对象的多态性
类与对象
类是对某一类事物的描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每个个体,因而也称实例(instance)。
类就相当于是一个模板,依照此模板产生产品。
类的定义
创建person类
class Person{
String name;
int age;
public void tell(){
System.out.println("姓名:" + name + ",年龄:" + age);
}
}
Person类图
所示的图形分为三个层次:
第一层表示类的名称,类的名称与之前一样要求开头首字母大写;
第二层表示属性的定义,按照“访问权限 属性名称:属性类型”的格式定义;
第三层表示类中方法的定义,按照“访问权限 方法名称():方法返回值”的格式定义。
对象的创建及使用
类名 对象名称 = null ;// 声明对象
对象名称 = new 类名() ;// 实例化对象
或者
类名 对象名称 = new 类名() ;
class Person {
String name;
int age;
public void tell() {
System.out.println("姓名:" + name + ",年龄:" + age);
}
}
public class ClassDemo02 {
public static void main(String args[]){
Person per = new Person() ;
}
}
访问类中的属性和方法
访问属性:对象名称.属性名
访问方法:对象名称.方法名()
class Person {
String name;
int age;
public void tell() {
System.out.println("姓名:" + name + ",年龄:" + age);
}
}
public class ClassDemo03 {
public static void main(String args[]){
Person per = new Person() ;
per.name = "张三" ; // 为属性赋值
per.age = 30 ;
per.tell() ; // 调用类中的方法
}
}
内存划分
内存划分:对象创建之初
public class ClassDemo02 {
public static void main(String args[]){
Person per = new Person() ;
}
}
内存操作:为属性赋值
public class ClassDemo03 {
public static void main(String args[]){
Person per = new Person() ;
per.name = "张三" ; // 为属性赋值
per.age = 30 ;
per.tell() ; // 调用类中的方法
}
}
声明多个对象
public class ClassDemo04 {
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对象的name属性内容
per2.age = 33;// 设置per2对象的age属性内容
System.out.print("per1对象中的内容 --> ") ;
per1.tell();// per1调用方法
System.out.print("per2对象中的内容 --> ") ;
per2.tell();// per2调用方法
}
}
内存划分
对象引用传递
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;
System.out.print("per1对象中的内容 --> ") ;
per1.tell();// 调用类中的方法
System.out.print("per2对象中的内容 --> ") ;
per2.tell();
}
}
引用传递内存图
垃圾产生
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的name属性内容
per2.age = 33; // 设置per2的age属性内容
per2 = per1;// 将per1的引用传递给per2
System.out.print("per1对象中的内容 --> ") ;
per1.tell();// 调用类中的方法
System.out.print("per2对象中的内容 --> ") ;
per2.tell();
}
}
垃圾产生的内存关系
Java面向对象--类和对象
- 类和对象
程序是用来解决现实问题的,要解决现实问题,就需要将现实中的各种事物在程序中模拟出来。上帝创造了人,我创造了我的程序,我就是我程序中各个对象(事物)的上帝。程序中的各种事物都由我创造。
后续我们所有的程序都是有各种各样的事物构成的。每个事物都有其特定的作用,我们将这些事物有机组合起来就构成了我们的程序。
- 创建各种具有特定功能的事物(java中将事物又称为对象)。
- 将各事物有机组合
(1) 现实中创造事物流程
① 构想事物的特征(长什么样子、可以完成什么动作):静态特征、动态特征。
② 将所构想的事物的特征画到设计图纸上。
③ 将图纸送到生产车间开始生产
④ 所构想事务生产出来。
(2) 程序中事物创建流程
步骤 |
现实 |
程序 |
1 |
静态特征、动态特征 |
属性、行为(方法) |
2 |
设计图纸 |
类:图纸,模板 |
3 |
生产车间 |
new |
4 |
事物 |
对象 |
(3) 实例
静态特征、动态特征 |
名字、年龄、颜色 | 吃饭、说话 |
|||
静态特征、动态特征=》类图 |
|
|||
类图=》类 |
public class Cat { //属性 String name; int age; String color; //行为 public void eat(){ System.out.println("我是只猫,我喜欢吃鱼"); }
public void speak(){ System.out.println("我的名字是:"+name+" 我的年龄是:"+age); } }
|
|||
创建对象 |
Cat cat=new Cat(); |
|||
对象使用 |
Cat cat=new Cat(); cat.name=”小花”; cat.age=10; cat.color=”黄色”; cat.speak(); |
|||
以某个类为模板创建的对象:
|
||||
属性作用:存储信息,如果对象一直存在,还可通过对象将属性内部存储的信息传递到别的地方。 方法作用:一段具有特定功能的代码
|
||||
总结:
|
程序的发展阶段
程序的发展经历了两个主要阶段:面向过程、面向对象。
对于面向对象与面向过程可以用一个例子解释,如一个木匠要做一个盒子,那么做这个盒子的出发点会有两种方式。
面向对象:先想好要做的盒子,之后再去找相应的工具去做。
面向过程:不去想要做什么样的盒子,随需取用工具。
面向对象的三大特征
1.封装(Encapsulation)
对外部不可见
2.继承(Inheritance)
扩展类的功能
3.多态(Polymorphism)
方法的重载
对象的多态性
类与对象
类是对某一类事物的描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每个个体,因而也称实例(instance)。
类就相当于是一个模板,依照此模板产生产品。
类的定义
创建person类
class Person{
String name;
int age;
public void tell(){
System.out.println("姓名:" + name + ",年龄:" + age);
}
}
Person类图
所示的图形分为三个层次:
第一层表示类的名称,类的名称与之前一样要求开头首字母大写;
第二层表示属性的定义,按照“访问权限 属性名称:属性类型”的格式定义;
第三层表示类中方法的定义,按照“访问权限 方法名称():方法返回值”的格式定义。
对象的创建及使用
类名 对象名称 = null ;// 声明对象
对象名称 = new 类名() ;// 实例化对象
或者
类名 对象名称 = new 类名() ;
class Person {
String name;
int age;
public void tell() {
System.out.println("姓名:" + name + ",年龄:" + age);
}
}
public class ClassDemo02 {
public static void main(String args[]){
Person per = new Person() ;
}
}
访问类中的属性和方法
访问属性:对象名称.属性名
访问方法:对象名称.方法名()
class Person {
String name;
int age;
public void tell() {
System.out.println("姓名:" + name + ",年龄:" + age);
}
}
public class ClassDemo03 {
public static void main(String args[]){
Person per = new Person() ;
per.name = "张三" ; // 为属性赋值
per.age = 30 ;
per.tell() ; // 调用类中的方法
}
}
内存划分
内存划分:对象创建之初
public class ClassDemo02 {
public static void main(String args[]){
Person per = new Person() ;
}
}
内存操作:为属性赋值
public class ClassDemo03 {
public static void main(String args[]){
Person per = new Person() ;
per.name = "张三" ; // 为属性赋值
per.age = 30 ;
per.tell() ; // 调用类中的方法
}
}
声明多个对象
public class ClassDemo04 {
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对象的name属性内容
per2.age = 33;// 设置per2对象的age属性内容
System.out.print("per1对象中的内容 --> ") ;
per1.tell();// per1调用方法
System.out.print("per2对象中的内容 --> ") ;
per2.tell();// per2调用方法
}
}
内存划分
对象引用传递
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;
System.out.print("per1对象中的内容 --> ") ;
per1.tell();// 调用类中的方法
System.out.print("per2对象中的内容 --> ") ;
per2.tell();
}
}
引用传递内存图
垃圾产生
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的name属性内容
per2.age = 33; // 设置per2的age属性内容
per2 = per1;// 将per1的引用传递给per2
System.out.print("per1对象中的内容 --> ") ;
per1.tell();// 调用类中的方法
System.out.print("per2对象中的内容 --> ") ;
per2.tell();
}
}
垃圾产生的内存关系