java类中的变量
根据定义变量位置的不同,可以将变量分成两大类:成员变量和局部变量。
变量命名规则:合法的标识符,多个有意义的单词连缀而成,其中第一个单词首字母小写,后面每个单词首字母大写。
成员变量:类里定义的变量。
成员变量分为两种:类变量和实例变量。有static修饰的是类变量,没有static修饰的是实例变量。
可以把类变量和实例变量统称为成员变量,其中类变量可以理解为类成员变量,它作为类本身的一个成员,与类本身共存亡:实例变量则可理解为实例成员变量,它作为实例的个成员,与实例共存亡。
访问方式如下:
类.类变量
实例.实例变量
实例.类变量
变量的作用域:
从程序运行结果来看,不难发现类变量的作用域比实例变量的作用域更大:实例变量随实例的存在而存在,而类变量则随类的存在而存在。实例也可访问类变量,同一个类的所有实例访问类变量时,实际上访问的是该类本身的同一个变量,也就是说,访问了同一片一内存区。
局部变量:在方法里定义的变量。
局部变量分为三大类:
形参:在定义方法签名时定义的变量,形参的作用域在整个方法内有效。
方法局部变量:在方法体内定义的局部变量,它的作用域是从定义该变量的地方生效,到该方法结束时失效。
代码块局部变量:在代码块中定义的局部变量,这个局部变量的作用域从定义该变量的地方到该代码块结束时失效。
关键字return
return是在循环里是跳出整个方法,但是它还可以返回参数。使用格式如下:
[修饰词] 返回值类型 方法名(形参列表){
return 返回值;
}
如果返回值类型写的是void,则不需要写return 返回值;可以return;
例:
/***
* 求最大值
参数:int 数组
*/
public String max(int [] args){
if(args.length==0)
{
return "数组长度不能为0";
}else{
int max=args[0];
for(int i=0;i<args.length-1;i++){
if(max<args[i+1]){//判断最大值
max=args[i+1];
}
}
return max+"";//renturn的变量 要跟返回值类型一致
}
}
public static void main(String [] args){
int [] max={};
Person p=new Person();
//String max1=p.max(max);
String max1=new Person().max(max);//跟上边写法一样
System.out.println("数组max的最大值是:"+max1);
}
如果把String 改成void的话就会报错,去掉返回值就不会报错,但这样只作为一个结束语句使用,并没有什么意义。
/***
* 求最小值
*/
public void min(int [] args){
if(args.length==0)
{
return;
}else{
int min=args[0];
for(int i=0;i<args.length-1;i++){
if(min<args[i+1]){//判断最小值
min=min;
}
}
return;
}
}
}
类的封装
访问控制符
private ( 当前类访问权限):如果类里的一个成员(包括成员变量、方法和构造器等)使用private访问控制符来修饰,则这个成员只能在当前类的内部被访问。很显然,这个访问控制符用于修饰成员变量最合适,使用它来修饰成员变量就可以把成员变量隐藏在该类的内部。
default(包访问权限):如果类里的一个成员(包括成员变量、方法和构造器等)或者一个外部类不使用任何访问控制符修饰,就称它是包访问权限的,default访问控制的成员或外部类可以被相同包下的其他类访问。
protected(子类访问权限):如果一个成员(包括成员变量、方法和构造器等)使用protected访问控制符修饰,那么这个成员既可以被同一个包中的其他类访问,也一可以被不同包中的子类访问。在通常情况下,如果使用protected来修饰一个方法,通常是希望其子类来重写这个方法。继承过程中使用最多
public(公共访问权限):这是一个最宽松的访问控制级别,如果一个成员(包括成员变量、方法和构造器等)或者一个外部类使用public访问控制符修饰,那么这个成员或外部类就可以被所有类访问,不管访问类和被访问类是否处于同个包中,是否具有父子继承关系。
封装指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。
如果上边代码中年龄一般不会超过20,年龄也没有负数对吧,所以代码中年龄应该控制在0~20之内,否则不符合我们现实生活。所以我们要改成如下
package
引入了包(package)机制,提供了类的多层命名空间,用于解决类的命名冲突、类文件管理等问题。一旦在Java源文件中使用了这个package语句,就意味着该源文件里定义的所有类都属于这个包。
包的命名格式:
Java语法只要求包名是有效的标识符即可,但从一可读性规范角度来看,包名应该全部是小写字母,而且应该由一个或多个有意义的单i司连缀而成。
注意:
package语句必须作为源文件的第一条非注释性语句,一个源文件只能指定一个包,即只能包含一条package语句,该源文件中可以定义多个类,则这些类将全部位于该包下。
package com.zhanwang.test;
public class TestDog {
public static void main(String[] args) {
Dog p=new Dog();
p.setAge(130);
System.out.println("获取年龄:"+p.getAge());
}
}
/**
* 狗类
* @author shenjian
* 2017-9-19
*/
class Dog{
private int age;
/**
* 设置年龄
* @param age 年龄
*/
public void setAge(int age) {
this.age=age;
}
/**
* 获取年龄的值
* @return 返回年龄值
*/
public int getAge() {
return this.age;
}
}