Java面向对象(二)

  1. 静态变量和静态函数
  2. 封装
  3. 访问控制修饰符
  4. 类中类

静态变量的定义: 

  在JAVA中类在声明的时候,其实并没有申请和产生内存空间,就如同我们的一个切实可行的想法,但其实并没有去实施这个想法。而类只有在用这种数据类型创建一个类的对象的时候,才能在内存中申请和产生类大小的内存空间,这一块内存空间是用来存放成员变量和成员函数的备份。所以在类声明的时候,是不可以对成员变量进行初始化的,只有用类创建的对象时,才能通过对象对变量初始化,SO,便产生的静态变量!!!它对所有的类对象都是很公共的,对每一个类的对象都具有相同的值。静态变量的关键字是static,它的语法是:


               Static <数据类型> <静态变量名> = <初始化静态变量> ; 

调用静态变量: 

静态变量在声明的时候就同时初始化,并且只能初始化一次,它有自己的变量作用域,但具有全局的生命周期,可以随时被调用。它声明的时候内存中就从开始一直保留一份值。在类的对象没有被创建之前可以使用类名调静态成员变量,它的语法是:

                     <类名> . <静态成员变量> ;

静态函数:

  既然有了静态变量那就会有静态函数,静态函数只有访问静态变量,其它非静态的函数是不被允许的,但在静态成员函数中可以声明它自身的变量,它也是一个函数也具有其它函数的特性!静态函数的声明和静态变量的声明所差无几:

           Static <数据类型> <静态函数名> (变量表) ;

和静态变量一样,静态函数在声明的时候就在内存中存在(即使没有创建对象这和其它的非静态函数是不一样的),也具有全局的生命周期。

 下面给出一个静态函数和静态变量的例子:

import java.io.*;   //导入io流
public class Text_Static  
{undefined
 int iNum1;
 static int iNum2;
 Text_Static(int iNum1,int iNum2)
 {undefined
  this.iNum1=iNum1;
  this.iNum2=iNum2;
  this.iNum1++;
  this.iNum2++;
 }
 public void Display1(String str)
 {undefined
  System.out.println(str+".iNum1="+iNum1);  
 }
 //静态函数只能访问静态变量
 public static void Display2(String str)
 {undefined
  System.out.println(str+".iNum2="+iNum2);
 }
 public static void main(String[] args)
 {undefined
  Text_Static Obj1=new Text_Static(1,2);
  Obj1.Display1("Obj1"); //输出:iNum1=2
  Obj1.Display2("Obj1"); //输出:iNum2=3
  Text_Static Obj2=new Text_Static(10,20);
  System.out.println();
  Obj2.Display1("Obj2"); //输出:iNum1=11
  Obj2.Display2("Obj2"); //输出:iNum2=21
  Obj1.Display1("Obj1"); //输出:iNum1=2
  Obj1.Display2("Obj1"); //输出:iNum2=21
 }
}

封装(数据的隐藏): 

封装是面向对象的基本特征之一。 将东西包在一起,然后以新的完整形式呈现出来。
将方法和字段一起包装到一个单元中,单元以类的形式实现。信息隐藏,隐藏对象的实现细节,不让外部直接访问到。将数据和方法包装进类中,加上具体的实现的隐藏(访问修饰符),共同被称作封装,其结果是一个同时带有特征和行为的数据类型。

定义类、定义其属性、方法的过程称为封装类

实现封装: 

/*

编程实现Person类的封装

*/

public class Person{
//1.私有化成员变量,使用private关键字修饰

private String name;

private int age;

private String country;

//使用static关键字修饰成员变量表示提升为类层级只有一份被所有对象共享

//public static String country;

//3.在构造方法中调用set方法进行合理值的判断

public Person(){
}

public Person(String name, int age, String country){
setName(name);

setAge(age);

setCountry(country);

}

//2.提供公有的get和set方法,在方法体中进行合理值的判断

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){
this.age = age;

}else{
System.out.println("年龄不合理!!!");

}

}

public String getCountry(){
return country;

}

public void setCountry(String country){
this.country = country;

}

public void show(){
System.out.println("我是" + getName() + ",今年" + getAge() + "岁了,来自" + getCountry() + "!");

}

//自定义成员方法描述吃饭的行为

public void eat(String food){
System.out.println(food + "真好吃!");

}

//自定义成员方法描述娱乐的行为

public void play(String game){
System.out.println(game + "真好玩!");

}

}

包(Package):

类似于将文件用文件夹管理,将大量类按照实际需要放到相同或不同的包里面。

  1.  package 语句必须放在源代码文件的最前面,但也可不指定包。
  2. 推荐包的名字小写
  3. 如果要用命令行来运行某个包中的类,必须首先到达包目录所在上一级目录来下命令

访问包中的类: 

  1. 在同一个包中直接用类名来访问,不用指定类所在的包
  2. 两个类不在同一个包中 

1)在使用类时指定类的路径

2)用 import 语句导入该类

 访问控制修饰符:

  类的访问控制修饰符:

     public:  表示公开的,在任何位置都可以访问 (即所有类可见)  

     使用的对象:类、接口、变量、方法

      protected:   同包以及所有的子类

      使用对象:变量、方法。 

      注意:不能修饰类(外部类)。

      缺省:          同包,不使用任何修饰符

      使用的对象:类、接口、变量、方法

      private:        私有的,在同一类中访问

      使用的对象:变量、方法

注意:如果将一个类定义为public类,类名和文件名必须相同,因此在一个 .Java文件中最多只能有一个public类

成员的访问控制符: 

 1)private:

成员只能在定义它的类的内部被访问

2)default: 

成员可以在定义它的类的内部被访问,也可以被这个包中的其他类访问

3)protected:

成员可以在定义它的类的内部被访问,也可以被这个包中的其他类访问,还可以被包外的子类访问

4)public:

成员可以在定义它的类的内部被访问,也可以被包内,包外的所有其他类访问

很明显,从开放的程度上讲有

private < default < protected < public

 类中类:

类中类,顾名思义是在类中定义了类,又称为内部类

public class OuterClass {undefined

private String name ;

private int age;

public String getName() {undefined

return name;

}

public void setName(String name) {undefined

this.name = name;

}

public int getAge() {undefined

return age;

}

public void setAge(int age) {undefined

this.age = age;

}

class InnerClass{undefined  //内部类(类中类)

public InnerClass(){undefined

name = "chenssy";

age = 23;

}

}

}

 注意:

  1. 内部类中的成员只在内部类范围内才能用,外部类不能像使用自己的成员变量一样使用他们
  2. 如果在内部类中使用 this ,仅代表内部类的对象,因此也只能引用内部类的成员

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值