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

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

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

本章概述

面向对象概念

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

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

面向对象编程起源

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

面向对象编程优点

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

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

面向对象编程初步

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


课程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
 */      

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

课程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();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,556评论 18 399
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,771评论 1 10
  • Win7下如何打开DOS控制台? a:开始--所有程序--附件--命令提示符 b:开始--搜索程序和文件--cmd...
    逍遥叹6阅读 1,586评论 4 12
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,627评论 0 11
  • 2017年的烟花一过,我正好是个24岁的小姑娘了。 困惑随年龄,只增不减。关于家庭爱情和仕途。爸妈两头亲戚...
    小赖童鞋2012阅读 157评论 0 0