标签: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