java封装、构造方法、this

一、封装

特性:安全、将变化隔离、便于使用、提供重复性

例子

[[email protected] java]# cat EmployeeDemo.java 
class Employee {
    private String id;
    private String name;
    private String gender;
 
    //提供公有的set和get方法
    //public 成员修饰符,公共的,谁都可以访问
    //private 成员修饰符,私有的,只有自己可以访问
 
    public void setName(String n) {
        name = n;
    }
 
    public void setId(String i) {
        id = i;
    }
    
    public void setGender(String gen) {
        if ("male".equals(gen) || "female".equals(gen)) {
            gender =gen;
        } else {
            System.out.println("please input \"male\" or \"female\"");  
        }
 
    }
    
 
    public String getName() {
        return name;
    }
 
    public String getId() {
        return id;
    }
 
    public String getGender() {
        return gender;
    }
 
 
    public void work() {
        System.out.println(id +":" +name +":" +gender +":" +"working");
    } 
}
 
public class EmployeeDemo {
public static void main(String[] args) {
 
        //创建对象
        Employee tom = new Employee();
 
        //调用公有方法,给成员赋值变量
        tom.setName("tom");
        tom.setId("1");
        tom.setGender("male");
 
        //获取实例变量的值
        System.out.println(tom.getName());
        System.out.println(tom.getId());
        System.out.println(tom.getGender());
 
        //调用成员方法
        tom.work();
    }
 
}
 
//运行结果 
[[email protected] java]# java EmployeeDemo 
tom
1
male
1:tom:male:working
[[email protected] java]# cat Demo.java 
class Calculator {
    public String name = "my Carculator";
    public double num1;
    public double num2;
    public char option;
 
    public void init(double a, char op, double b) {
        num1 = a;
        num2 = b;
        option = op;
    }
  
    public void calculate() {
        switch (option) {
            case '+': System.out.println(name +":" +num1 +"+" +num2 +"=" +(num1+num2));
                      break;
            case '-': System.out.println(name +":" +num1 +"-" +num2 +"=" +(num1-num2));
                      break;
            case '*': System.out.println(name +":" +num1 +"*" +num2 +"=" +(num1*num2));
                      break;
            case '%': System.out.println(name +":" +num1 +"%" +num2 +"=" +(num1%num2));
                      break;
            case '/': if (num2 != 0) {
                             System.out.println(name +":" +num1 +"/" +num2 +"=" +(num1/num2));
                         } else {
                             System.out.println("num2 can not be 0 !");     
                         }
                         break;
            default : System.out.println("null");
        } 
 
    }
 
}
 
class Demo {
    public static void main(String[] args) {
        Calculator cal = new Calculator();
        cal.init(10 ,'%' ,3);
        cal.calculate();
        System.out.println("bye");
    } 
}
 
//运行结果 
[[email protected] java]# java Demo
my Carculator:10.0%3.0=1.0
bye

二、构造方法

1. 定义:

对象创建出来时,没有值:

对象创建出来时,有值:

构造方法作用:对对象进行初始化

2. 构造函数的特点:

1)在对象建立时由jvm调用,给对象初始化

2)在创建对象时调用

3)函数名与类名一致

4)没有返回值类型

5)当类中没有定义构造函数时,系统默认加上一个空参数的构造函数,有则覆盖

6)一个类中可以定义多个构造函数,以进行不同的初始化,以重载的形式体现

3. 构造代码块的特点:

1)给所有的对象进行统一初始化

2)创建对象时就运行,优先于构造函数

3)一般用于将所有构造方法中公共的信息抽取出来

4)与构造函数区别:全部对象和部分对象的区别

例子

[[email protected] java]# cat Demo9.java 
class Boy {
  String name;
  int age;
  String gender;
 
   // 构造代码块,给所有对象进行初始化
  {
       System.out.println("哭。。。");
  }
     
  Boy() {
       System.out.println("无参构造");
  }
 
  Boy(String n, int a, String g) {
       name = n;
       age = a;
       gender = g;
       System.out.println("有参构造");
  }
 
  void run() {
       System.out.println("跑...");
  }
 
}
 
public class Demo9 {
  public static void main(String[] args) {
       System.out.println();
       Boy b = new Boy();
       Boy b2 = new Boy("jack", 1, "男");
  }
}
 
//运行结果
[[email protected] java]# java Demo9
 
哭。。。
无参构造
哭。。。
有参构造

三、this关键字

1)表示所在函数所属对象的引用

2)this只能在非静态中(没有static修饰)函数使用

3)构造函数间相互调用必须放在构造函数的第一个语句中

4)可以解决构造函数中对象属性和函数形参的同名问题

class Person {
       String name;
       int age;
 
       Person() {
       }
 
       Person(String n){
              name=n;
       }
 
       Person(String n, int a) {
              //构造函数不能直接通过函数名直接调用,编译报错!!!
              Person(n);
              age = a;
       }
}

例子

//在构造函数中打印this与创建对象时打印对象名p,结果一样,说明this和p是一样,都是内存地址值
class Student {
    String name;
    String gender;
    int age;
 
    Student() {
    }
 
    Student(String name) {
       this();
       this.name = name;
    }
 
    Student(String name, String gender, int age) {
       this(name);
       System.out.println(this);  //[email protected]
       this.gender = gender;
       this.age = age;
    }
 
    void speak() {
       run();
       System.out.println("姓名:" + name + " 性别:" + gender + " 年龄:" + age
              + " 嘿嘿");
    }
 
    void run() {
       System.out.println("run.....");
    }
 
}
 
class Demo2 {
    public static void main(String[] args) {
       Student p = new Student("tom", "male", 28);
       System.out.println(p); // [email protected]
       p.speak();
    }
}
 
//运行结果
[[email protected] java]# java Demo2
[email protected]
[email protected]
run.....
姓名:tom 性别:male 年龄:28 嘿嘿

原文地址:http://blog.51cto.com/huangzp/2108056

时间: 2024-10-11 10:58:49

java封装、构造方法、this的相关文章

Java“封装”的例子

/*功能:Java"封装"的典型例子*/ public class Demo3_5{    public static void main(String args[]){        Clerk clerk1=new Clerk("qingfeng",22,5321.12f);        System.out.println("名字为"+clerk1.name+"薪资为"+clerk1.getSalary());//只能

java中构造方法和方法全面解析

java中构造方法和方法全面解析 我相信大多说人都对构造方法.方法不陌生,而且很了解,但我也相信有很多像我这样的没有一个很好很清晰很全面的认识,今天就把它整理如下,希望能给大家带来点方便与帮助,也希望大家多多讨论.          构造方法和方法的区别: 构造方法要与类名相同,无返回类型,在类初始化的时候调用.      方法最好与类名不同,对象调用,静态方法可用类名.方法(). 构造器和方法在下面三个方面区别:修饰符,返回值,命名. 1.和方法一样,构造器可以有任何访问的修饰: public

java封装之访问权限控制

封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系.系统的其他对象只能通过包裹在数据外面的已经授权的操作来与这个封装的对象进行交流和交互.也就是说用户是无需知道对象内部的细节(当然也无从知道),但可以通过该对象对外的提供的接口来访问该对象. 对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对

Java封装自己的Api

转自:http://www.2cto.com/kf/201404/291555.html 随着学习的深入,我们都想封装自己的Api,但对于新手这并不是一件简单容易的事! 我要达到的效果:自己封装一些方法,导出jar包,其他项目里加入它即可,并且,会有注释信息! 1.封装自己的Api,这一步很简单,自己写就好了! 2.导出javadoc,这一步也很简单:export.java.javadoc,在javadoc command里选择:C:\Program Files\Java\jdk1.7.0_45

java Stringbuffere构造方法

a 去哪里了? 本质上 :StringBuffer str = new StringBuffer('a');其实是定义str的大小 应该写成StringBuffer str = new StringBuffer("a"); 慎用单引号 java Stringbuffere构造方法,布布扣,bubuko.com

Java Object 构造方法的执行顺序

Java Object 构造方法的执行顺序 @author ixenos 为了使用类而做的准备工作包括三个步骤 1)加载:类加载器查找字节码(一般在classpath中找),从字节码创建一个Class对象 2)链接:验证字节码,为静态域(只是static修饰的域,不包含static final )分配存储空间,解析此类对其他类的所有引用 3)初始化:若该类有超类,对其初始化,执行静态初始化器(构造器算一个)和静态初始化块. 类初始化时构造方法执行顺序 对于某一个子类时: (1)初始化对象的存储空

【实例教程】Echarts 的 Java 封装类库

Echarts 的 Java 封装类库:http://www.oschina.net/p/echarts-java 没想到喜欢Echarts 的 Java 封装类库的人还挺多,在源码中的测试例子一般目的只是构造官网例子的结构,这里写个比较实际的简单例子来演示如何写出一个图表. 首先看看Option的提示. Option说明 Option正式代码中使用,不需要任何依赖. GsonOption正式代码中可以使用,需要引入Gson包,使用toString()方法可以转换为JSON结构的数据(支持fun

【原创】中文分词系统 ICTCLASS2015 的JAVA封装和多线程执行(附代码)

本文针对的问题是 ICTCLASS2015 的多线程分词,为了实现多线程做了简单的JAVA封装.如果有需要可以自行进一步封装其它接口. 首先ICTCLASS2015的传送门(http://ictclas.nlpir.org/),其对中文分词做的比较透彻,而且有一定的可调式性.但是应用到实际开发中的话,多线程操作是必须的,因此有了本文的初衷. 可能有的小伙伴不太清楚ICTCLASS是干嘛的,下面是一段介绍:NLPIR汉语分词系统(又名ICTCLAS2015),主要功能包括中文分词:词性标注:命名实

寿星天文历Java封装整理版

由于生活和工作的原因,"寿星天文历"我一直没有动,长时间的丢弃后,当重新拾起时,比较费劲.编程就是这样,思维的火花只在当初的那一瞬,一旦熄灭,重新再点燃断掉的思维是很困难的.因为人的"忘记"能力,真的是挺强的,有时回顾或维护以前的代码时,常常会感叹道:这是我写的吗?够牛逼,看不懂!呵呵,这时候注释的作用的凸显出来了,尽管如此有时仅仅靠注释找以前的思路也是很困难. 跑题了,那么,首先对于等着"寿星天文历"封装整理版代码的各位,说声抱歉.这回整理的代