精华内容
下载资源
问答
  • 第一种:在构造方法中添加 如下代码: public class Person { private String name; private int age; public Person() { } ... public Person(String ... //年龄进行非法拦截 if(age<0||age>150) { Syst

    第一种:在构造方法中添加

    如下代码:

    public class Person {
        private String name;
        private int age;
    
        public Person() {
        }
    
        public Person(String name, int age) {
            this.name = name;
            //对年龄进行非法拦截
            if(age<0||age>150) {
                System.out.println("非法年龄");
            }else {
                this.age = 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 void eat(){
            System.out.println(name+"吃饭");
        }
        public void sleep(){
            System.out.println(name+"睡觉");
        }
    
    }
    

    在以上代码中,我在满参构造方法中添加了if的条件判断,当age条件不满足时,将会赋值失败,成员变量则会继续使用默认值0;

    如下代码:

    public class Test003 {
        public static void main(String[] args) {
            Person p = new Person("小明",-19);
            System.out.println(p.getAge());
        }
    }
    
    

    输出结果为:
    在这里插入图片描述
    注意:这里输出的“非法年龄”,是在创建对象时,程序会走满参的构造方法打印出来的。而0在是下面那行代码的输出。

    第二种:在setter和getter方法中添加

    如下代码:

    public class Person {
        private String name;
        private int age;
    
        public Person() {
        }
    
        public Person(String name, int age) {
            this.name = name;
            //对年龄进行非法拦截
            if(age<0||age>150) {
                System.out.println("非法年龄");
            }else {
                this.age = age;
            }
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            if(age<0||age>150) {
                System.out.println("非法年龄");
            }else {
                this.age = age;
            }
        }
    
        public void eat(){
            System.out.println(name+"吃饭");
        }
        public void sleep(){
            System.out.println(name+"睡觉");
        }
    
    }
    

    当我们用无参构造一个对象时,我们不想使用默认的成员变量值,这时我们就要用set方法对成员变量进行赋值。

    看以下测试类代码:

    public class Test003 {
        public static void main(String[] args) {
            Person p = new Person();
            p.setAge(160);
            System.out.println(p.getAge());
        }
    }
    

    由于我们所有属性都是私有化的,我们在其他类中是不能直接用p.age来问,也只能通过get方法来查看我们付的值,由于这个值也是非法的,所以毫无疑问结果和刚刚一样

    展开全文
  •  * 定义一个学生类,提供成员变量姓名,和年龄 *  * 现在的写法:需要将成员变量私有化,提供对外的公共访问方法(也属于成员方法) * */ class Student2{ //私有化成员变量 private String name ; private int ...
    package org.westos_05_封装和private;
    /*
     * 定义一个学生类,提供成员变量姓名,和年龄

    * 现在的写法:需要将成员变量私有化,提供对外的公共访问方法(也属于成员方法)
    * */
    class Student2{
    //私有化成员变量
    private String name ;
    private int age ;

    //需要提供公共访问方法
    //最终赋值还获取值(成员变量的值)
    //获取姓名的方法
    public String  getName(){
    return name ;
    }

    //给姓名进行赋值
    public void setName(String n){//传递的实际姓名
    name = n ;
    }

    //获取年龄的方法
    public int getAge(){
    return age ;
    }

    //给年龄赋值
    public void setAge(int a){//传递的值
    age = a ;
    }
    }
    public class StudentTest {
    public static void main(String[] args) {
    //创建Student2类的对象
    Student2 s = new Student2() ;
    //现在成员变量被私有化了,外界是不访问的
    // s.name = "高圆圆" ; 
    // s.age =27 ;

    //获取值
    System.out.println(s.getName()+"----"+s.getAge());//null---0
    System.out.println("---------------------");
    //给学生对象进行赋值

    s.setName("高圆圆") ;
    s.setAge(27) ;

    System.out.println(s.getName()+"----"+s.getAge());


    }

    }

    //(类中的成员变量被private关键字修饰后,外界不能访问它,必须提供公共的(被public修饰的成员方法)setxxx()和getXXX()方法来进行赋值和调用

    展开全文
  • struct 结构体名{ 结构体所包含的变量或数组}; 1.使用例子: #include <stdio.h> int main(){ struct{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所...

    在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:

    struct 结构体名{
        结构体所包含的变量或数组
    };

    1.使用例子:

    1. #include <stdio.h>
    2. int main(){
    3. struct{
    4. char *name; //姓名
    5. int num; //学号
    6. int age; //年龄
    7. char group; //所在小组
    8. float score; //成绩
    9. } stu1;
    10. //给结构体成员赋值
    11. stu1.name = "Tom";
    12. stu1.num = 12;
    13. stu1.age = 18;
    14. stu1.group = 'A';
    15. stu1.score = 136.5;
    16. //读取结构体成员的值
    17. printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", stu1.name, stu1.num, stu1.age, stu1.group, stu1.score);
    18. return 0;
    19. }
    20.          二.赋值      除了可以对成员进行逐一赋值,也可以在定义时整体赋值,例如:
      1. struct{
      2. char *name; //姓名
      3. int num; //学号
      4. int age; //年龄
      5. char group; //所在小组
      6. float score; //成绩
      7. } stu1, stu2 = { "Tom", 12, 18, 'A', 136.5 };
      不过整体赋值仅限于定义结构体变量的时候,在使用过程中只能对成员逐一赋值,这和数组的赋值非常类似。
    21. 【注意的是,结构体是一种自定义的数据类型,是创建变量的模板,不占用内存空间;结构体变量才包含了实实在在的数据,需要内存空间来存储。】

    转载于:https://www.cnblogs.com/woshizhongxin/p/7349726.html

    展开全文
  • 条款4:确定对象被使用前已先被初始化C++类中的成员变量,我们一般都是进行赋值操作,如:class ABEntry{ public: ABEntry(const std::string&name,const std::string& address,const std::list<PhoneNumber>& ...

    条款4:确定对象被使用前已先被初始化

    C++类中的成员变量,我们一般都是对其进行赋值操作,如:

    class ABEntry{
    public:
        ABEntry(const std::string&name,const std::string& address,const std::list<PhoneNumber>& phones);
    private:
        std::string theName;
        std::string theAddress;
        std::list<PhoneNumber> thePhones;
        int numTimeConsulted;
    };
    ABEntry::ABEntry(const std::string& name,const std::string& address,const std::list<PhoneNumber>& phones){
        theName=name;
        theAddress=address;
        thePhones=phones;
        numTimeConsulted=0;
    }

    上面的这种操作都是赋值操作,而非初始化操作,初始化发生的时间更早,发生于这些成员的default构造函数被自动调用之时,比进入构造函数本体的时间更早一些,相当于先执行了初始化操作,然后执行了复制操作,效率较低。
    我们怎样解决这种问题呢?直接对其执行初始化操作,提高效率,有一种优化的方法称之为成员初始列的替换赋值动作,如

    ABEntry::ABEntry(const std::string& name,const std::string& address,const std::list<PhoneNumber>& phones):
    theName(names),
    theAddress(address),
    thePhones(phones),
    numTimesConsulted(0)
    {}

    这中操作成为成员初始列方法,都是初始化操作,构造函数本体不必有任何动作,theName以name为初值进行copy构造,以此类推。

    C++中对于成员的初始化顺序要求尤其严格,static变量在类内部申明,在类外部定义,同时如果想要修改static成员变量的值,只能通过在调用类中定义的static成员函数进行修改。

    #include <iostream>
    #include <cstring>
    using namespace std;
    class TextBlock{
    public:
        TextBlock(string s){
            this->text = s;
        }
        const char& operator[](std::size_t position)const{
            cout << "我为const代言" << endl;
            return text[position];
        }
        char& operator[](std::size_t position){
            cout << "我为non-const代言" << endl;
            return text[position];
        }
        static int i;
        static int changeStatic(int &i){
            i = 100;
            return i;
        }
    private:
        std::string text;
    
    };
    int TextBlock::i = 10;
    TextBlock::i = 1000;

    如果我们这样进行强制修改的话会出错提示,没有存储类或者类型说明符。
    对于C++中的non-local static成员变量,解释一下,non-local static成员变量包括global对象,namespace作用域,class内,file作用域中所有被申明为static的对象,而local static成员变量指的是在函数中定义的static成员变量,由于non-local static成员变量的初始化顺序可能存在依赖关系,而这种依赖关系不一定被满足,如下面代码所示:

    class FileSystem{
    public:
        ...
        std::size_t numDisks() const;
        ...
    }
    extern FileSystem tfs;
    class Directory{
    public:
        Directory(params);
        ...
    }
    Directory::Directory(params){
        ...
        std::size_t disks=tfs.numDisks();//使用tfs对象
        ...
    }
    Directory tempDir(params);

    可以看出tfs必须在tempDir之前仙贝初始化,否则tempDir的构造函数会用到尚未被初始化的tfs。
    因此我们需要一种方法进行解决这种问题,方法是:将每个non-local static对象搬到自己的专属函数内,该对象在此函数中被申明为static,这些函数返回一个reference指向它所含的对象,修改办法如下:

    class FileSystem{...}
    FileSystem& tfs(){
        static FileSystem fs;
        return fs;
    }
    class Directory{...}
    Directory::Directory(params)
    {
        ...
        std::size_t disks=tfs().numDisk();
        ...
    }
    Directory& tempDir(){
        static Directory td;
        return td;
    }

    这样可以保证在tfs在tempDir之前被初始化。

    展开全文
  • 直接这么修饰成员变量就会报错。这里必须要手动赋值,因为string name这里的默认是值null。一但默认值以后就不能后续再赋值了。...默认的构造没有对name进行赋值。必须保证所有的重载形式的构造方法,都最终会fi...
  • c语言定义结构体可以直接声明结构体变量的,如下 struct Student{ ...我们在main函数中怎样这个结构体进行初始化呢? 可以这样 int main() { xiaoming.age = 15; xiaoming.name = (...
  • 解题思路:采用 malloc 函数进行结构体指针变量的定义,并使用 --> 访问成员变量的方式进行结构体变量赋值;比较两个结构体信息中学生的成绩成员变量的大小,按照大小顺序输出。 参考代码: #include "stdio....
  • 是针对数组或对象进行模式匹配,然后其中的变量进行赋值 解构模型 在解构中,有两部分参与: 解构的目标=解构的源 只要左右两边的模式相同,就可以合法赋值 如果解构不成功,变量值等于undefined 对象解构: ...
  • 第一篇博文,分享一下自己KVC的理解 系统的KVC通常情况下是用来批量赋值的,使用形如 [obj setValuesForKeysWithDictionary:...形式进行指定成员变量赋值。 看一些情况:@implementation Car { @private //用pr
  • C++结构体变量的引用

    2021-01-25 23:03:28
    老大说了,不能把结构体变量整体输入或输出,只能每个具体成员进行输入/输出操作。 struct wolf { char name; int number; int score; }zhang3,wang5; 上一节(上面)的例子来讲, 错误示范: printf("%s %d %...
  • /* 定义一个学生类: 成员变量name,age 成员方法:show()方法 ... 应该是这个样子的:在赋值之前,先数据进行判断是什么样的类型。 判断到底在哪里做比较合适呢? StudentDemo类是一个测试类,测
  • KVC基础

    2019-09-30 21:45:37
    原始方法对成员变量进行赋值 //对成员变量进行复制可以使用成员变量的setter方法或者使用点语法直接赋值 // [cutcomobjct setName:@"xuli"]; // cutcomobjct.age = 19; //对成员变量进行获取可以通过 get...
  • 指针一定要进行初始化, 未初始化的指针不能直接使用, 结构体指针为例,进行分析: struct stu{ int age; char name[3];...分析:没有初始化的指针,直接对成员变量进行赋值,成员变量此时在内存
  • C/C++笔记

    2019-11-14 16:00:37
    1、在头文件中使用#ifndef #define #endif能避免头文件的重定义。 2、->的作用 struct stu *s; // 定义一个结构体指针 ... // 结构体中的成员变量name进行赋值 3、::~析构函数 4、 ...
  • 面试题: Student s = new Student(); 做了哪些事? class Student{ private String name ;...4)数据进行初始化(成员变量) 4.1)系统默认初始化 4.2)显示初始化—>setXXX(形参)/构造方法赋值 5)堆内存中申
  • Java中可以通过初始化块进行数据赋值。如下: ... //通过初始化块对成员变量进行赋值 static{ name="Helen"; } public static void main(String args[]){ System.out.println(name); }
  • 讲到属性, 首先我们应该想一下我们以前的 get / set 取值方法首先我们创建一个 类#import 在 .h文件中 ... 创建完成员变量, 我们开始进行 set / get 方法 赋值 / 取值  set 方法 // 给_name赋值 -
  • 可重复注解

    2019-08-15 21:12:51
    注解可以重复定义多个 @MyAnnotation()//... //有成员变量的注解必须要对成员变量进行赋值,否则报错 @MyAnnotation(value="123") class Person{ private String name; private int age; 这就叫重复注解...
  •  对成员变量进行赋值,相当于写入操作;是为了从外部类得到一个参数,赋值给内部变量;其函数名必须以set开头,必须有一个参数;  例子:- (void)SetName:(NSString *)newName  { _name = newName;把外部类传...
  • 成员变量name,age 成员方法:show()方法,显示所有的成员变量 通过对象给成员变量赋值,可以赋值一些非法数据,这是不合理的, 应该在赋值之前,先数据进行判断 StudentDemo类是一个测试类,测试类...
  • 面向对象的基本特征

    2019-07-31 20:37:36
    因为如果没有对变量进行封装处理,而是直接通过对象对变量进行赋值读取操作那么就会造成变量的赋值并不符合实际逻辑但是依然能够进行赋值的现象;举个简单的例子。 首先创建一个类: public class Person { int ...
  • java day015 面向对象 构造方法 1.类中构造方法的作用 ... 对成员变量初始化赋值 } 示例 class Person { String name; char sex; int age; //无参构造方法 public Person() { } //有参构造方法 public...
  • 构造方法: 示例:Person p = new Person(“张三”,20);...作用:在new的同时对成员变量赋值,给对象的属性初始化赋值new Person 对属性name,age赋值 构造方法的定义格式 权限 方法名(参数列表){
  • 构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用初始化列表。 C++构造函数的初始化列表使得代码更加简洁,示例如下: #include <...
  • 详述对象初始化过程

    2019-07-29 14:54:48
    对象初始化过程 1,给对象的实例变量分配空间,默认初始化成员变量。 2,成员变量声明的初始化。 3,初始化代码块初始化 4,构造方法的初始化。...在代码块中在进行赋值为雷静,22,2,4在最后在...
  • 构造函数是一种特殊的成员...对成员变量的初始化,除了在构造函数的函数体中一一赋值,还可以采用参数初始化表。请看下面的代码: class Student{ private: char *name; int age; float score; public:...
  • 面向对象(二)

    2017-01-12 20:32:09
    成员变量name,age; 成员方法:show()方法。我们在使用这个案例的过程中发现了一个问题。 通过对象去给成员变量赋值,可以赋值一些非法的数据。 这是不合理的。 应该是这个样子的,在赋值之前,先数据进行...

空空如也

空空如也

1 2 3 4 5 6
收藏数 106
精华内容 42
关键字:

对成员变量name进行赋值