JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块
JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块
加油吧,节奏得快点了
1.概述
上篇幅也是讲了这点,这篇幅就着重的讲一下思想和案例
就拿买电脑来说吧,首先,你不懂电脑,你去电脑城买电脑,和大象装冰箱里一样,是什么步骤?咨询 砍价 ,谈妥了就那电脑走人,对吧,这就是面向过程的思想,而面向对象是:你有一个哥们,他懂电脑,什么都会,你只要带他去,就行,你这个哥们就是对象,在JAVA中,我们就是操作一个对象去完成各种各样的操作的,这就是面向对象的思想
2.成员变量
面向对象有三大特征
- 封装
- 继承
那具体是什么意思呢?
我们开发的话,就是就是在找对象,没有对象的话,就new 一个对象,对象和类,对象和对象都是有关系的,我们需要去维护类就是生活中对事物的描述
对象就是这类事物实实在在存在的个体需求:描述汽车(颜色,轮胎个数),描述事物就是在描述事物的属性和行为
我们可以直接定义一个class
//公共的 类 类名
public class HelloJJAVA {
// 公共的 静态 无返回值 main方法 数组
public static void main(String[] str) {
Car car = new Car();
// 输出颜色
System.out.println(car.color + "的小汽车");
// 输出轮胎个数
System.out.println(car.num + "个轮子");
// 输出行为
car.run();
}
}
/**
* 汽车类
*
* @author LGL
*
*/
class Car {
// 颜色
String color = "红色";
// 轮胎个数
int num = 4;
// 行为
void run() {
System.out.println("我是" + color + "的小汽车,我有" + num + "个轮子");
}
}
这样大家看的懂吗,我们猴子姐new一个Car就可以
其实定义类,就是描述事物。就是在定义属性和行为,属性和行为共同成为类中的成员(成员变量)
3.局部变量
其实局部变量我们一直在写,他和成员变量的区别在于作用的范围不一样
我们以上述的例子
- 成员变量:作用在全局中
- 局部变量:作用在Car类里
在内存中的存储和位置
- 成员变量在堆内存中,因为对象的存在才在内存中存在
- 局部变量在栈内存中
4.匿名对象
这是一个小知识点,匿名换句话其实就是没有名字的意思
- 匿名对象是对象的简化版
- 匿名对象两种使用情况
- 当对对象方法仅进行一次调用的时候
- 匿名对象可以作为实际参数进行传递
我们用简单的例子
//正常的写法
Car c = new Car();
c.num = 5;
//匿名对象
new Car().num = 5;
可以看到我不起名字直接去更改num的值了,这就是匿名对象
第二种使用方式实际参数去传递,其实在上面我用到了
// 输出颜色
System.out.println(new Car().color + "的小汽车");
这样就OK了
5.封装
OK,终于说道我们的核心思想了Encapsulation
封装的含义:是指隐藏的对象的属性和实现细节,仅对外提供访问方式
好处
- 将变化隔开
- 便于使用
- 提高复用性
- 提高安全性
封装原则
将不需要对外提供的内容都隐藏起来;
把属性都隐藏,提供对外访问方式我们写例子
//公共的 类 类名
public class HelloJJAVA {
// 公共的 静态 无返回值 main方法 数组
public static void main(String[] str) {
showString("我是封装");
}
/**
* 封装
*
* @param str
*/
public static void showString(String str) {
System.out.println(str);
}
}
这个就是最简单的封装了,你给我个字符串我就打印,过程你不必知道,函数本身就是一个最小的封装体
6.private
私有的,怎么使用?
//公共的 类 类名
public class HelloJJAVA {
// 公共的 静态 无返回值 main方法 数组
public static void main(String[] str) {
Person p = new Person();
p.age = 20;
p.speak();
}
}
class Person {
int age;
// 说话方法
void speak() {
System.out.println("我今年" + age + "岁");
}
}
我们现在的代码是这样写的,输出的结果
这里我们直接访问了arg,这里就存在了一个安全隐患,这里也就是用到private修饰符去修饰arg了
在这里,就看到一个错误提示了,因为我们用private修饰了之后,你就不能拿到了
private:私有,权限修饰符:用于修饰类中的成员(成员变量,成员函数)
注意的是,私有只在本类中有效那我们怎么去访问呢?你既然私有了,就需要对外提供一个方法
//公共的 类 类名
public class HelloJJAVA {
// 公共的 静态 无返回值 main方法 数组
public static void main(String[] str) {
Person p = new Person();
// p.age = 20;
p.setAges(20);
p.speak();
}
}
class Person {
// 私有
private int age;
/**
* 对外提供方法
*
* @param a
*/
public void setAges(int a) {
age = a;
}
// 说话方法
void speak() {
System.out.println("我今年" + age + "岁");
}
}
我们这样做,也是可以的
但是我们一般也不会这样做,我们有规范
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
所以我们的完整代码应该是这样写
//公共的 类 类名
public class HelloJJAVA {
// 公共的 静态 无返回值 main方法 数组
public static void main(String[] str) {
Person p = new Person();
// p.age = 20;
// p.setAges(20);
p.setAge(20);
p.speak();
}
}
class Person {
// 私有
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// 说话方法
void speak() {
System.out.println("我今年" + age + "岁");
}
}
输出的结果
但是你要切记,注意,私有仅仅是封装的一种表现形式;
我们之所以对外提供访问方式就是为了方便我们加入逻辑判断语句,对访问的数据进行操作,提高代码的健壮性
7.构造方法
特点
- 函数名和类名相同
- 不用定义返回值类型
- 不可以写return语句
作用
- 给对象进行初始化
注意
- 默认构造函数的特点
- 多个构造函数是以重载的形式存在的
//公共的 类 类名
public class HelloJJAVA {
// 公共的 静态 无返回值 main方法 数组
public static void main(String[] str) {
Person p = new Person();
}
}
class Person {
//构造方法
public Person() {
System.out.println("我是构造方法");
}
}
我们只要new了,就执行了构造方法
对象一建立就会调用与之对应的构造函数
构造函数的作用:可以用于对对象的初始化
构造函数的小细节,当一个类中没有定义构造函数时,系统默认给该类加入一个空参数构造方法
当该类定义了构造方法,那就默认的没有了,构造方法用了重载
//公共的 类 类名
public class HelloJJAVA {
// 公共的 静态 无返回值 main方法 数组
public static void main(String[] str) {
Person p = new Person();
Person p1 = new Person("我是小米");
Person p2 = new Person("我是小王", 20);
}
}
class Person {
// 构造方法
public Person() {
System.out.println("我是构造方法");
}
// 构造方法
public Person(String str) {
System.out.println(str);
}
// 构造方法
public Person(String str, int age) {
System.out.println("我是构造方法" + age);
}
}
就是这样,我们输出
8.构造代码块
这里提个小知识点来完结本篇幅
我们看一段代码
//公共的 类 类名
public class HelloJJAVA {
// 公共的 静态 无返回值 main方法 数组
public static void main(String[] str) {
Person p = new Person();
}
}
class Person {
{
System.out.println("我是构造方法");
}
}
想知道他的运行结果是什么吗
咦,为什么方法都没有名字,就运行了,这个{}就是构造方法吗?
如果你代用多个构造方法的话你会发现他掉欧勇多次,这个现象,我们可以这样解释构造代码块:
- 作用就是给对象初始化
- 而且优先于构造方法
和构造方法的区别:
- 构造代码块是给所有对象进行统一初始化
- 而构造函数是给对应的对象初始化
构造方法中定义的是不同对象共性的初始化内容(抽取)
OK,我们下篇继续,JAVA的思想概念性的东西需要吃透才行,所有博客就慢慢的更新
热爱Android可以加群:555974449
JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块的更多相关文章
- Java面向对象(概述,构造函数,类与对象的关系,this关键字,成员、局部),匿名对象的调用,构造代码块(5)
Java面向对象(概述,构造函数,类与对象的关系,this关键字,成员.局部),匿名对象的帝爱用,构造代码块(5)
- -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal
java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型 也就是 ...
- Java—匿名对象/内部类/访问修饰符/代码块
匿名对象 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. //创建一个普通对象 Person p = new Person(); //创建一个匿名对象 new Pers ...
- java基础8 构造函数和构造代码块
一.构造函数 1 构造函数的作用 给对应的对象进行初始化. 2 构造函数的格式 修饰符 函数名(形式参数){ //函数名就是类名 函数体 } 举例说明: class Perosn{ private i ...
- java对象的方法属性和代码块的加载顺序
1.静态变量 2.静态代码块 3.局部代码块 4.构造函数 5.普通代码块 6.静态方法 7.普通方法 8.普通属性 for example: package com.JavaTest2; publi ...
- java学习(一)静态代码块 构造代码块 构造方法的执行顺序及注意问题
今天我总结了一下java中静态代码块 构造代码块 构造方法的执行顺序及其注意问题 首先要知道静态代码块是随着类的加载而加载,而构造代码块和构造方法都是随着对象的创建而加载 当时做了这么一个小案例(想必 ...
- Java:构造代码块,静态代码块
本文内容: 局部代码块 构造代码块 静态代码块 补充 首发日期:2018-03-28 局部代码块: 局部代码块用于限制变量的生命周期,如果希望某些变量在某一过程之后直接失效而不希望被后面继续操作时,可 ...
- Java之旅_面向对象_封装
参考并摘自:http://www.runoob.com/java/java-encapsulation.html 在面向对象的程序设计方法中,封装(英语 :Encapsulation)是指一种将函数接 ...
- Java 面向对象之static,final,匿名对象,内部类,包,修饰符
01final关键字概念 A: 概述 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承, 或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这 ...
随机推荐
- Docker基本架构
Docker 采用了 C/S架构,包括客户端和服务端. Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建.运行.分发容器). 客户端和服务端既可以运行在一个机器上,也可通 ...
- 0426html常用标签属性
一.基础语法 标签:作为网页的最小单元 1.双标签 内容的容器 2.单标签 控制性内容 注释 每一个模块都要写清楚注释 二.基本结构 <!DOCTYPE html> ...
- 实验与作业(Python)-04 数据类型、数学函数与字符串
截止日期 实验目标 继续熟悉for循环与turtle 数值运算符 math库常用函数 字符串转化为数值类型(int, float, complex) 字符串常用函数 实验内容 任务1.使用for代替w ...
- SimpleDateFormat中parse和format的区别
parse()返回的是一个Date类型数据,format返回的是一个StringBuffer类型的数据 //SimpleDateFormat中的parse方法可以 //把String型的字符串转换成特 ...
- Linux 性能监测:CPU
CPU 的占用主要取决于什么样的资源正在 CPU 上面运行,比如拷贝一个文件通常占用较少 CPU,因为大部分工作是由 DMA(Direct Memory Access)完成,只是在完成拷贝以后给一个中 ...
- 21 viewPager--- hzScrollView ----llContainer
结构: MainActivity.java package com.qf.day21_hsviewpagerfragment_demo5; import java.util.ArrayList; im ...
- 指令汇B新闻客户端开发(五) ShareSdk的使用
ShareSdk是一个分享按钮的开源框架,我们首先可以去mob的官网下载这个控件.mob官网,然后找到sdk下载那一栏, 下载下来之后点击这个.jar文件就会有一个弹窗,填写自己的应用包名和要哪些分享 ...
- 3.QT数据库综合案例,模糊查询等操作
1 新建一个项目: Database01.pro SOURCES += \ main.cpp \ Contact.cpp QT += gui widgets sql CONFIG += C++1 ...
- Android打包遇到的那些坑
说说今天打包遇到的坑,由于线上有个支付的bug需要紧急修复,而我们的项目又没有使用热修复,所以只能通过编译打包等传统流程,还好android上线比较快. 说说我进早上打包遇到的几个问题吧,首先我使用b ...
- 关于React Native 安卓首屏白屏优化
问题描述 在android中,当点击某个rn模块的入口按钮,弹出rn的activity到rn的页面展现出来的过程中,会有很明显的白屏现象,不同的机型不同(cpu好的白屏时间短),大概1s到2s的时间. ...