面向对象
当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高。可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了,这时就开始改进,能不能把这些步骤和功能再进行封装,封装时根据不同的功能,进行不同的封装,功能类似的,或者有关联关系的封装在一起,这样结构就清晰了很多。用的时候,找到对应的类就可以了。这就是面向对象的思想。

比如,有如下三个人,每个人都有自己的功能:使用伪码体现

张三{
       Public void  部署程序(){
            System.out.println("部署java程序");
       }
    }

李四{
       Public  void 写代码(){
            System.out.println("写java代码")
       }
    }

老板{
        Public static void main(String[] args){
            李四.写代码();
            张三.部署程序 ();
            ...
        }
    }
面向过程:强调的是过程,每个过程及实施都要自己一步一步去实施,考虑的事情比较多
例:首先学习Java语法,然后编写Java程序,然后编译,运行其中的每个细节都要自己去实施;

面向对象:强调的是对象,需要某些功能的时候,去找具有这样功能的对象,然后由对象去调用功能
例:知道张三会写Java程序,去找张三,让张三写程序,把结果交给我只需要找人去干活,然后等待结果即可。
是一种更符合我们思想习惯的思想
可以把事情更加简单化,不必考虑事情的每一个细节,只在宏观把握
将我们从执行者变成了指挥者
类和对象
对象:可以理解成具有某些功能的综合体
类:同一种事物的抽象,将他们的共同属性和行为抽象出来
面向对象的编程过程:实际上就是不断的编写各种“类”,然后利用类去创建对象,再使用对象,指挥对象完成功能

Java中的类:
有成员变量对这个类的属性进行描述;有成员方法对这个类的行为进行模拟。

成员变量 -- 类的属性

成员方法 -- 类的功能

总结Java中的类和对象

类:一组相关的变量和方法的结合,是一个抽象的概念
对象:是类实例化创建出来的,是“类”这个概念的具体表现形式
举例

学生(类):是一个类,它是一个抽象的概念,有学号,姓名,年龄等属性;有学习,写作业等行为的都属于学生,不是指的某一个个体
张三(对象):是学生类的一个具体对象,他是一个学生,具有学生的属性和行为
  public class Student {
        //成员变量,学生类的属性
        public String name;         //成员变量是有默认值的,引用数据类型,默认为null
        public int age;     //0
        public String address;
        //成员方法,学生类的行为
        public void study(){
            System.out.println("study");
        }
        public void eat(){
            System.out.println("eat");
        }
        public void sleep(){
            System.out.println("sleep");
        }
    }
 类名 对象名 = new 类名();
对象名.成员变量;
    对象名.成员方法;
////定义测试类,这个类主要是用来存放main方法,让JVM执行,不是用来创建对象用的
    import home.Student;    
    public class StudentTest {
        public static void main(String[] args) {
            //类名 对象名 = new 类名();
            Student stu = new Student(); 
            //输出成员变量值
            System.out.println(stu.name);
            System.out.println(stu.age);
            System.out.println(stu.address);
            //给成员变量赋值
            stu.name = "张三";
            stu.age = 24;
            stu.address = "北京昌平";
            //重新输出成员变量值
            System.out.println(stu.name+stu.age+stu.address);
            //调用方法   对象名.方法名
            stu.study();
            stu.eat();
            stu.sleep();
        }
    }

Phone p = new Phone();

Phone p这一步实在栈空间内开辟空间,也叫压栈;new Phone()这一步加载Phone.class文件,同时在堆中开辟内存空间;

sop(p.brand + " " + p.price + " " + p.color)这一步是将实例变量显示初始化值;

p.brand = "三星"; p.price = 3999; p.color= "白色" 这三步是给实例变量赋值并覆盖初始值;

p.call("乔布斯");p.sendMessage();p.playGame(); 这三步实在调用成员方法;

首先定义main方法,main方法储存在方法区的静态区,加载Phone。class文件创建对象Phone p 进行压栈,new Phone在堆中开辟空间并给成员变量初始化值,给成员变量重新赋值,再之后通过main方法中的对象p来调用成员方法,并进行压栈,方法执行完毕后进行弹栈。

实例变量与局部变量

定义:

实例变量:属于类的实例对象,没有static修饰的,目前接触到的成员变量都是实例变量

局部变量:属于方法的变量,只在方法内有效

区别:

在类中的位置不同

实例变量 在类中,并且在方法外定义

局部变量 方法内或者方法声明上(形参)定义

在内存中的位置不同

实例变量 堆内存(属于对象)

局部变量 栈内(属于方法)

生命周期不同

实例变量 随着对象的存在而存在,随着对象的消失而消失

局部变量 随着方法的调用而存在,随着方法的调用完毕而消失

初始化值不同

实例变量 有默认的初始化值(0/false/null)

局部变量 没有默认的初始化值,必须先定义,赋值,才能使用。

形式参数

基本类型作为形式参数:传值,实际上就是把实参的值拷贝一份给形参,形参不论怎么改动,都不会影响到实参的值
引用类型作为形式参数:传递的是实参所指向的实例对象或者数组,即:传递的是实参的引用(地址值),形参和实参具有相同的引用,所以,形参对引用的改动能立即从实参上看到

public class Demo1{
    public int sum(int a ,int b){
        return a+b;
    }
    public void show(){
        System.out.println("学习");
    }
}
测试类
public class DemoTest {
    public static void main(String[] args) {
        Demo1 d = new Demo1();
        System.out.println(d.sum(5, 6));
        d.show();
    }
}
封装概述

封装是面向对象编程的三个重要特征之一,其余两个是多态和继承。

封装指的是隐藏对象的属性和实现细节,不允许外部直接访问对象的内部信息,而是通过该类提供的方法来实现对内部信息的访问。
把对象的实例变量和实现细节隐藏起来,不允许外界直接访问

把方法暴露出来,让方法来控制对这些成员变量进行安全的访问和操作

封装练习
public class StudentDemo1 {
    private String name;  //封装名字
    private int age;    //封装年龄
    public String getName(){  //通过类内部方法获取变量
        return name;
    }
    public void setName(String name){  //给变量进行赋值
        this.name = name;
    }
    public int getAge(){
        return age;
    }
    public void setAge(int age){
        this.age = age;
    }
}
测试类
public class StudentDemo1Test {
    public static void main(String[] args) {
        StudentDemo1 sd1 = new StudentDemo1(); //创建对象
        sd1.setName("张三");    //给变量赋值
        System.out.println(sd1.getName());  //通过引用方法对变量进行打印
        sd1.setAge(25);
        System.out.println(sd1.getAge());
    }
}
Private 关键字

是一个权限修饰符。

可以修饰成员(成员变量和成员方法)

被private修饰的成员只能本类中才能访问。

面向对象练习
 public class Demo {
        public int num1;
        public int num2;
        public int getSum1(){
            return num1+num2;
        }
    }
    测试类
    public class DemoTest {
        public static void main(String[] args) {
            Demo d = new Demo();
            d.num1 = 10;
            d.num2 = 20;
            System.out.println(d.getSum1());
        }
    }

java基础第6天的更多相关文章

  1. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  2. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  3. 【JAVA面试题系列一】面试题总汇--JAVA基础部分

    JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...

  4. 最适合作为Java基础面试题之Singleton模式

    看似只是最简单的一种设计模式,可细细挖掘,static.synchronized.volatile关键字.内部类.对象克隆.序列化.枚举类型.反射和类加载机制等基础却又不易理解透彻的Java知识纷纷呼 ...

  5. java基础练习 字符串,控制流,日历,日期等

    1,对基本控制流程的一些练习 package org.base.practice3; import org.junit.Test; /** * Created with IntelliJ IDEA. ...

  6. Java基础知识【下】( 转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

  7. Java基础知识【上】(转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608272 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

  8. java基础学习03(java基础程序设计)

    java基础程序设计 一.完成的目标 1. 掌握java中的数据类型划分 2. 8种基本数据类型的使用及数据类型转换 3. 位运算.运算符.表达式 4. 判断.循环语句的使用 5. break和con ...

  9. Java基础加强之多线程篇(线程创建与终止、互斥、通信、本地变量)

    线程创建与终止 线程创建 Thread类与Runnable接口的关系 public interface Runnable { public abstract void run(); } public ...

  10. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

随机推荐

  1. JS获取客户端系统当前时区

    <script> function getClientTimezone(){ var oDate = new Date(); var nTimezone = -oDate.getTimez ...

  2. Console 窗口

    Console窗口 记住,即是在GUI程序中你也可以拥有一个Console窗口.----这意味着你可以再GUI程序中使用printf.puts. Console窗口由系统的驱动设备程序负责,即是你的程 ...

  3. 索引查找Java实现

    package 索引查找; import java.util.Scanner; public class IndexSearch { public static long stu[] = { 1080 ...

  4. 前端优化点(此文转载 http://mp.weixin.qq.com/s/6mVVKmqDL_xYl15AeoJTWg)

    此文转载自:http://mp.weixin.qq.com/s/6mVVKmqDL_xYl15AeoJTWg (原文地址) 围绕前端的性能多如牛毛,涉及到方方面面,以下我们将围绕PC浏览器和移动端浏览 ...

  5. CSS实现超出DIV宽度文字自动隐藏并显示省略号

    当文字超出DIV宽度时,超出的文字部分省略,并用显示省略号代替,css代码如下: div.ellipsis { padding-left: 5px; text-align: left; text-ov ...

  6. Android实践项目汇报

    Android实践项目:推箱子 推箱子是一款来自日本的古老游戏,其设计目的是训练人的逻辑思维能力.游戏场景一般是设定在空间狭小的仓库中,要求把箱子摆放到指定位置.这就要求玩家巧妙的运用有限的空间和通道 ...

  7. phpstorm2016.1 添加对Drupal的编程支持

    一.前言 phpstorm作为目前对drupal支持最好的开发工具之一,是drupal模块开发的首选工具.今天我就来谈谈最新的phpstorm如何添加对drupal模块的支持. 相关环境:操作系统ub ...

  8. Vmware 设置NAT模式

    NAT模式,就是让虚拟系统借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网.也就是说,使用NAT模式可以实现在虚拟系统里访问互联网. NAT模式下的虚拟系统的TCP/IP配置信息是由V ...

  9. SDN前瞻 该来的来了!SDN 软件定义网络

    SDDC:Software Defined Data Center 软件定义数据中心,全数据中心软件化. 在我们接触SDN概念之前,服务器虚拟化,软件虚拟化技术已经是非常成熟了.如果网络能够被虚拟化, ...

  10. SSM(Spring+SpringMVC+Mybatis)+Mysql 框架整合搭建流程以及其间注意事项

    复习SSM框架,太久没用自己手动撘一个,发现自己还是有很多地方忘记了和没注意的事项... 首先,直接给出总流程: 零.引jar包 1.引包(或者写maven.pom) 一.数据库部分 设计数据库各表结 ...