面向对象

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

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

张三{

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");

}

}

定义一个手机类

public class Phone {

//成员变量,手机类的属性

public String brand; //成员变量是有默认值的,引用数据类型,默认为null

public int price;

public String color;

//成员方法,手机类的功能

public void call(String name){

System.out.println("给"+name+"打电话");

}

public void sendMessage(){

System.out.println("发短信");

}

}

类的使用

创建对象

类名 对象名 = 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();

}

}

定义一个测试类对上面手机类进行测试

public class PhoneTest {

public static void main(String[] args) {

//创建手机对象

//类名 对象名 = new 类名();

Phone p = new Phone(); //直接输出成员变量值

System.out.println(p.brand+" "+p.price+" "+p.color);

//给成员变量赋值

p.brand = "apple";

p.color = "gold";

p.price = 5000;

System.out.println(p.brand+" "+p.price+" "+p.color); //再次输出

//调用方法

p.call("张三");

p.sendMessage();

}

}

1个Phone对象的内存图及初始化过程

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修饰的成员只能本类中才能访问。

面向对象练习

定义一个类Demo,其中定义一个求两个数据和的方法,定义一个测试类Test,进行测试。

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());

}

}

定义一个长方形类rectangle,定义求周长girth和面积area的方法,然后定义一个测试类Test2,进行测试。

public class Rectangle {

public int a; //长方形的长

public int b;//长方形的宽

//定义方法求边长

public int girth(){

return (a+b)*2;

}

//定义方法求面积

public int area(){

return a*b;

}

}

测试类

import java.util.Scanner; //导包 键盘输入

public class RectangleTest {

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

Rectangle rect = new Rectangle(); //创建对象

System.out.println("请输入长方形的长:");

int a = input.nextInt();

System.out.println("请输入长方形的宽:");

int b = input.nextInt();

rect.a = a; //给成员变量赋值

rect.b = b;

System.out.println("长方形的周长为:"+rect.girth());

System.out.println("长方形的面积为:"+rect.area());

}

}

java rectangle获取xy_Day06 Java基础学习笔记相关推荐

  1. JAVA与DOM解析器基础 学习笔记

    要求 必备知识 JAVA基础知识.XML基础知识. 开发环境 MyEclipse10 资料下载 源码下载 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理 ...

  2. java同步锁售票_Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)...

    学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是 ...

  3. 尚学堂JAVA基础学习笔记_2/2

    尚学堂JAVA基础学习笔记_2/2 文章目录 尚学堂JAVA基础学习笔记_2/2 写在前面 第10章 IO技术 1. IO入门 2. IO的API 3. 装饰流 4. IO实战 5. CommonsI ...

  4. 【Java基础学习笔记】- Day11 - 第四章 引用类型用法总结

    Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 4.1 class作为成员变量 4.2 interface作为成 ...

  5. Java中大数据数组,Java基础学习笔记之数组详解

    摘要:这篇Java开发技术栏目下的"Java基础学习笔记之数组详解",介绍的技术点是"java基础学习笔记.基础学习笔记.Java基础.数组详解.学习笔记.Java&qu ...

  6. Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25

    Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25 目录 Rule20 接口优于抽象类 Rule21 为后代设计接口 Rule22 接口只用于定义类型 ...

  7. Java转义工具类StringEscapeUtils的学习笔记

    Java转义工具类StringEscapeUtils的学习笔记 前言 ​ 在java.commons.lang3 的包中有许多方便好用的工具类,类似于处理字符串的StringUtils,处理日期的Da ...

  8. Python3 基础学习笔记 C08 【类】

    CSDN 课程推荐:<8小时Python零基础轻松入门>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python:轻松入门& ...

  9. Python3 基础学习笔记 C05【字典】

    CSDN 课程推荐:<8小时Python零基础轻松入门>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python:轻松入门& ...

最新文章

  1. serializable接口_Java Serializable:明明就一个空的接口嘛
  2. CentOS 安装MySQL(rpm)提示错误Header V3 DSA/SHA1 Signature
  3. 多浏览器判断,切换及使用
  4. Remove Duplicates from Sorted Array II
  5. iPhone4S安装Linux系统,别失望太早 iPhone 4S其实就是iPhone 5
  6. Python_爬虫_urllib解析库
  7. 技术交流|网络安全设备为什么要用Bypass功能
  8. 计算机设备管理中的其他设备,解决方法:计算机设备管理器中的“其他设备”驱动程序问题!...
  9. 第三章 pro2信道编码咬尾卷积编码与维特比硬判决译码
  10. 苏宁大数据怎么运营_苏宁智慧门店是什么?智慧门店是如何运作的?
  11. 你看,那个人好像一条狗啊~30岁以上的程序员该何去何从?
  12. 中国石油焦市场供需态势及投资潜力预测报告2021年版
  13. AcWing 2005. 马蹄铁(DFS)
  14. python安装apk到手机_安卓手机怎么安装APK文件
  15. pta 7-20 xrf的镜子碎了?
  16. 数据分析基础学习_Matplotlib_常见图形及绘制(折线图/散点图/柱状图/直方图/饼图)
  17. Python常见问题之单双引号使用错误
  18. C/C++就业领域与学习方向 | 学习计划
  19. 天魔心法之——识人篇
  20. R语言学习之数据分析实战(一)

热门文章

  1. WORD “锁定标记”的功能
  2. 国内 Mono 相关文章汇总
  3. 对象存储、文件存储、块存储区别介绍
  4. 操作系统作业之银行家算法(c语言实现)
  5. vue项目打包App
  6. Oracle简单操作总结
  7. 微型计算机的内存乘储器,微型计算机及接口技术名词解释题及解答题
  8. 【HDU6608 Fansblog】求很大很大的数的阶乘
  9. 【Discuz!】添加表情
  10. 统信UOS系统添加Windows系统共享的打印机