java基础-封装

18 篇文章 0 订阅
订阅专栏
文章介绍了Java中封装的概念,通过示例展示了如何使用private修饰符限制对类成员属性的直接访问,并通过set和get方法进行安全赋值和取值。同时,文章还提到了this关键字的作用以及构造函数的功能,包括有参和无参构造函数的使用场景。
摘要由CSDN通过智能技术生成

一.封装由来:

        继上篇java基础-面向对象文章来说,当定义一个Person类,类中有姓名,年龄,身高,肤色这几个静态特征(成员属性,就是成员变量),在使用创建出来的对象.成员属性赋值时,会出现不合常理的情况,比如说创建Person类对象,对象的年龄为-10或者200,这种情况便不符合现实生活人类寿命的合理范围,便需要封装,对不合理的操作进行提示

 代码演示:

        1.首先创建一个Person类,类中有姓名,年龄,身高,肤色这几个静态特征(成员属性,就是成员变量)

public class Person{

    //姓名
    String name;
    //年龄
    int age;
    //身高
    String height;
    //肤色
    String colour;

}

        2.再定义一个测试类

public class Test {
    public static void main(String[] args){
        //再main方法中创建Person类对象
        Person p=new Person();
        //给person类对象中的属性赋值
        p.name="李四";
        p.age=-10;
        p.height="178";
        p.colour="white";

        System.out.println(p.name);  //李四
        System.out.println(p.age);   //-10
        System.out.println(p.height);   //178
        System.out.println(p.colour);   //white

        System.out.println("================================================");

        p.age=200;
        System.out.println(p.age); //200
    }
}

        3.思考:

        年龄为-10或者200是不是不合常理,对于这种情况可以使用private修饰符解决,将类中的成员属性私有,不让外界随意创建对象访问属性赋值

        3.1 代码如下图:

        

       到此在测试类中会发现新的问题,就是在测试类Test类中无法对Person类的成员属性进行赋值以及获取属性值的操作

        3.2 代码如下图:

        4. 为防止外界随意创建对象随意赋值,已经将类中的成员属性进行私有化,就是使用private修饰符将成员属性私有化, 例如:(  private 数据类型   成员属性名; ),故而需要给外界提供可以访问Person类内部属性的方法,set方法和get方法,set方法用于给类对象内部的成员属性赋值,get方法用于获取类内部的成员属性值,

        注意:set和get方法无需static关键字(静态修饰符)去修饰

        代码如下 :

public class Person{

    //姓名
    private String name;
    //年龄
    private int age;
    //身高
    private String height;
    //肤色
    private String colour;

    //对name赋值的set方法
    public void setName(String n){
        name=n;
    }

    //获取name属性值的get方法
    public String getName(){
        return name;
    }

    //对age赋值的set方法
    public void setAge(int a){
        //对年龄的赋值加一个判断
        if (a<=0||a>100){
            System.out.println("年龄有误");
            return;
        }
        age=a;
    }

    //获取age属性值的get方法
    public int getAge(){
        return age;
    }

    //对height属性赋值的set方法
    public void setHeight(String h){
        height=h;
    }

    //获取height属性值的get方法
    public String getHeight(){
        return height;
    }

    //对colour属性赋值的set方法
    public void setColour(String c){
        colour=c;
    }

    //获取colour属性值的get方法
    public String getColour(){
        return colour;
    }

}

         5. 测试类对age属性赋值操作:

        测试1:对age的正常赋值

public class Test {
    public static void main(String[] args){
        //在main方法中创建Person类对象
        Person p=new Person();

       /* //给person类对象中的属性赋值
        p.name="李四";
        p.age=-10;
        p.height="178";
        p.colour="white";

        System.out.println(p.name);  //李四
        System.out.println(p.age);   //-10
        System.out.println(p.height);   //178
        System.out.println(p.colour);   //white

        System.out.println("================================================");

        p.age=200;
        System.out.println(p.age); //200*/

        //通过set方法赋值
        p.setName("aaa");
        p.setAge(12);
        p.setHeight("180");
        p.setColour("black");

        //通过get方法获取属性值
        System.out.println(p.getName()); //aaa
        System.out.println(p.getAge());     //12
        System.out.println(p.getHeight());  //180
        System.out.println(p.getColour());  //black
    }
}

     控制台:

        测试2: 对age的非正常赋值

public class Test {
    public static void main(String[] args){
        //在main方法中创建Person类对象
        Person p=new Person();

       /* //给person类对象中的属性赋值
        p.name="李四";
        p.age=-10;
        p.height="178";
        p.colour="white";

        System.out.println(p.name);  //李四
        System.out.println(p.age);   //-10
        System.out.println(p.height);   //178
        System.out.println(p.colour);   //white

        System.out.println("================================================");

        p.age=200;
        System.out.println(p.age); //200*/

        //通过set方法赋值
        p.setName("aaa");
        p.setAge(-30);
        p.setHeight("180");
        p.setColour("black");

        //通过get方法获取属性值
        System.out.println(p.getName()); //aaa
        System.out.println(p.getAge());     //0
        System.out.println(p.getHeight());  //180
        System.out.println(p.getColour());  //black
    }
}

 控制台:

 二. this关键字

         this关键字表示当前类对象的引用,谁访问类中的属性,this就是谁

        代码如下

        1. 修改Person类中的name属性的set方法和get方法

             

         2.测试类中对Person类中的name属性进行赋值操作

          3.注意:

                导致的原因是Person类中name属性的set方法无法区分成员变量和局部变量,并没有将方法上的局部变量值传给成员变量,所以使用get方法获取成员属性值,name属性依旧是将成员变量初始化值

       解决办法: 使用this关键字区分属性set方法中的成员变量和局部变量

        修改代码如下:

        

         4. 补充:打印输出this和类对象,比较地址值

 三. 类中成员属性的set方法和get方法的快捷键生成

       1. alt+insert或者Fn+Alt+i

        

        2.选中要生成set,get方法的属性,点击ok

四. 构造函数

        1.概念:

        构造函数分为有参构造方法无参构造方法,主要用于创建对象new一个类对象),默认会提供一个无参构造,当我们自定义有参构造方法后,类便不再会提供默认的无参构造方法,也就是无参构造方法会失效,因此我们创建有参构造方法的同时也应该创建无参构造方法

        2.区别:

                无参构造方法:

                        先创建类对象,再对类对象中的成员属性进行赋值

                有参构造方法: 

                         创建类对象的同时,就对类对象中的成员属性进行赋值

        3.代码如下

                无参构造方法:

        

                 

                 有参构造方法:

            

         4.构造方法快捷键

                1. alt+insert或者Fn+Alt+i

                        

                2.选中Constructor后可以对类中的属性进行选择点击ok生成有参构造方法,也可以点击Select None生成无参构造方法

         5.构造方法注意事项:

                1. 构造方法名必须和类名保持一致

                2. 构造方法没有返回值类型

                3. 构造方法没有返回值

                4. 构造方法可以重载

                5. 提供有参构造方法后,无参方法会失效,因此需要有参构造方法和无参构造方法同时提供

                6. 构造方法是可以被private修饰的,作用:其他程序无法创建该类的对象。

Java-创建Person,包含姓名、年龄、性别属性,可查看属性和属性值
2301_80407492的博客
03-25 1720
【代码】Java-创建Student
错题整理day03
weixin_45409986的博客
04-04 478
1、看输出() public class Person{ private String name = "Person"; int age=0; } public class Child extends Person{ public String grade; public static void main(String[] args){ Person...
java学习第二十九天
qq_54364082的博客
06-19 2335
2020080605004大数据2005 黄满 编写程序,计算并输出所有的水仙花数。水仙花数是这样的三位数,它的各位数字的立方和等于这个三位数本身,例如371=33+73+13,371就是一个水仙花数。 package hm; public class Shuixianhua { public static void main(String[] args) { int a = 0; int b = 0; int c = 0; for (int i = 100; i <
创建一个person,包含姓名和年龄属性,并提供一个方法来打印个人信息
最新发布
zfy1213580的博客
12-15 1381
分别表示个人的姓名和年龄。使用构造方法来初始化这两个属性。,并传入姓名 “John” 和年龄 25。方法,以打印个人信息。方法,用于打印个人信息。在这段代码中,我们定义了一个。,该有两个私有属性。方法打印姓名和年龄。方法中,我们创建一个
编写程序,实现下列功能。 (1)、定义Person(人),包含内容如下。 成员变量:姓名、年龄、性别 构造方法1:通过形参传参的形式,实现对成员变量姓名的初始化;
Tt家糖糖呀的博客
04-16 9576
编写程序,实现下列功能。 (1)、定义Person(人),包含内容如下。 成员变量:姓名、年龄、性别 构造方法1:通过形参传参的形式,实现对成员变量姓名的初始化; 构造方法2:通过形参传参的形式,实现对姓名、年龄和性别的初始化,其中姓名的初始化通过调用构造方法1完成。 普通方法:输出姓名、年龄、性别到显示器。 (2)、定义Driver(驾驶员),该继承自Person,同时还包含...
java基本语法4
weixin_43178406的博客
03-01 614
4.1 继承 实际场景: 如我们有一个Person,该中有姓名、性别、年龄三个属性以及打印信息的方法。 我们还有一个学生,该中也是姓名、性别、年龄是三个属性及打印信息的方法 此外,我们还有工人、教师等,也是上述属性和方法(或者在上述属性基础上还有别的属性,在上述方法基础上还有别的方法)。 如果Person、学生、工人,教师等一个个去写,关于姓名、性别、年龄、打印属性的方法这些...
Java基础---面向对象---封装继承多态
MUYUFANSHENXUE的博客
04-11 1706
1,封装 //1,良好的封装能够减少耦合 //2,内部的结构可以自由修改 //3,可以队成员进行更精确的控制 //4,隐藏信息,实现细节 //先将属性选择性的隐藏,然后将需要给他人调用的内容,提供getter setter当作入口,可以在getter,setter进行设置操作,确保属性安全 public class Dog { String dogName = "无名氏";//狗名称 private int age = 0;//年龄(0-15) char sex = '女'
Java基础精品课10-封装和继承.zip
05-20
在这个"Java基础精品课10-封装和继承"的课程中,我们将深入理解这两个关键概念。 **封装**是面向对象编程的一个基本原则,它涉及到将数据(属性)和操作这些数据的方法(行为)绑定在一起,形成一个独立的单元,...
java基础教程----精华版
09-22
这个"java基础教程----精华版"显然是一份精心整理的资料,旨在帮助初学者快速掌握Java编程的基础知识。下面将详细介绍Java语言的核心概念和关键知识点。 1. **Java语法基础**: - **变量**:在Java中,变量是存储...
Java基础-面向对象封装性.md
08-10
### Java基础-面向对象封装性详解 #### 封装性的概念与意义 在Java语言中,面向对象编程(OOP)是其核心特性之一,而封装性则是面向对象编程四大特性(封装、继承、多态、抽象)的基础封装性主要指的是隐藏...
创建一个Person的简单实例
09-02
如何创建一个Person?下面小编就为大家带来一篇创建一个Person的简单实例。小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧
java person
12-16
JAVA上机实验作业,定义一个Person,含:姓名、性别、年龄等字段;继承Person设计Teacher,增加:职称、部门等字段;继承Person设计Student,增加:学号、入学时间、专业等字段。定义各的构造方法和toString()方法,并分别创建对象进行测试。
创建一个PEOPLE
01-01
创建一个PEOPLE,创建一个People,定义成员变量如身份证号、姓名、性别、年龄;定义成员方法“获取身份证号”、“获取姓名”、“获取年龄”等,再创建People的对象。
java person
05-12
Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet
头歌--Java面向对象 - 封装、继承和多态
热门推荐
m0_56638814的博客
04-10 1万+
头歌实践--Java面向对象 - 封装、继承和多态
创建一个Person
weixin_30685047的博客
05-17 1404
创建一个Person,包含以下属性:姓名(name)、年龄(age)、朋友(friends数组)、问候(sayhi方法,输出问候语,例如:“你好!”)、交朋友(addFriend方法,向friends里添加一个值),然后创建两个此的实例:“小张“,22,[“小李”,”小王”],”你好!”,”James”,”James”,24,[“Ann”,”Billy”],”Hello!”,”小张” func...
java 中定义Person
weixin_63802670的博客
03-29 5834
定义个Person,属性有身份证号码、姓名、性别、年龄、籍贯、住址,行为包括: (1)eating(String food),能够表示吃什么食物; (2)shopping(String goods),表示购物; (3)sleeping(int time),表示睡觉,参数time表示睡觉的时长; (4)setName(String aName),表示修改人的姓名; (5)setAge(int aAge),表示修改人的年龄; (6)printPerson(),表示打印人的所有信息 ..
Java基础
weixin_44211905的博客
05-28 309
总结:
详解 Java 的对象与(二)
lfm1010123的博客
05-09 947
this 关键字、封装、包的含义、继承
Java基础封装特性详解
"Java基础教程聚焦于三大特性之一——封装,本文将深入解析封装的概念、实现方式、步骤以及带来的好处。作者强调这是基于个人理解和实践经验的分享,旨在帮助初学者避开学习陷阱,并鼓励读者参与讨论。同时,文章...
写文章

热门文章

  • 浅谈@RequestMapping和@GetMapping等其他请求注解的区别 2628
  • java基础-Math类 2136
  • idea全局搜索快捷键总结 2095
  • java基础-静态修饰符static 1743
  • 基于websocket实现实时通信之GoEasy入门学习 1118

分类专栏

  • 服务器
  • windows
  • 虚拟机
  • java 18篇
  • webSocket 3篇
  • git 1篇
  • idea 2篇
  • springMVC 1篇

最新评论

  • java之Stream流(三)---进阶

    CSDN-Ada助手: 恭喜您在第19篇博客中分享了有关Java Stream的顶级技巧!您的持续创作精神令人钦佩。通过这篇博客,您展示了如何利用Java Stream来简化代码,这对于我们这些热衷于提高代码效率的开发者来说是非常有价值的。我非常期待您下一步的创作,希望您可以继续分享关于Java Stream和其他相关主题的技巧和经验,让我们共同进步。谦虚地说,我相信您一定还有更多的知识和见解可以与我们分享。加油!

  • java之Stream流(一)---详解

    CSDN-Ada助手: 恭喜您撰写了第20篇博客!标题“JAVA之Stream流详解”听起来非常有趣。您对于Stream流的详细解析一定会给读者带来很多收获。在接下来的创作中,或许您可以考虑分享一些实际应用场景,以及如何优化Stream流的使用。谦虚地说,我相信您的经验和深入研究一定会为我们带来更多精彩的文章。期待您的下一篇作品!

  • idea全局搜索快捷键总结

    CSDN-Ada助手: 推荐 Java 技能树:https://edu.csdn.net/skill/java?utm_source=AI_act_java

大家在看

  • 【学习笔记】手写Tomcat 四
  • (27)时钟专题--->(027)差分时钟转单端时钟(VHDL) 189

最新文章

  • 使用GoEasy实现Java实时推送
  • 基于websocket实现实时通信之GoEasy入门学习
  • webSocket消息推送之入门学习
2023年23篇
2022年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家江西佛像玻璃钢雕塑销售厂家玻璃钢恐龙雕塑怎么做北京玻璃钢卡通雕塑迷你定制郑州专业玻璃钢卡通雕塑生产厂家茂名玻璃钢立体雕塑玉树玻璃钢雕塑定制商场美陈课玻璃钢维尼熊造型雕塑湖南玻璃钢金属雕塑厂家玻璃钢喜羊羊与灰太狼雕塑衡阳玻璃钢艺术品雕塑人物玻璃钢动物雕塑报价表广州商场美陈排名湖南特色玻璃钢雕塑景洪市玻璃钢雕塑设计供应绍兴玻璃钢雕塑摆件多少钱无锡玻璃钢户外雕塑青岛曲阳县玻璃钢人物雕塑云南玻璃钢雕塑产品厂家云南玻璃钢仿铜雕塑定制福建商场美陈价钱商场春季美陈讲解邵阳公园玻璃钢雕塑定制浙江大型商场美陈生产厂家连云港玻璃钢人物雕塑制作曲阳玻璃钢鹿雕塑厂家江西公园玻璃钢雕塑方法嘉兴大型玻璃钢雕塑景观玻璃钢雕塑批发价格小区玻璃钢动物雕塑厂家香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化