热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java基础封装继承静态

封装&this关键字&静态封装封装:隐藏事物的属性和实现细节,并对外提供公开的访问方式。属性私有化:private可修饰的内容&#x

封装&this关键字&静态


封装

封装:隐藏事物的属性和实现细节,并对外提供公开的访问方式。
属性私有化:private 可修饰的内容:成员变量、成员方法、构造方法、内部类被private修饰的内容只能在本类访问
get和set方法:属性被私有化之后,只能通过get和set方法访问,并且可以在get和set方法中对数据进行筛选。
get:获取属性的值public 数据类型 get属性名() {return 属性名;}
set:设置属性的值public void set属性名(数据类型 属性名) {this 属性名 = 属性名;}

package com.DaYu;import java.util.Scanner;public class Demo01 {public static void main(String[] args) {Person p = new Person();Scanner sc = new Scanner(System.in);System.out.println("请输入名字");String name = sc.next();System.out.println("请输入年龄");int age = sc.nextInt();p.setName(name);p.setAge(age);System.out.println(p.getName()+" "+p.getAge());}
}class Person {private String name;private int age;public Person() {}public Person(String name,int age) {this.name &#61; name;this.age &#61; age;}public String getName() {return name;}public void setName(String name) {this.name &#61; name;}public int getAge() {//如果年龄在0~18则返回真实年龄&#xff0c;如果大于18&#xff0c;则返回18if(age > 18) {return 18;}else return age;}public void setAge(int age) {//数据的筛选if(age<0) {System.out.println("数据不合法");}else this.age &#61; age;}
}

this关键字

变量的就近访问原则&#xff1a;访问某个变量时&#xff0c;会先寻找最近的该变量的定义&#xff0c;如果
有&#xff0c;那就是这个变量&#xff0c;如果没有&#xff0c;就往更远处去寻找该变量的定义。
this关键字;表示当前类型的当前对象的引用&#xff0c;谁调用this所在的方法&#xff0c;this就代表哪个对象。this.属性名称----访问类中的成员变量&#xff0c;用来区分成员变量与局部变量重名问题。this.方法名称----访问本类的成员方法this&#xff08;&#xff09;----访问本类的构造方法只能用在构造发方法中&#xff0c;不能用在普通方法中&#xff1b;必须是构造方法中的第一条语句&#xff1b;

构造方法

又称构造器、构造函数、constructor
语法&#xff1a;public 方法名&#xff08;形式参数列表&#xff09;{方法体}
用途&#xff1a;用于创建对象&#xff0c;同时给成员变量进行赋值。
特点&#xff1a;构造方法的方法名与类名完全一样&#xff1b;构造方法没有返回值类型&#xff0c;连void也没有&#xff1b;构造方法不能手动调用&#xff0c;只在创建对象时由jvm自动调用&#xff0c;并且每创建一个对象只调用一次&#xff1b;构造方法可以被重载&#xff1b;当一个类中没有定义任何构造方法时&#xff0c;系统会自动给这个类提供一个公开的无参构造&#xff0c;当系统中定义了其他构造方法时&#xff0c;系统不再自动给其添加无参构造&#xff0c;所以实际开发中需要我们把无参和有参的构造方法都写出来。 注意&#xff1a;在创建对象的过程中&#xff0c;会有三个初始化过程&#xff1a;默认初始化、显示初始化&#xff0c;构造初始化三者顺序&#xff1a;默认初始化、显示初始化&#xff0c;构造初始化

对象创建的过程

1.将要创建的对象的所属类型的字节码文件加载到方法区&#xff1b;
2.在栈内存中声明一个该类型的引用&#xff0c;用于将来存储对象的地址&#xff1b;
3.在堆内存中开辟空间&#xff0c;为成员变量分配空间&#xff1b;
4.为成员变量赋默认值;
5.为成员变量赋显示初始值。
6.构造方法进栈&#xff0c;再次为成员变量赋值&#xff08;构造初始化&#xff09;&#xff1b;
7.将对象的地址赋值给栈内存中的引用。

静态 static

static
1.用来修饰成员变量&#xff0c;就是静态变量/类变量&#xff0c;不能用来修饰局部变量特点&#xff1a;静态变量随着类的加载而进入方法区中的静态区静态变量被所有对象所共享&#xff0c;有默认值访问方式&#xff1a;类名.静态变量名&#xff0c;也可以创建对象访问&#xff0c;但不推荐2.用来修饰成员方法特点&#xff1a;静态方法不能不能访问非静态成员&#xff0c;若非要访问&#xff0c;需要在静态方法中创建对象静态方法中不能出现this关键字调用方式&#xff1a;类名.方法名&#xff08;&#xff09;注&#xff1a;静态的不能访问非静态的&#xff01;&#xff01;&#xff01;

静态变量和成员变量的区别&#xff1a;


静态变量成员变量
所属对象
内存空间方法区中的静态区堆内存
生命周期随着类加载而存在&#xff0c;类消失而消失随着对象创建而存在&#xff0c;对象消失而消失
访问方式类名.静态变量名 / 对象名.静态变量名对象名.变量名

package com.DaYu;public class Demo02 {public static void main(String[] args) {//类名.调用静态成员Num.m2(); int b &#61; Num.b;System.out.println(b);Num num2 &#61; new Num();Num num3 &#61; new Num();num2.a&#43;&#43;;num2.b&#43;&#43;;//b的值被改变了&#xff0c;会影响到后面的输出System.out.println(num2.a&#43;" "&#43;num2.b);//11 21System.out.println(num3.a&#43;" "&#43;num3.b);//10 21 }
}class Num {int a &#61; 10;//成员变量static int b &#61; 20; //静态变量//普通成员方法public void m1() {System.out.println(a);System.out.println(b);}//静态方法public static void m2() {//System.out.println(a);//不能访问非静态变量System.out.println(b);//可以通过创建对象访问非静态成员Num num &#61; new Num();System.out.println(num.a);num.m1();}
}

推荐阅读
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
author-avatar
ZJ1314520俊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有