/*面向对象强调的是对象,
面向过程强调的是功能行为,打开行为,关闭行为,执行行为,把多个行为封装成对象执行更强大的功能就是面向对象,是把多个函数,

个行为封装在一起,单一的函数执行对象的功能太困难,代码太长.
面向过程,就是面向的行为,执行这个行为的过程,面向对象是基于面向过程的.

对象里面,冰箱里面包括了打开关闭存储的功能. 对象里面封装了各种功能.每个功能是单一的行为.面向过程需要一一顺序选择循环

行每个行为,就是面向过程,强调行为,面向对象强调对象.  执行者>>指挥者  复杂>>简单
封装,继承,多态.

开发:找对象,建对象,用对象,维护对象之间的关系.
类提取描述了各个对象的特征.
对象就是实实在在的事物,在堆内存中用new产生.

class,描述一个事物,即描述对象的属性和行为.属性即类中的变量,行为即类型中函数方法.
类中包含成员,变量和函数,类调用,用new在堆内存中新建一个类实体.
*/   

//类描述定义对象的特征,用来封装之后创建对象.
class XFeature    //类用来描述对象实体的特征,存在于堆中,类类型对象XFeature.c  //对象特征characteristic=类
{
    String color="red";    //属性成员 color是对象的Member //存在于堆内存中
    int tyre=4;            //属性成员    //成员变量
//打印XFeature的每个成员.
    void run()            //行为成员  //成员函数(方法)
    {
        System.out.println("Print Feature + everyMember: "+"color="+color+" "+"tyre="+tyre);
    }        //类用于封装数据的功能
/*    public static void main(String[] args)
    {
        XFeature c= new XFeature();
        c.tyre=5;
    }   //可以有主函数。*/

}
//对象的各种操作.
class XObject
{
//主函数入口.
    public static void main(String[] args) //入口,用于调用别人
    {
        XFeature c= new XFeature();  //new XFeature()可以直接拿过来用。
        //类类型变量c指向对象实体.对象的属性有默认初始化值,然后再赋显示值
        //改变对象属性,即指挥对象做使用,指挥对象方式:对象.成员
        c.color="yellow";  //对象XFeature.c的成员
        c.run();  //yellow
        XFeature c1= new XFeature();  //建立类XMember的对象实体c1.
        c1.run();  //red
        XFeature c2 = c;  //没有新建实体,c2获取c的值和c一样指向同一个实体.
//可以使用匿名对象new XFeature().run()直接调用成员函数,在堆内存中新建一个无名实体,运行完就找不到了。
//可以使用匿名对象作为实际参数进行传递。不用起名字传递给函数调用。
        changeXFeature(new XFeature()); //匿名直接传递,不用在栈中定义一个对象名字的变量指向//直接使用change函数
        //XFeature c3= new XFeatur();
        //changeXFeature(c3);
        Person p= new Person(); //在没写构造函数的时候调用默认空构造函数。
        //p.age= -20; 访问方式无法访问
        p.speak();
        p.setAge(-3); //需要通过函数访问。
        p.setAge(120);
        Person p1= new Person();  //调用第一个构造函数
        Person p2= new Person("Person2"); //调用第二个构造函数
//构造函数间相互调用this(参数),内部初始化动作.
        Person p3= new Person("Person3", 23); //调用两个参数的构造函数
//新建两个对象,执行了构造代码块.       
        Person p5= new Person("p5",20);
        Person p4= new Person("p4",35);

//调用p5的比较年龄功能,这个功能直接打印出年龄是否相同.       
        p5.compareSay(p4);
        String b= p4.getName();
        System.out.println("-----------------------------------------------------"+b); //外部访问需要用getName,

       

    }
//用于更改XFeature类创建的对象的成员,传进来的对象可以没有名字,
//changeXFeature(new XFeature());但是匿名对象操作完就找不到了.
    public static void changeXFeature(XFeature c)
    {
        c.tyre= 5;
        c.color="black";
        c.run();
    }

}

//封装
//对象的特征Feature。封装Encapsulation(隐藏(透明)对象的属性和实现细节,仅对外提供公共访问的方式)
//将变化隔离,便于使用,提高重用性,提高安全性,
//封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏 ,提供公共方法对其访问.
//函数是Java最小的封装体。(结果)(名字)(参数){过程不需要理解};
//类里面的函数有权限:public(共有) private(私有)隐藏,控制访问操作//对访问操作进行限制。
//包,
//框架。
class Person
{
//构造函数是可以被私有化的。private之后的构造函数不能用来初始化对象
//this.关键字,用于区分局部变量和成员变量。
//this.代表本类的对象,(代表它所在函数所属对象的引用)
//哪个对象在调用this.所在函数,this.就属于哪个对象。有时可以省略.
//this语句用于构造函数间互相调用,没"."
   
//构造函数,对象一建立被初始化就有年龄.
    Person(int age)
    {
        this.age=age;
    }
    Person()
    {
        System.out.println("A:I'm "+this.name+" "+"My age ="+this.age);
        cry();
    }
//用于初始化的三种构造函数
    Person(String name)
    {
        this.name=name;
        System.out.println("B:I'm "+this.name+" "+"My age ="+this.age);
        cry();
    }
//构造函数间调用,一个构造函数调用另一个构造函数用this语句.
    Person(String name,int age)
    {
//调用只初始化name的构造函数this(name)初始化了一个对象,而这个对象也是调用本构造函数的同一个对象.
//this语句只能定义在构造函数的第一行.只能用在构造函数内.只能调用一次.
//不允许循环调用,无法初始化,没有结果.
//初始化年龄,调用初始化年龄的构造函数,
        this(name); //只能用一次
        this.age=age;//这也是一个初始化动作,要先执行,必须放在第一行.
        if (age==0)
        {
            System.out.println("C:I'm "+this.name+" "+"My age ="+this.age);
            cry();
        }
        else
            System.out.println("C:I'm "+this.name+" "+"My age ="+this.age);
            System.out.println("I won't cry");
    }

//构造代码块 ,给对象初始化。对象一建立优先于构造函数运行,
//构造函数是给对应的对象初始化,构造代码块给所有的对象统一初始化。
//用来定义对象共性初始化内容。优先执行。

//构造代码块.
    {
        System.out.println("Person structure code piece run"); //initial
    }

/*构造函数*/
//函数名和他所在类名一致。没有定义返回值类型,没有return语句。初始化主函数新建的堆中对象。
//多个构造函数重载,一个类能产生多个对象,每个对象可以对应不同的初始化构造函数。
//当一个类中没有构造函数,系统默认加入一个空参数的构造函数初始化。
//  Person p= new Person();
//    Person()
//    {

//    }   
//默认构造函数,自定义任意一个构造函数,此函数就消失。新建的对象如果没有参数会找不到相应的构造函数。
//构造函数在对象一建立就运行,给对象初始化,一般函数只有调用才执行,给对象添加对象具备的功能,
//一个对象建立,构造函数只运行一次,一般函数可以被调用多次。
//当事物存在就具备一些特性或行为,那么这些内容定义在构造函数中。
//是否需要未知内容参与运算,需要就在构造函数中定义参数。

//定义两个成员变量.
    private int age; //私有仅仅是封装的一种最小体现形式,
    //提供一个访问方式,get or set。//将访问加上一个控制,//提高安全性
    private String name;
    public void setAge(int age)//在提供访问私有变量的方式同时加入限制条件。0-120逻辑判断等语句,提高代码的健壮性
    {
        if (age>=0 && age<=120 )  //a是栈中局部变量
        {
            this.age=age;        //age是堆中新建对象的成员
            speak();
        }
//判断输入的年龄是否正确.
        else if (age>120)
        {
            System.out.println("Parameter's too Big");
            return;
        }
        else if (age<0)
        {
            System.out.println("Parameter's too Small");
            return;
        }
    }   
//提供访问变量的方法.
    public int getAge() //为变量提供的访问方式,这里提供了两种,一种get,一种set
    {
        return this.age;
    }
    public void setName(String name)
    {
        this.name=name;
    }
    public String getName()
    {
        return this.name;
    }
//成员函数,说出名字和年龄.
    void speak()
    {
        if (this.age==0)
        {
            System.out.println("I'm"+" "+this.name+" My age is "+this.age);
            cry();
        }
        else
            System.out.println("I'm"+" "+this.name+" My age is "+this.age);
    }
//哭的功能.
    public void cry()
    {
        System.out.println("cry......");
    }
//加入比较年龄是否相同的功能.是否是同龄人.
    public void compareSay(Person p)
    {
//this.的应用,定义类中的功能时,该函数内部要用到调用该函数的对象,这是在成员前加this.表示这个对象.
//但凡本类功能内部使用到本类对象,都用this.表示调用该功能的对象.
        if (this.age==p.age)  //自身的年龄是否等于传进来的p.age
        {
           
            System.out.println("My age is the same to "+p.name);
        }
        else
            System.out.println("My age is different to "+p.name);
    }
//--------------------------------------------------------------------------------//
}

XObject.java 对象还没写完,希望电脑不会丢失。坏笑,早点见。的更多相关文章

  1. 前端性能测试工具 : dynaTrace Ajax (还没写完)

    今天开始写这个工具, #什么是dynaTrace Ajax? 随着 jQuery.Dojo.YUI 等框架的兴起让构建 Web2.0 应用更加容易,但随之带来的定位等应用问题也越来越难,尤其是与性能相 ...

  2. 【creo】CREO5.0+VS2019配置(还没写完)

    欢迎大家一起学习使用c++对CREO5.0二次开发. 第1步,建立开发目录:在E盘(或者其他盘)新建creo_cpp文件夹,文件夹中新建ABC_TOOLS用来存放我们开发的工具,CODE文件夹存放开发 ...

  3. Word 双栏排版最后多一页空白页删不掉、左栏文字没写完就到右栏了

    1. 问题 问题:Word双栏排版,最后多一页空白页,删不掉.如图: 原因分析:删不掉是因为末尾文字处其实有个下一页分节符,只不过可能看不到. 如何清晰的看到? 视图 > 大纲,就可以看到了.如 ...

  4. Java反射机制的浅显理解(这篇文章还没写好,留个草稿给自己看的)

    目前只是有一个大概的理解,先把自己感觉容易立即的概念放这里,等以后结合实际工作理解深刻了再来补充. 一.什么是Java反射机制?(多种定义) 1. JAVA反射机制是在运行状态中,对于任意一个类,都能 ...

  5. python Web抓取(一)[没写完]

    需要的模块: python web抓取通过: webbrowser:是python自带的,打开浏览器获取指定页面 requests:从因特网上下载文件和网页 Beautiful Soup:解析HTML ...

  6. mock的使用及取消,node模仿本地请求:为了解决前后端分离,用户后台没写完接口的情况下

    借鉴:https://www.jianshu.com/p/dd23a6547114 1.说到这里还有一种是配置node模拟本地请求 (1)node模拟本地请求: 补充一下 [1]首先在根目录下建一个d ...

  7. 【Luogu】【关卡2-7】深度优先搜索(2017年10月)【AK】【题解没写完】

    任务说明:搜索可以穷举各种情况.很多题目都可以用搜索完成.就算不能,搜索也是骗分神器. P1219 八皇后 直接dfs.对角线怎么判断:同一条对角线的横纵坐标的和或者差相同. #include < ...

  8. 没写完。【java】IDEA-调教界面、设置语言、插件的使用

    步骤: 1.官方网站:https://www.jetbrains.com/idea/ (zip)版本:https://download.jetbrains.com.cn/idea/ideaIC-202 ...

  9. java 静态方法 java 类中的方法无论静态还是非静态的都可以使用静态变量 而静态方法只能使用静态变量 (因为对象还没创建 所以不能在静态方法里面用this)

随机推荐

  1. 史上最详cxf-Springmvc-maven实现webservice教程(转)

    虽知道webservice,工作两年一直没使用过,最近不忙趁机研究了下,实现了简单的服务端及客户端调用.鉴于慕课网没有webservice的教程,大多又都是学生,就在这里跟大家分享下,内容比较详细.大 ...

  2. JVM之几种垃圾收集器简单介绍

    本文中的垃圾收集器研究背景为:HotSpot+JDK1.7 一.垃圾收集器概述 如上图所示,垃圾回收算法一共有7个,3个属于年轻代.三个属于年老代,G1属于横跨年轻代和年老代的算法. JVM会从年轻代 ...

  3. android微信支付总结+自己搭建服务器

    1.前期注册操作 1-1:微信开发平台:https://open.weixin.qq.com/ 1-2:创建移动应用 签名获取: 1.将自己的apk签名打包,运行到手机上. 2.将微信支付的签名工具, ...

  4. 设置button键隐藏文字text

     新手的第一天,从最简单的view开始做起.首先先来做个最简单的button携带不可见文本,想要的时候,get它就行了. 编程的都知道,get .set方法,就不多介绍了. 创建一个类,MyButto ...

  5. C语言-循环结构及break、continue

    循环结构 --1-- 结构循环 1.1 while循环 1.2 do…while循环 1.3 for循环 --2-- break和continue 2.1 break关键字 2.2 continue关 ...

  6. js 判断所选时间(或者当前时间)是否在某一时间段用于不同时间段显示不同的客服qq

    //qq交谈 var nowtimes= new Date(); var starttimes="16:30"; var endtimes="23:59"; v ...

  7. java性能监控常用命令

    jps -m -l:主要用来输出JVM中运行的进程状态信息 jstack -l pid 来观察锁持有情况 jsatck pid | grep pid(十六进制):输出进程pid的堆栈信息 jmap - ...

  8. MySQL int(11)及int(M)解析

    默认创建int类型的字段,SHOW CREATE TABLE table_name或DESC table_name常常可以看到其默认情况为int(11). 这个int(M)很多时候都会被误解为最大范围 ...

  9. Shell脚本检测Tomcat是否正在运行

    #!/bin/sh # configurations # computer 设备名称 # target 监控目标 # watcher 跟踪者(邮箱) computer="ehetong&qu ...

  10. Cheatsheet: 2016 10.01 ~ 10.31

    Docker Introduction to Docker Monitoring Database MongoDB: The Good, The Bad, and The Ugly Web 4 Key ...