002java300集基础学习--尚学堂(28~51面向对象)

java300集基础学习--尚学堂(28~51面向对象)

课时28:面向过程和面向对象的本质区别

本章概述

002java300集基础学习--尚学堂(28~51面向对象)_第1张图片

面向对象概念

oriented 确定…的方位 面向
object 对象
面向对象:通过对象来组织代码,通过对象来封装我们的数据

面向对象与面向过程之间的关系

002java300集基础学习--尚学堂(28~51面向对象)_第2张图片

面向对象编程起源

类似于c语言中的结构体
c++ 把同属性的变量 同属性的函数组合在一起为一个整体的类

面向对象编程优点

扩展性强、分工强、适合够复杂的软件

课程29:面向对象的方式思考问题

面向对象编程初步

  • 如何开汽车(事物比较简单,可以用线性的思维去解决)
    面向过程: 面向对象:
    1.踩离合 驾驶员
    2.挂挡 汽车
    3.踩油门,放离合 驾驶员开汽车!
    4.开了 car.start();
  • 如何造汽车(事情比较复杂,使用简单的线性思维无法解决)


    002java300集基础学习--尚学堂(28~51面向对象)_第3张图片

课程30:类和对象的关系 写出我们的第一个类

对象和类的概念

  • 面向的对象编程(OOP)的本质:以类的方式组织代码,以对象的方式封装(组织)数据
  • 对象:是具体的事物
  • 类:是对对象的抽象(抽象 抽出象的部分)
  • 先有具体的对象,然后抽象各个对象之间象的部分,归纳出类,通过类再认识其他对象
  • 对象和类的关系:特殊到一般,具体到抽象
  • 类:我们叫class
  • 对象:我们叫做Object,instance(实例)。以后我们说某个类的对象,某个类的实例。是一个意思
  • 类可以看成一类对象的模板,对象可以看成该类的一个具体实例
  • 类是用于描述同一类形的对象的一个抽象的概念,类中定义了这一类对象所应具有的静态和动态属性
  • 对象是java程序的核心,在java程序中“万事万物皆对象”
  • JDK提供了很多类供编程人员使用,编程人员也可以定义自己的类
package com.syy;

public class Student {
    //静态的数据
    String name;
    int id;
    int age;
    String gender;
    //动态的行为
    public void study(){
        System.out.println(name+"在学习");
    }
    public void sayhello(String sname){
        System.out.println(name+"想"+sname+"说你好");
    }
    public static void main(String[] agrs){
        Student s1 = new Student();
        s1.name = "王哄";
        s1.study();
        s1.sayhello("王小二"); 
    }
}
/*
 * s1:  name王哄
 *      age
 *      id
 *      gender
 *      weight
 *      study()
 *      syahello
 */

课时31 程序执行过程的内存分析01

引用类型

  • java语言中除基本类型之外的变量类型都称之为引用类型
  • java中的对象是通过引用(reference)对其操作的

类的属性

  • 属性 field, 或者叫成员变量
  • 成员变量系统会初始化,局部变量系统不会初始化
  • 属性用于定义该类或该类对象包含的数据或者说静态属性
  • 属性作用范围是整个类体
  • 在定义成员变量时可以对其初始化,如果不对其初始化,java使用默认的值对其初始化。数值:0,0.0, boolean:false 所有引用类型:null
  • 属性定义格式
    [修饰符] 属性类型 属性名 = [默认值]
    修饰符:可以省略,可以是:public protected static final
    属性类型:可以是任意类型,基本类型和引用类型
    属性名:合法标识符都可 首字母小写 驼峰原则

类的方法

  • 面向对象中,整个程序的基本单位是类,方法是从属于类的
  • java中方法参数传递是:值传递
  • 方法定义格式

[修饰符] 方法返回值类型 方法名(形参列表){
//n条语句
}

内存分析

  • 栈 存放:局部变量
  • 堆 存放:new出来的对象
  • 方法区 存放:类的信息(代码)、static变量、常量池(字符串常量)等

内存分析实例

package com.syy;

public class Student {
    //静态的数据
    String name;
    int id;
    int age;
    String gender;
    //动态的行为
    public void study(){
        System.out.println(name+"在学习");
    }
    public void sayhello(String sname){
        System.out.println(name+"想"+sname+"说你好");
    }
    public static void main(String[] agrs){
        //通过类加载器Class Loader加载Student类。加载后,在方法区中就有了Student类的信息;
        Student s1 = new Student();
        s1.name = "王哄";
        s1.study();
        s1.sayhello("王小二"); 
    }
}
/*
 * s1:  name王哄
 *      age
 *      id
 *      gender
 *      weight
 *      study()
 *      syahello
 */      
002java300集基础学习--尚学堂(28~51面向对象)_第4张图片

课程32程序执行过程的内存分析02

002java300集基础学习--尚学堂(28~51面向对象)_第5张图片

课程33虚拟机内存管理 垃圾回收机制 c++和java的比较

垃圾回收机制(Garbage Collection)

  • 对象空间的分配:
    使用new关键字创建对象即可
  • 对象空间的释放:
    将对象赋值null即可垃圾回收器将负责回收所有“不可达”对象的北村空间
  • 要点:
    程序员无权调用垃圾回收器
    程序员可以通过System.gc()。通知GC运行,但是JAVA规范并不能保证立刻运行
    finalize方法,是JAVA提供给程序员用来释放对象或资源的方法,但是尽量少用
  • C++垃圾回收机制需要自己调用

课程34 构造方法

构造器

  • 构造器又称为构造方法,constructor
  • 构造器用于构造该类的实例
  • 格式如下:

[修饰符] 类名(形参列表){
//n条语句
}

  • 是一种特殊的方法:
    1.通过new关键字调用
    2.构造器虽然有返回值,但是不能定义返回类型(返回值的类型肯定是本类),不能再构造器里调用return
    3.如果我们没有定义构造器,则系统会自动定义一个无参的构造函数。如果已定义则编译器不会添加
    4.构造器的方法名必须与类名一致
    5.作用:构造该类的对象,经常也用来初始化对象的属性
package com.syy;

public class Car34 {
    int speed;
    
    
    public Car34(){
        System.out.println("构造一辆车");
    }

}
package com.syy;
/**
 * 测试构造方法
 * @author Administrator
 *
 */
public class Constructor {
    public static void main(String[] args){
        Car34 c = new Car34();
    }
}

实例

  • 定义一个点(point)类用来表示三维空间中的点(有三个坐标)。要求如下:
    可以生成具有特定坐标的点对象
    提供可以设置三个坐标的方法
  • 提供可以计算该点距另外点距离平方的方法
  • 代码:
package com.syy;

public class Point {
    double x,y,z;
    //通过构造器初始化对象的属性
    public Point(double _x,double _y, double _z){
        x = _x;
        y = _y;
        z = _z;
    }
    public void setX(double _x){
        x =_x;
    }
    public void setY(double _y){
        x =_y;
    }
    public void setZ(double _z){
        x =_z;
    }
    public double distance(Point p){
        double result = Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y)+(z-p.z)*(z-p.z));
        return result;
    }
    public static void main(String[] agrs){
        Point p = new Point(3,4,8);
        Point p2 = new Point(30,40,80);
        p.setX(10);
        System.out.println(p.x);
        System.out.println(p.distance(p2));     
    }   
}

课程35:方法重载_构造方法重载

重载(overload)

  • 方法的重载是指一个类中可以定义有相同得名字,但参数不同的多个方法。调用时,会根据不同的参数表选择对应的方法。
  • 两同三不同
    同一个类,同一个方法名
    不同:参数列表不同(类型 个数 顺序不同)
  • 只有返回值不同不构成方法的重载

int a(String str){},
void a{String i}
调用: a();
谁能告诉我调用的哪一个方法

  • 只有形参的名称不同,不构成方法的重载
  • 与普通方法一样,构造方法也可以重载
package com.syy;
/**
 * 测试方法重载
 * @author Administrator
 *
 */
public class Overload {
    public static void main(String[] agrs) {
        myMath m = new myMath();
        int result = m.add(4.2, 5);
        System.out.println(result);
    }
}
class myMath{
    /*
    int a;
    int b;
    public myMath(int a){
        this.a = a;
    }
    public myMath(int a, int b){
        this.a = a;
        this.b = b;
    }
    */
    public int add(int a,int b){
        return a+b;
    }
    public int add(int a,double b){
        return (int)(a+b);
    }
    public int add(double a,int b){
        return (int)(a+b);
    }
    public int add(int a, int b,int c){
        return a+b+c;
    }   
}

课时36:static变量和方法 内存分析static

static关键词

  • 在类中,用static声明的成员变量为静态变量,或者叫做:类属性、类变量
    1.它为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显示初始化
    2.对于该类的所有对象来说,static成员变量只有一份。被该类的所有对象共享
    3.可以使用“对象.类属性”来调用。不过,一般都是用“类名.类属性”
    4.static变量置于方法区中
  • 用static声明的方法为静态方法
    1.不需要对象,就可以调用(类名.方法名)
    2.在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static得成员
package com.syy;

public class Student2 {
    String name;
    int id;
    static int ss;
    public static void printSS(){
        System.out.println(ss);
    }
}
package com.syy;

public class Test {
    public static void main(String[] agrs){
        Student2.ss = 323;
        Student2.printSS();
    }
}

你可能感兴趣的:(002java300集基础学习--尚学堂(28~51面向对象))