Java学习笔记8(面向对象一:概念、private)
面向过程的思想:遇到问题,想,我该怎么解决这个问题?然后一步一步解决
面向对象的思想:遇到一件事的时候,思考,我该让谁来做,至于他怎样去做,不是我需要考虑的事情,只要最后做好就行
实际举例:我们要组装一台新电脑
面向过程:我们上网查询各种硬件参数性价比,去商城观察询价,然后分析出最合适的,买好各种配件自己组装好
面向对象:请一个懂组装电脑的专家,告诉他我要一台新电脑,他组装好之后给我
面向对象的好处:
1.更符合人们的思考习惯
2.面向对象更像是一个指挥者,而面向过程像执行者
3.面向对象的思维方式可以将复杂的问题简单化
4.世界万物皆是对象
举例:用类的方式,描述现实中的汽车
定义汽车:
public class Car {
//定义颜色
String color;
//定义轮胎个数
int count;
//定义跑的功能
public void run(){
System.out.println(color+"色的"+count+"轮车在跑");
}
}
运行汽车:
public class CarTest {
public static void main(String[] args) {
Car c = new Car();
c.color = "黑";
c.count = 3;
c.run();
}
}
运行后:

对象的内存分析:
1.main方法进入栈中运行
2.创建一个Car类,在堆内存开一片空间,存入这个新建的对象,类的成员变量跟随进入堆中,并赋予默认值(null,0)
3.这个内存地址传给引用型变量c,即c指向内存中的这个对象
4.c指向的内存中的变量color,count被修改
5.方法run由对象c调用,进栈执行
6.run方法执行完毕,释放栈内存
7.main方法结束,释放栈内存
8.c变量消失,堆内存中的对象被清除,释放内存
类和对象的关系:
类:对某一类事物的抽象描述
对象:用于表示现实中该事物的个体
类用于描述多个对象的共同特征,相当于一个模板
对象是通过类创建出来的,一个类可以对应多个对象
写在类中的变量是成员变量,写在类的方法中的变量是局部变量,区别:
作用域
成员变量:作用范围是整个类
局部变量:作用于方法内或语句内
默认值
成员变量:有默认值(null,0,0.0)
局部变量:没有默认值,不赋值不能使用
内存位置
成员变量:跟随对象进入堆内存中进行存储
局部变量:跟随自己的方法进入栈内存
生命周期
成员变量:跟随对象,储存在堆内存中,等待JVM清理,生命周期相对更长
局部变量:跟随方法的,只要方法出栈,就不存在了,生命周期相对更短
面向对象三大特征:封装,继承,多态
封装表现:
方法就是一个最基本的封装体
类其实也是一个封装体
封装的特点:
1.提高了代码的复用性
2.隐藏了实现细节,还要对外提供可以访问的方式,便于调用者的使用
3.提高了安全性
封装的现实举例:
一台电脑机箱,里面有CPU,内存,硬盘等部件,如果散落在外边,会有很多不安全因素,因此把它们放在机箱里,并且提供各种插口供人们使用
private关键字:
定义一个类:
public class Person {
//人的姓名年龄,成员变量
String name;
int age;
//说话功能
public void speak() {
System.out.println(age+"岁的"+name+"在说话");
}
}
测试:
public class PersonTest {
public static void main(String[] args) {
Person p = new Person();
p.age = -200;
p.name = "张三";
p.speak();
}
}
运行后:

不合常理,于是我们想,如果不能修改age变量,这个问题就可以解决,于是有了private关键字
被private修饰的成员,只能在自己的本类中使用
可以对私有的成员,提供公共的访问方式:方法
public class Person {
// 人的姓名年龄,成员变量
String name;
private int age;
// 定义方法,对age赋值
public void setAge(int a) {
if (a < 0 || a > 100) {
age = 20;
} else {
age = a;
}
}
//定义方法,获取age
public int getAge(){
return age;
}
// 说话功能
public void speak() {
System.out.println(age + "岁的" + name + "在说话");
}
}
public class PersonTest {
public static void main(String[] args) {
Person p = new Person();
p.setAge(80);
System.out.println(p.getAge());
p.name = "张三";
p.speak();
}
}
Java学习笔记8(面向对象一:概念、private)的更多相关文章
- java学习笔记6(面向对象1:概念,private)
1.思想: 面向过程的思想:遇到问题时想,我该如何做,然后分步骤实现: 面向对象的思想:遇到问题时想,我该派谁去做这件事,至于他怎么做,与我无关,我只要最后的结果. 实际举例:我们要组装一台电脑: 面 ...
- Java学习笔记之---面向对象
Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...
- 【原】Java学习笔记019 - 面向对象
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 仔细想一想,Ani ...
- Java学习笔记之面向对象、static关键字
一周Java学习总结 今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字. 面向对象 现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的 ...
- Java 学习笔记(4)——面向对象
现在一般的语言都支持面向对象,而java更是将其做到很过分的地步,java是强制使用面向对象的写法,简单的写一个Hello Word都必须使用面向对象,这也是当初我很反感它的一点,当然现在也是很不喜欢 ...
- 疯狂java学习笔记之面向对象(二) - 成员变量与局部变量
Java变量按其作用域可分为:成员变量和局部变量.注意:在Java中是没有全局变量这个概念的 一.成员变量: 成员变量是在类中定义的变量,具体可分为类变量与实例变量--有无static修饰 实例变量的 ...
- 疯狂java学习笔记之面向对象(一) - 定义类、方法、构造器
Java面向对象 1.定义类 2.创建对象.调用方法 类和对象: 某一类对象的概念定义. 比如:人类 - 抽象出来的概念(不特指某个人) 对象 - 在类的概念下产生的一个实例,它就是一个对象了. ja ...
- 【原】Java学习笔记016 - 面向对象
package cn.temptation; public class Sample01 { public static void main(String[] args) { // this 关键字 ...
- Java学习笔记--关于面向对象的思考
1.不可改变的类生成对象以及变量的范围 2. 关键词this的使用 3.用类抽象的思想制作软件 4.通过关系模型建立类 5.使用面向对象的范例来设计程序,遵循类设计指导. 已经学习了:怎么定义类已经创 ...
- Java学习笔记:01面向对象-继承
01面向对象-继承 一.java中的数据类型 1.基本数据类型:四类 八种 byte(1) boolean(1) short(2) char(2) int(4) float(4) long(8) do ...
随机推荐
- 关于React组件之间如何优雅地传值的探讨
闲话不多说,开篇撸代码,你可以会看到类似如下的结构: import React, { Component } from 'react'; // 父组件 class Parent extends Com ...
- Linux常用操作命令及快捷键
Linux操作命令: 大体分为两类: 1.内部命令 help 命令(查看内部命令) 2.外部命令 命令 --help(查看外部命令) type 命令:用来查看该命令是内部命令还是外 ...
- 【开源】接口管理平台eoLinker AMS 开源版3.1.5同步线上版!免费增加大量功能!
概要:eoLinker是一个免费开源的针对开发人员需求而设计的接口管理工具,通过简单的操作来帮助开发者进行接口文档管理.接口自动化测试.团队协作.数据获取.安全防御监控等功能,降低企业的接口管理成本, ...
- case
case $变量 in "值1") 执行语句; ;; "值2") 执行语句; ;; ... *) 默认执行语句 ;; esac #!/bin/bash read ...
- Linux网络配置。Win10能ping虚拟机但虚拟机ping不通Win10,关闭Win10防火墙就好。
仅主机模式:配置VMnet1与虚拟机在同一个网段 ifconfig查看网卡名: ifconfig ens33 192.168.1.2: ifconfig查看是否配置成功: 在Windows物理机上pi ...
- (转)为Xcode添加删除行、复制行快捷键
转摘链接:http://www.jianshu.com/p/cc6e13365b7e 在使用eclipse过程中,特喜欢删除一行和复制一行的的快捷键.而恰巧Xcode不支持这两个快捷键,再一次的恰巧让 ...
- 手动安装cloudera manager 5.x(tar包方式)详解
官方共给出了3中安装方式:第一种方法必须要求所有机器都能连网,由于最近各种国外的网站被墙的厉害,我尝试了几次各种超时错误,巨耽误时间不说,一旦失败,重装非常痛苦.第二种方法下载很多包.第三种方法对系统 ...
- ArcGIS API for JavaScript 4.2学习笔记[7] 鹰眼(缩略图的实现及异步处理、Promise、回调函数、监听的笔记)
文前说明:关于style就是页面的css暂时不做评论,因为官方给的例子的样式实在太简单了,照抄阅读即可. 这篇文章有着大量AJS 4.x版本添加的内容,如监听watch.Promise对象.回调函数. ...
- bzoj 1855: [Scoi2010]股票交易
Description 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预测到了未来T天内某只股票的走势,第i天的股票买入价 ...
- [C#]使用Redis来存储键值对(Key-Value Pair)
本文为原创文章.源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称.作者及网址,谢谢! 开发工具:VS2017 语言:C# DotNet版本:.Net FrameWork 4.5及以 ...