一、getter方法与setter方法
声明为私有访问类型(private)的变量,只能通过类中公共的getter或setter方法被外部类访问
getter和setter方法主要用来隐藏类的实现细节和保护类的数据
对于每个变量,get方法返回其值,set方法设置其值
getter方法以get开头,setter方法以set开头,后边跟着变量名(此时的变量名的首字母要大写)
public class Dog{
private String color;
public String getColor(){
return color; } //get方法返回color的值
public void setColor(String c){
this.color=c; } // set方法接收一个参数并将其赋值给当前对象的color属性
}
●关键字this用于引用当前对象. this.color是当前对象的颜色属性
●一旦getter和setter方法被定义了,我们就可以在main方法中使用它们
public static void main(String[] args){
Dog d1=new Dog();
d1.setColor(“white”);
System .out.println(d1.getColor()); } //输出”white”
●getter和setter方法允许我们控制这些值.例如,你可以在实际设置该值之前,在设置器中验证给定的值.
●getter和setter方法是封装的基本构建块.我们将在后边介绍封装.
二 构造函数
构造函数是创建对象时调用的特殊方法,用于初始化对象
可以使用构造函数为对象提供初始值
注意:构造函数名称必须与类名相同.
构造函数不能有明确的返回类型.
public class Dog{
private String color;
Dog(){
color=”white”; }
} // Dog()方法是类的构造函数,所以无论何时创建该类的对象,color属性都将设置为”white”
●构造函数也可以带参数初始化属性
public class Dog{
private String color;
Dog(String c){
color=c; }
}
●使用new关键字创建对象时,会调用构造函数
public class MyJavaClass{
public static void main(String[] args){
Dog d=new Dog(“Yellow”); } //调用带参数的构造函数
}
●一个类可以有多个构造函数,它们具有不同数量的参数.
构造函数中的setter方法可以用来设置属性值
public class Dog{
private String color;
Dog(){
this.setColor(“white”); }
Dog(String c){
this.setColor(c); }
public void setColor(String c){
this.color=c; }
}
上面的类有两个构造函数,一个没有参数,将color属性设置为默认值”white”,另一个构造函数接收一个参数将其赋值给属性
Dog d1=new Dog(); //颜色是white
Dog d2=new Dog(“Yellow”); //颜色是Yellow
注意:java会自动提供一个默认的构造函数,所以所有的类都有一个构造函数,无论是否有特殊的定义
三 基本类型和引用类型
值类型是基本类型,包括 byte , short ,int, long , float , double ,boolean,char
赋值给基本类型的值将存储在相应的存储器位置中
public class MyJavaClass{
public static void main(String[] args){
int x=10;
addTo(x);
System.out.println(x); }
static void addTo(int num){
num+=1; }
} // 输出10
因为addTo方法没有返回任何值,所以x的值没有改变,输出10
●参考类型即引用类型,将参考(或地址)存储到存储相应数据的存储器位置
当你使用构造函数创建对象时,你将创建一个引用类型
例如,我们要定义一个Student类:
public class MyJavaClass{
public static void main(String[] args){
Student j;
j=new Student(“Jing”);
j.setAge(18);
addTo(j);
System.out.println(j.getAge()); }
static void addTo(Student s){
s.setAge(s.getAge()+1); }
} // 输出19
addTo方法将Student对象作为参数,并将其属性值age增加1.
j是引用类型,因此该方法影响对象本身,并且可以更改其属性的实际值.
●数组,字符串也是引用数据类型
四 Math类
Math类,它为数学运算提供了预定义的方法,不需要创建Math类的对象就可以使用它。要访问它,只需要输入Math.相应的方法就可以
Math.abs()返回参数的绝对值.参数可以是 short,int,long,float,double,byte类型,值以int形式返回
int a=Math.abs(-6); // 6
Math.ceil()将一个数进行上舍入,返回值大于或等于给定的参数,值以double形式返回
double c=Math.ceil(23.45); //24.0 ceiling是天花板,上限的意思
Math.floor()将一个数进行下舍入,返回值小于或等于给定的参数,值以double形式返回
double f=Math.floor(4.35); //4.0 floor地板的意思
Math.max()用于返回两个参数中的最大值
Math.min()用于返回两个参数中的最小值
Math.pow()用于返回第一个参数的第二参数次方.值以double形式返回
double p=Math.pow(2,3); //8.0
Math类还提供其他方法:sqrt()求平方根,sin(),cos()等
五 static 修饰符
当你声明一个变量或方法为静态时,它属于这个类,而不是一个特定的实例.这意味着只有一个静态成员的实例存在,即使你创建了该类的多个对象,或者没有创建任何对象,它也将被所有对象共享可用
public class Counter{
public static int numCount=0;
Counter(){
numCount++;}
} //numCount将被该类的所有对象共享, static关键字声明独立于对象的 静态变量
我们可以在main中创建Counter类的对象,并访问静态变量
public class MyJavaClass{
public static void main(String[] args){
Counter c1=new Counter();
Counter c2=new Counter();
System.out.println(Counter.numCount); }
} // 输出2
每次创建Counter类的新对象时,构造函数Counter()都会被执行,创建两个对象,被执行两次,所以输出2
也可是使用该类的任何对象(c1.numCount/c2.numCount)来访问静态变量.它们的结果是一样的
■static关键字也可以用来声明独立于对象的 静态方法
public class Dog{
public static void barking(){
System.out.println(“Woof-Woof”); }
}
现在可以在不创建对象的情况下使用barking()方法:
public class MyJavaClass{
public static void main(String[] args){
Dog.barking(); }
Math类的那些方法就是静态方法,所以我们可以在不创建Math对象的情况下调用这些静态方法.
■main方法必须始终是静态的
六 final修饰符
使用final关键字标记一个变式常量,变式常量值能被赋值一次,赋值一次后就变为常量,不能被更改
final修饰符通常和static修饰符一起使用来创建类常量
class MyJavaClass{
public static final double PI =3.14; // 常量的标识符所有字母都要大写
public static void main(String[] args){
System.out.println(PI); }
}
PI现在是一个常量,任何为其赋值的尝试都会输出错误.
■方法和类也可以标记为final,这样做可以限制方法和类,使其不能被重写,并且不能使其成为子类
七 包(package)
java使用包这种机制是为了防止命名冲突,提供访问控制,用来搜索和定位类、接口、枚举和注释等
一个包可以定义为一组相互联系的类型(类、接口、枚举、注释),为这些类型提供访问保护和命名空间管理的功能。
假如新建一个包,名为jiketaotie
package jiketaotie;
我们需要导入包中的类:下边的例子显示如何使用jiketaotie包中的Cat类
import jiketaotie.Cat;
class MyJavaClass{
public static void main(String[] args){
Cat c1=new Cat();
c1.barking(); }
}
■当一个类被放入包中会发生两个主要结果.首先,包的名称将成为该类的名称的一部分(jiketaotie.Cat),其次,包的名称必须与相应的类文件所在目录的结构相匹配
可以使用通配符”*”导入包中的所有类.
import jiketaotie.*; //导入包中的所有类