1.まえがき
Javaには、クラスに関する知識がたくさんあります。ここでは、基本的な知識について簡単に説明します。
2つ目は、クラスの定義とオブジェクトの作成です。
親クラス-スーパークラス
は、親クラスから派生したクラスのサブクラスを指定します
オブジェクトを作成するときは、対応する構築方法を定義する必要があります
三、工法
構築メソッドには戻り値タイプがありません
(戻り値タイプが指定されている場合、Javaはこのいわゆる構築メソッドを一般的なメソッドとして扱います)
演習1-長方形のクラス
package try_a_package;
public class Rectangle {
private double a;
private double b;
private String name="矩形";
public Rectangle()
{
a=1;
b=2;
name="矩形";
}
public Rectangle(double x,double y)
{
a=x;
b=y;
adjustName();
}
public Rectangle(double x)
{
a=x;
b=x;
adjustName();
}
public void Rectangle(double x,double y,String n)
{
a=x;
b=y;
name=n;
}
public boolean isRectangle()
{
if(a>0 && b>0)
{
return true;
}
return false;
}
public void adjustName()
{
if(isRectangle())
{
if(a==b)
{
name="正方形";
}
else
{
name="长方形";
}
}
else
{
name="非长方形";
}
}
public double getPerimeter()
{
return (a+b)*2;
}
public double getArea()
{
return a*b;
}
@Override
public String toString()
{
String msg=name+":边长a="+a+",边长b="+b;
if(isRectangle())
{
msg=msg+",周长"+getPerimeter()+",面积"+getArea();
}
return msg;
}
public static void main(String[] args)
{
Rectangle r[]=new Rectangle[5];
r[0]=new Rectangle();
r[1]=new Rectangle(3);
r[2]=new Rectangle(-2);
r[3]=new Rectangle(5,4);
r[4]=new Rectangle(-1,2);
int i;
for(i=0;i<r.length;++i)
{
System.out.println(r[i]);
}
Rectangle r1=new Rectangle();
r1.Rectangle(10,20,"长方形");
System.out.println(r1);
}
}
運転結果
四、このキーワード
これは、メソッド本体でのみ使用できるJavaキーワードです。
オブジェクトが作成されると、Java仮想マシン(JVM)がオブジェクトへのポインターを割り当てます。これは
クラスでは、これは非静的メソッドで使用できます。静的メソッドおよび静的コードブロックでは使用しないでください。
これは、これは特定のオブジェクトにのみ関連付けることができ、クラスには関連付けることができないためです。同じクラスの異なるオブジェクトはこれが異なります。
アプリケーションの状況
- これを使用して、別のコンストラクター-this(パラメーターリスト)を呼び出します。これは、クラスのコンストラクターでのみ使用され、他の場所では使用できません。
- メソッドパラメータまたはメソッド内のローカル変数がメンバー変数と同じ名前の場合、メンバー変数はシールドされ、これを介してメンバー変数にアクセスできます。
- メソッドでは、メソッドが属するクラスの現在のオブジェクトを参照する必要がある場合、これを直接使用できます。
このエクササイズトライアングルクラス
package try_a_package;
public class Triangle1 {
private double a,b,c;
String name="三角形";
public Triangle1()
{
this(10);
}
public Triangle1(double x)
{
this(x,x,x);
}
public Triangle1(double x,double y)
{
this(x,x,y);
}
public Triangle1(double a,double b,double c)
{
this.a=a;
this.b=b;
this.c=c;
adjustName();
}
public void adjustName()
{
if(this.isTriangle())
{
double t;
if(a>b)
{
t=a;
a=b;
b=t;
}
if(a>c)
{
t=a;
a=c;
c=t;
}
if(b>c)
{
t=b;
b=c;
c=t;
}
name="三角形";
if(c*c==a*a+b*b)
{
name="直角"+name;
}
else if(a==b&&b==c)
{
name="等边"+name;
}
else if(a==b||b==c)
{
name="等腰"+name;
}
}
else
{
name="非三角形";
}
}
public boolean isTriangle()
{
if(a+b>c && a+c>b && b+c>a)
{
return true;
}
return false;
}
public double getPerimeter()
{
return a+b+c;
}
public double getArea()
{
double p,s;
p=(a+b+c)/2;
s=Math.sqrt(p*(p-a)*(p-b)*(p-c));
return s;
}
@Override
public String toString()
{
String msg=name+"\t"+a+"\t"+b+"\t"+c;
if(isTriangle())
{
msg=msg+"\t"+this.getPerimeter()+"\t"+this.getArea();
}
return msg;
}
public static void printHeader()
{
System.out.println("图形名称\t\t边长a\t边长b\t边长c\t周长\t面积");
}
public static void main(String[] args)
{
Triangle1 t1,t2,t3,t4,t5;
t1=new Triangle1();
Triangle1.printHeader();
System.out.println(t1);
t2=new Triangle1(6);
t3=new Triangle1(3,4);
t4=new Triangle1(3,4,5);
t5=new Triangle1(3,4,7);
System.out.println(t2);
System.out.println(t3);
System.out.println(t4);
System.out.println(t5);
}
}
運転結果
5、オブジェクトメンバープロパティの初期化
オブジェクトを初期化するときは、非静的初期化ブロックを使用してオブジェクトを初期化できます。
初期化ブロックの中括弧{}は省略できません。
静的修飾子
静的に変更されたメンバー変数-静的変数、静的属性、クラスメンバー変数。
クラスメンバーメソッドは、非クラスメンバー変数にアクセスできません。
クラスメンバー変数の場合、静的初期化ブロックを使用して初期化します。
注:静的初期化ブロックでは、非クラスメンバー変数を初期化できません。
ただし、非静的初期化ブロックでは、クラスメンバー変数とクラスメンバーメソッドを使用できます。
初期化演習-Triangle2
package try_a_package;
public class Triangle2 {
// 第一步,初始化
private static int id=1;
double a=1,b=1,c=1;
String name="三角形";
// 第二步,静态初始化块,仅执行一次
static
{
System.out.println("静态初始化(只执行一次:id——"+id);
id=100;
f1();
}
// 第三步,执行动态初始化块
{
System.out.println("动态初始化:id——"+id);
System.out.println("a="+a+",b="+b+",c="+c);
id=id+1;
a=10;
b=10;
c=10;
f2();
}
public Triangle2()
{
System.out.println("构造方法:id——"+id);
System.out.println("a="+a+",b="+b+",c="+c);
a=100;
b=100;
c=100;
}
public static void f1()
{
System.out.println("我是类成员方法f1()!");
}
public static void f2()
{
System.out.println("我是类成员方法f2()!");
}
@Override
public String toString()
{
return "Triangle{a="+a+",b="+b+",c="+c+",name="+name+"}";
}
public static void main(String[] args)
{
Triangle2 t1=new Triangle2();
System.out.println(t1+"\n");
Triangle2 t2=new Triangle2();
System.out.println(t2);
}
}
運転結果
可変スコープ
変数のスコープは比較的単純で、基本的にC ++に似ています。
注:例外処理パラメーター変数のスコープは、キャッチ後のすべての例外処理ブロックです。