プロセス指向: イベントが比較的単純な場合、プロセス指向はイベントの特定のステップとプロセスに焦点を当てるために使用されます。プロセスにおける具体的な動作、関数は最小単位であり、それをどのように実行するかを検討します。
オブジェクト指向: 「参加者」を見つけることに重点を置き、関数をオブジェクトにカプセル化し、関数を持つオブジェクトを強調し、クラス/オブジェクトを最小単位として使用し、誰がそれを行うかを検討します。
ケース: Xiao Ming が冷蔵庫から何かを取り出す
プロセス指向:
オブジェクト指向:
プロセス指向 —> オブジェクト指向、実際には、実行者から指揮者への移行です
すべてはオブジェクトです
オブジェクト: テンプレート下の特定の物、特定のエンティティ、特定のインスタンス、特定の製品
クラス: オブジェクトから上向きに画像部分を抽出し、その部分を公開し、フォームクラスです。クラスは抽象です。はい、これはテンプレートです。通常、コードを記述するときは、最初にクラスを記述し、次にそのクラスに基づいて対応するオブジェクトを作成します。
クラスは、クラスを抽象化したものです。オブジェクトであり、オブジェクトはクラスのインスタンス化です
1. 属性 (フィールド メンバー変数)
属性は、クラスまたはオブジェクトに含まれるクラスのデータまたは静的特性を定義するために使用されます。属性のスコープはクラス本体全体です。
属性定義形式:
[修飾子] 属性タイプ 属性名 = [デフォルト値];
2. メソッド
メソッドは、このクラスまたはこのクラスのインスタンスの動作特性と機能実装を定義するために使用されます。メソッドは、クラスとオブジェクトの動作特性を抽象化したものです。メソッドは、手続き指向プログラミングの関数に非常に似ています。プロセス指向では関数が最も基本的な単位であり、プログラム全体は関数呼び出しで構成されます。オブジェクト指向では、プログラム全体の基本単位はクラスであり、メソッドはクラスやオブジェクトに従属します。
メソッド定義形式:
[修飾子]メソッドの戻り値の型 メソッド名(仮引数リスト) {
//Java文
}
上記の King of Glory ヒーロー クラスの作成を例として考えてみましょう:
//创建英雄类 public class Hero { //属性 String Name;//英雄姓名 int Survive;//生存能力 int Attack;//攻击伤害 int Skill;//技能效果 int Difficulty;//上手难度 //技能 public void Kill(int number){ //根据输入的数字释放几技能 System.out.println(Name+"释放"+number+"技能!!!"); } //输出该英雄的属性 public void print(){ System.out.println("英雄:"+Name); System.out.println("生存能力:"+Survive); System.out.println("攻击伤害:"+Attack); System.out.println("技能效果:"+Skill); System.out.println("上手难度:"+Difficulty); } }
次に、作成したクラスのオブジェクトを作成します。
public class TestCode01 { //main方法,程序的入口 public static void main(String[] args) { //创建一个对象(英雄)-->马克波罗 Hero make = new Hero(); make.Name = "马克波罗"; make.Survive = 4; make.Attack = 6; make.Skill = 6; make.Difficulty = 5; //再创建一个英雄-->澜 Hero lan = new Hero(); lan.Name = "澜"; lan.Survive = 3; lan.Attack = 5; lan.Skill = 4; lan.Difficulty = 6; lan.Kill(1); //输出两个英雄的属性 make.print(); System.out.println("-------------"); lan.print(); //释放技能 make.Kill(3); System.out.println("-------------"); lan.Kill(2); } }
結果: 各ヒーローは同じ属性を持ち、各属性は異なる値を持ちます。クラスを通じて多くのオブジェクトを作成でき、各オブジェクトは異なる属性値を持ちます。
例: 『ザ・キング』には 100 人以上のヒーローが登場し、それぞれに異なる特徴があります。
オブジェクトの作成プロセス:
(1) 初めてクラスに出会ったとき、クラスをロードする必要があります。ロードは 1 回だけです。
(2) オブジェクトを作成し、ヒープ内のスペースを空けます。
(3) オブジェクトを初期化します。属性の割り当てはすべてデフォルトの初期値です。
(4) new キーワードはコンストラクターを呼び出し、構築メソッドを実行し、コンストラクター内のプロパティを再割り当てします
オブジェクトはすべて新しいです。新しいキーワードは次のとおりです。実際にはコンストラクター (コンストラクター) と呼ばれるメソッドを呼び出します。
コンストラクターを呼び出すとき、クラスにコンストラクターが記述されていない場合、システムはデフォルトでコンストラクターを割り当てます。 コンストラクター (空のコンストラクター)
コンストラクター メソッドの形式:
#[修飾子] コンストラクター名 () {}# #コンストラクターとメソッドの違い:
コンストラクターを呼び出す目的は、プロパティに値を割り当てることです。
注: 通常、空のコンストラクターでは初期化しません。これは、各オブジェクトのプロパティが同じになるためです。
次の例:
class Hero{ //属性 String Name;//英雄姓名 int Survive;//生存能力 int Attack;//攻击伤害 int Skill;//技能效果 int Difficulty;//上手难度 public Hero(){ Survive=4; Attack=5; Skill=6; Difficulty=7; } public void print(){ System.out.println("英雄:"+Name); System.out.println("生存能力:"+Survive); System.out.println("攻击伤害:"+Attack); System.out.println("技能效果:"+Skill); System.out.println("上手难度:"+Difficulty); } } public class TestCode01 { public static void main(String[] args) { //创建两个英雄对象 Hero make = new Hero(); make.Name="马克"; Hero lan=new Hero(); lan.Name="澜"; //输出两个属性 make.print(); lan.print(); } }
コンストラクターで値を割り当てたため、オブジェクトを作成するときのプロパティは同じになります
実際には、空のコンストラクターの存在を確認するだけで済みます。内部にコンテンツを記述する必要はありません。コンストラクターを使用して値を代入したい場合は、コンストラクターをオーバーロードする必要があります
Constructorオーバーロード
一般に、コンストラクターをオーバーロードします。オーバーロードされたコンストラクターで属性割り当て操作を実行します
在重载构造器以后,假如空构造器忘写了,系统也不会给你分配默认的空构造器了,那么你要调用的话就会出错了。所以我们重载构造器时,一般要保留默认构造器
当形参名字和属性名字重名的时候,会出现就近原则:在要表示对象的属性前加上this.来修饰 ,因为this代表的就是你创建的那个对象
this就是指当前的对象
this可以修饰属性
当属性名字和形参发生重名的时候,或者 属性名字 和局部变量重名的时候,都会发生就近原则,所以如果我要是直接使用变量名字的话就指的是离的近的那个形参或者局部变量,这时候如果我想要表示属性的话,在前面要加上:this.修饰(如果不发生重名问题的话,实际上你要是访问属性也可以省略this.)
this修饰方法
在同一个类中,方法可以互相调用,this.可以省略不写。
this可以修饰构造器
同一个类中的构造器可以相互用this调用,注意:this修饰构造器必须放在第一行
static可以修饰:属性、方法、代码块、内部类
static修饰属性
在类加载的时候,会将静态内容也加载到方法区的静态域中,静态的内容先于对象存在,并且这个静态内容被所有该类的对象共享。
在类加载的时候一起加载入方法区中的静态域中
先于对象存在
访问方式: 对象名.属性名 类名.属性名(推荐)
static修饰属性的应用场景:某些特定的数据想要在内存中共享,只有一块 -->这个情况下,就可以用static修饰的属性。
static修饰方法:
static和public都是修饰符,并列的没有先后顺序,先写谁后写谁都行
在静态方法中不能使用this关键字
在静态方法中不能访问非静态的方法
在静态方法中不能访问非静态的属性
静态的方法可以用 对象名.方法名去调用 也可以 用 类名.方法名 (推荐)
在同一个类中可以直接调用静态方法
代码块的分类: 普通块、构造块、静态块、同步块(多线程)
代码块执行顺序: 最先执行静态块–>再执行构造块,(不常用)–>再执行构造器–>再执行方法中的普通块
public class Test { //属性 int a; static int sa; //方法 public void a(){ System.out.println("-----a"); { //普通块限制了局部变量的作用范围 System.out.println("这是普通块"); System.out.println("----000000"); int num = 10; System.out.println(num); } } public static void b(){ System.out.println("------b"); } //构造块 { System.out.println("------这是构造块"); } //静态块 static{ System.out.println("-----这是静态块"); //在静态块中只能方法:静态属性,静态方法 System.out.println(sa); b(); } //构造器 public Test(){ System.out.println("这是空构造器"); } public Test(int a){ this.a = a; } //这是一个main方法,是程序的入口: public static void main(String[] args) { Test t = new Test(); t.a(); Test t2 = new Test(); t2.a(); } }
包的作用: 为了解决重名的作用,解决权限问题
包名的定义:
名字全部小写
中间用.隔开
一般都是公司域名倒着写:com.jd 、com.taobao
加上模块名字 :com.taobao.login
不能使用系统中的关键字:null
包声明的位置一般都在非注释代码的第一行
导包:
(1)使用不同包下的类要需要导包, 例如:import java.util.Date;
(2)在导包以后,还想用其他包下同名的类,就必须要手动自己写所在的包。
(3)同一个包下的类想使用不需要导包,可以直接使用。
(4)在java.lang
包下的类,可以直接使用无需导包
(5)可以直接导入*
:
静态导入:
//静态导入: import static java.lang.Math.*; //导入:java.lang下的Math类中的所有静态的内容 public class Test { //这是一个main方法,是程序的入口: public static void main(String[] args) { System.out.println(random()); System.out.println(PI); System.out.println(round(5.6)); } //在静态导入后,同一个类中有相同的方法的时候,会优先走自己定义的方法。 public static int round(double a){ return 1000; } }
以上がJavaオブジェクト指向の特徴と使い方は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。