Java(六)--类和对象

2017-10-12  本文已影响0人  五秋木
  1. 文件中可以包含多个类,但是只能有一个公共类,公共类且与文件名同名。
  2. 类的建立与测试
    形式一:将测试放在主类的main函数中,类的数据域、构造方法与其他方法放在主函数外,所有的都在同一个文件中,文件名与类名相同。例如:Circle1.java文件中
public class Circle1{
  public static void main(String [] args)
{
....
Circle1 circle1 = new Circle1()  //创建对象
Circle1 circle2 = new Circle1(5)  //创建对象
circle2.radius = 15;  //调用类中的数据域
}
double radius;   //数据域
Circle1(){
   radius = 1.0
}//无参数构造函数
Circle1(double newRadius){
   radius = newRadius;
}//有一个参数的构造函数
double getArea(){
  return radius*redius*Math.PI;
}
}

形式二:将类中数据域、构造方法与其他方法均放在一个类中。测试函数放在另外一个类,且该类为主类中。即文件中包含两个类,测试在主类中。例如:
文件TestCircle1.java

public static void main(Sting [] args)
{
...
}
class Circle1{
double radius;
Circle1()
{
 radius = 1..0;
}
Circle1(double newRadius){
 radius = newRaius;
}
double getArea(){
 return radius*radius*Math.PI;
}
}
  1. 构造方法:必须和所在类相同的名字、无返回类型、在新建一个对象new时调用,构造方法是初始化对象。
  2. 对象的数据和方法使用圆点运算符来访问和调用。
  3. 区别:
    Math.methodName(参数)来调用Math中的方法。
    但Circlie.getArea()不能来调用getArea方法。
    原因:Math中所有方法是用关键词static定义的静态方法
    getArea是个实例方法。非静态。必须使用具体object.getArea()
    的方式从对象调用。
  4. 匿名对象:创建对象后不在进行赋值给一个变量进行引用。例如
    System.out.print("Area is "+new Circle(5).getArea());
  5. 类的属性或者数值域创建后若没有初始化,java会自动赋默认值。
    例如:
    int类型变量默认初始值为0
    float类型变量默认初始值为0.0f
    double类型变量默认初始值为0.0
    boolean类型变量默认初始值为false
    char类型变量默认初始值为0(ASCII码)
    long类型变量默认初始值为0
    引用型变量默认初始值为null。

注1:若局部变量没有初始化,会出现编译错误。
注2:NullPointerException:当调用值为null的引用变量上的方法时会发生此类异常。故在通过引用变量调用一个方法前,确保将对象引用赋值给该变量。

  1. 库类
    1. Date类--java.util.Date
    Date();  //构造函数
    Date(elapseTime:long)   //构造1970-1-1+elapseTime的时间
    toString();   //返回日期和时间的字符串表达式
    getTime();   //返回从1970-1-1至今的毫秒数
    
    1. Random类
    Random();  //以当前时间作为种子构造Random对象
    Random(seed:long): //以特定种子构造Random对象
    nextInt();   //返回一个随机整数
    nextInt(n:int);   //返回0到n的整数,但不包括0和n
    nextLong();   //随机long型
    nextDouble();   //(0.0 , 1.0)
    nextFloat();    //(0.0F , 1.0F)
    nextBoolean();   //随机布尔
    

相同的种子产生相同的随机数列,固定的随机数列测试程序。

  1. GUI组件--java.swing.*
    1. JOptionPane(三种方法:显示、输入、确定)
      showMessageDialog
      showInputDialog
      showConfirmDialog
    2. JFrame、JButton、JLabel、JTextField、JCheckBox、JRadioButton、JComboBox、JPanel
  2. 常量:被类中所有对象所共享,一定是静态的,声明:final static double PI = 3.1415926......,被引用时直接使用Math.PI即可
  3. 类中变量:实例变量和静态变量
    static变量与instance变量,初始化的时机是不同的。instance属性在创建实例的时候初始化,static属性在类加载,也就是第一次用到这个类的时候初始化,对于后来的实例的创建,不再次进行初始化。
    实例变量的引用必须在实例(对象)创建后,且方式为:对象名.变量名
    静态变量的引用
    1. 对象名.变量名,可能出现警报:如下
      The static field Calendar.MONTH should be accessed in a static way
    2. 类名.变量名(推荐)
      同理:静态方法和实例方法与此类似。
  4. 可见性修饰符
    public:在类、方法、数据域前出现,表示可以被任何其他的类访问。
    无public:只能被同一个包中任何类访问。包私有或者包内访问
    private:方法和数据域只能在它自己的类中被访问。仅能修饰类的成员,不能修饰类。
    如果一个对象定义在自己的类中,那么这个对象可以访问他的私有对象。
  5. 为了防止用户创建对象,例如Math中所有的数据域和方法都是静态的,所以没必要创建对象,所以定义Math类的构造函数:private Math{ },防止创建类的构造。
public final class Math {
    /**
     * Don't let anyone instantiate this class.
     */
    private Math() {}

Math是final类 不是static类
这是sun公司关于java.lang.Math类的开头,由于构造函数被声明为私有的,就是说明不能被外部调用,所以不能new出来一个新的对象
Math类的作用是对数学进行一些扩充,进行一些常量定义、操作定义,只需要传入参数就可以返回你需要的结果,所以所有方法都是静态方法直接使用,不需要实体类就行
那个声明:Don't let anyone instantiate this class. 也说明了Math类就是不会初始化任何实例。Math还定义为final类,不允许被继承。所以永远不会出现Math对象 。

  1. 为防止用户随意篡改数据域,将之设为private类型,这叫做数据域封装,但是类外的对象不能访问这个数据域。想读取:使用get方法;想修改,使用set方法。
  2. 在方法中引用的对象和传递的对象是一样的,传共享。
上一篇下一篇

猜你喜欢

热点阅读