标签:java
一、封装特性:安全、将变化隔离、便于使用、提供重复性
例子
[root@bch04 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(); } } //运行结果 [root@bch04 java]# java EmployeeDemo tom 1 male 1:tom:male:working
[root@bch04 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"); } } //运行结果 [root@bch04 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)与构造函数区别:全部对象和部分对象的区别
例子
[root@bch04 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, "男"); } } //运行结果 [root@bch04 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); //Student@659e0bfd 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); // Student@659e0bfd p.speak(); } } //运行结果 [root@bch04 java]# java Demo2 Student@659e0bfd Student@659e0bfd run..... 姓名:tom 性别:male 年龄:28 嘿嘿
标签:java
原文地址:http://blog.51cto.com/huangzp/2108056