Java类的属性与方法

合集下载

Java反射,获取类的公有、私有的构造函数(有参,无参)、方法(有参,无参)、属性

Java反射,获取类的公有、私有的构造函数(有参,无参)、方法(有参,无参)、属性

Java反射,获取类的公有、私有的构造函数(有参,⽆参)、⽅法(有参,⽆参)、属性Class类与ng.reflect类库⼀起对反射进⾏了⽀持,该类库包含Field、Method和Constructor类,这些类的对象由JVM在启动时创建,⽤以表⽰未知类⾥对应的成员。

这样的话就可以使⽤Contructor创建新的对象,⽤get()和set()⽅法获取和修改类中与Field对象关联的字段,⽤invoke()⽅法调⽤与Method对象关联的⽅法。

另外,还可以调⽤getFields()、getMethods()和getConstructors()等许多便利的⽅法,以返回表⽰字段、⽅法、以及构造器对象的数组,这样,对象信息可以在运⾏时被完全确定下来,⽽在编译时不需要知道关于类的任何事情。

⾸先创建⼀个类1public class Per {2public String name="sunshine";3private int age=28;4public double weight=65.50;56public Per(){7 System.out.println("测试反射获取公有⽆参构造函数");8 }9private Per(String name){=name;11 System.out.println("测试反射获取私有有参构造函数");12 }13public Per(String name,int age){=name;15this.age=age;16 System.out.println("测试反射获取公有有多个参数构造函数name:"+name+" age:"+age);17 }18public String methodT1(){19 System.out.println("测试反射获取公有⽆参⽅法");20return null;21 }22public String methodT1(String name,int age){23 System.out.println("测试反射获取公有多个参⽅法");24 System.out.println(name+":"+age);25return null;26 }27private String methodT1(String name){28 System.out.println("测试反射获取私有有参⽅法");29 System.out.println("name:"+name);30return null;31 }32public String methodT2(int[] arr,String[] str){33 System.out.println("测试反射获取公有有数组参⽅法");34 System.out.println("int[] arr:"+arr+"String[] str:"+str);35return null;36 }37public static void main(String[] args) {38 System.out.println("测试反射获取main⽅法");39 }40 }1.使⽤java反射获取类的构造函数(公有、私有)(有参,⽆参)1import ng.reflect.Constructor;2import ng.reflect.Field;3import ng.reflect.Method;45import org.junit.AfterClass;6import org.junit.BeforeClass;7import org.junit.Test;8/**9 * 测试使⽤java反射获取类的构造函数并创建对象10 * @author Sunshine11 *12*/13public class ReflectPer {14private static Class class1;15//因为java反射获取类时都需要加载类,在这⾥我就使⽤Junit的@beforeclass来去加载类,不⽤在每个测试⽅法中重复创建16//注:@beforeclass在执⾏测试⽅法前运⾏17 @BeforeClass18public static void beforeClass() throws Exception{19 System.out.println("====测试⽅法启动前先加载类====");20 class1 = Class.forName("myPractise.Per");//加载类21 }22//获取类的公有⽆参构造函数,并创建对象23 @Test24public void test1() throws Exception{25 Constructor constructor = class1.getConstructor(null);//获取公有⽆参构造器,值为null代表获取⽆参构造器26 Per per = (Per) constructor.newInstance(null);//创建对象,返回的是Object类型要强转27 System.out.println();//可以调⽤类的属性-----成功28 }29//获取类的公有参构造函数,并创建对象30 @Test31public void test2()throws Exception{32 Constructor constructor = class1.getConstructor(String.class,int.class);//获取公有多个参数构造器,参数为构造器中参数的类型33 Per per = (Per)constructor.newInstance("baby",24);//创建对象34 }35//获取类的私有有参构造函数,并创建对象36 @Test37public void test3()throws Exception{38 Constructor constructor = class1.getDeclaredConstructor(String.class);//获取公有多个参数构造器,参数为构造器中参数的类型39 constructor.setAccessible(true);//暴⼒反射,只有将属性设置为true才可以创建对象40 Per per = (Per)constructor.newInstance("baby");41 System.out.println(per.weight);//可以调⽤类的属性-----成功42//注:通常情况下⼀个类不可以访问另⼀个类的私有的属性,⽅法。

java中类的用法

java中类的用法

java中类的用法Java是一种面向对象的编程语言,类是面向对象编程的基本概念之一。

在Java中,类是一种模板,它用来描述一类对象的方法和属性。

可以通过创建类的对象来使用它的方法和属性。

本文将介绍Java中类的用法。

一、定义类Java中定义类的语法如下:```java public class ClassName { // 类的成员变量 // 类的构造函数 // 类的方法 } ```其中,类名要遵循标识符的命名规范。

类的成员变量是类的属性,它们用于存储对象的状态。

类的构造函数用于创建对象并初始化它的成员变量。

类的方法用于定义对象的行为。

二、成员变量Java中的成员变量也称为类的属性,用于存储对象的状态。

成员变量可以是基本类型、引用类型或数组类型。

在类的定义中,成员变量要放在构造函数和方法的前面。

成员变量可以通过类的对象来访问和修改。

```java public class Person { private String name; private int age;public Person(String name, int age){ = name; this.age = age; }public String getName() { return name; }public void setName(String name){ = name; }public int getAge() { return age; }public void setAge(int age){ this.age = age; } } ```在上面的例子中,Person类有两个成员变量name和age,它们都使用private关键字修饰,表示只能在类内部访问。

同时,这个Person类提供了一个有参构造函数和getter、setter方法,用来访问和修改成员变量。

三、构造函数Java中的构造函数用于创建对象并初始化它的成员变量。

java 类的属性和方法

java  类的属性和方法

java 类的属性和方法在类体中,包含的是成员变量和成员方法。

成员变量通常表示一个类所具有的属性,成员变量的声明非常简单,格式如下:在该代码中,创建两个字符串变量,一个整型变量,一个布尔类型的变量,没有初始化,这些变量的作用域范围是整个类。

通过声明成员方法可以定义类的行为,行为表示一个对象能够做的事情或者能够从一个对象取得的信息。

类的各种功能操作都是方法来实现,属性只不过提供了相应的数据。

一个完整的方法通常包括方法名称、方法主体、方法参数和方法返回类型,其结构如图6-6所示:图6-6构成方法元素参数、方法体。

其中,“<returntype>”是方法返回值的数据类型,数据类型可以是原始的数据类型即常用的8种数据类型,也可以是一个引用的数据类型,如一个类,接口,数组等。

除此之外,一个方法还可以没有返回值,即void,如main方法的返回类型。

“<methodname>”是用户自定义的方法名称,方法的名称首先要遵循标识符的命名约定,除此之外,方法的名称的第一个单词的第一个字母是小写,第二单词的第一个字母是大写,以此类推。

“(<type1> <arg1>,<type2> <arg3>,…)”方法的参数列表是一组变量声明,这些变量都要有自己的数据类型,可以是原始的数据类型,也可以是复杂的数据类型,一个方法主要依靠参数来传递消息。

方法主体是方法中执行功能操作的语句。

在一个类中,可以创建一个或多个方法,用来完成某种特定的行为,下面的代码是创建了一个简单的方法,其形式如下:在上面的代码中,我们创建了一个名称为vailable的方法,该方法没有返回值,没有参数,在方法体中只有一个判断语句。

这种方法的形式是最容易理解的一种,方法以是否拥有返回值,是否带有参数,可以划分不同的方法形式。

其常用的四种。

Java类的属性与方法 PPT

Java类的属性与方法 PPT

方法调用
• 方法是个“黑匣子”,完成某个特定的应用程序功能,并返回结果 • 方法调用:执行方法中包含的语句
对象名.方法名();
小明过生日,爸爸送他一个电动狮子玩具,编程测试这个狮子能否正常工作
方法调用
public class LionTest { public static void main(String[ ] args) {
类的方法
按此按钮, 狮子开始跑
电动玩具狮子 属性: 颜色:黄色
行为: 跑 叫
• 写出狮子对象的“跑”方法 • 写出狮子对象的“叫”方法
类的方法示例
AutoLion类代码实现
访问类型
public class Au返to回Lio类n型{ String color = "黄色";
方法名称
public void run(){ System.out.println("正在以0.1米/秒的速度向前奔跑");
Phone Student= new Student() ;
12
public Student()
{
}
方法的主体
方法的命名
• 如何给方法起名字? – 只能以字母、‘_’或‘$’开头 – 可以包括数字,但不能以它开头
• 遵循的命名规范 – 通常方法名是一个动词,如果有两个以上单词组成,第一个单词的种情况 – 如果方法具有返回值,方法中必须使用关键字return返回该值,返回类型为该返回 值的类型
} }
方法调用案例
• 编写成绩计算类(ScoreCalc) • 编写测试类
成绩计算类 测试类
编程实践
– 编写手机类(Phone):它可以下载音乐,可以播放这些音乐,可以进行充电

Java的对象、类、方法和接口

Java的对象、类、方法和接口

1.1什么叫对象?什么叫方法?什么叫面向对象的程序设计?面向过程的程序设计语言最重要的特点是按照解决问题的一个一个步骤来设计程序。

这种语言是与解决相对比较简单的问题,当程序规模较大时,将显得纷繁复杂。

“对象”原来是描述自然界时使用的一个词语。

比如,现在我正在写讲义,桌上的稿纸、手中的笔、案头的参考书、身后的电脑以及窗外的鸟都可以成为对象面向对象,就是将世界看成由许多彼此之间能联络的对象组成。

不少程序设计语言借用了对象这个词语作为一个专用名词,此时,对象也是具有状态和行为两个特征。

在程序设计中,对象的状态时相对处于静态的,用变量来描述和表达;而对象的行为时动态的,他们通过“方法”来实现和完成,所以方法一定是实现对象行为的语句块。

从功能上讲,方法和子程序、函数很相似。

变量和方法是彼此有关、相互依赖的。

当然,计算机都是用数据来表示对象的状态的,也是通过对数据的操作和修改来体现某个方法的功能的。

1.2 Java作为面向对象的程序设计语言有什么特点?Java是面向对象的程序设计语言,从面向对象这个角度看,体现了如下三个特点:a:封装性—面向对象的程序设计语言都是把数据和处理数据的操作结合在一起而构成一个整体,这就是对象。

对象的使用者只能看到对象的外部特性,比如,其主要功能、如何调用等,而看不到内部如何实现这些功能。

作为面向对象的程序设计语言,程序中的数据就是变量,程序对数据作处理则成为方法。

变量和方法都被封装在对象中。

所以,一个对象就是变量和方法的集合,其中变量表明这个对象的状态,方法实现这个对象所具有的行为,而且在程序中将这些变量和方法进行封装,使它们成为一个模块,再用一个名字来代表这个模块。

这样,以后得更高层的程序设计中,就不必关心某个对象的行为到底是怎样实现的。

可见,将对象封装就是为了使模块尽可能少地展现其内部细节,而只是以一种界面来面向外部。

对象的封装性减少了程序各部分之间的依赖,使程序的复杂性降低,而可靠性提高,并便于修改。

JAVA反射操作父类所有属性和方法

JAVA反射操作父类所有属性和方法

JAVA反射操作父类所有属性和方法Java反射是一种高级的技术,它允许在运行时动态地获取和操作类的信息。

使用反射技术,可以获取类的构造方法、字段、方法、注解等信息,并且可以动态地创建对象、调用方法、访问属性等。

在Java中,所有的类都直接或间接地继承自Object类。

因此,如果我们要操作一个类的父类的属性和方法,我们首先需要获取该类的父类的Class对象。

通过Class对象,我们可以获取父类的所有公共(public)属性和方法。

要获取父类的Class对象,我们可以使用Class类的`getSuperclass(`方法。

这个方法返回的是一个Class对象,代表了当前类的父类。

下面是一个使用反射获取父类Class对象的示例代码:```javapublic class Child extends Parentpublic static void main(String[] args)Class<?> parentClass = Child.class.getSuperclass(;System.out.println(parentClass.getName();}```运行这段代码,将会输出`Parent`,表示Child类的父类是Parent 类。

获取了父类的Class对象之后,我们可以使用Class对象的`getDeclaredFields(`方法获取所有的字段,`getDeclaredMethods(`方法获取所有的方法。

这两个方法返回的是一个数组,包含了所有字段或方法的信息。

下面是一个获取父类所有字段和方法的示例代码:```javapublic class Parentprivate String privateField;protected String protectedField;public String publicField;private void privateMethoSystem.out.println("Private method");}protected void protectedMethoSystem.out.println("Protected method");}public void publicMethoSystem.out.println("Public method");}public class Child extends Parentpublic static void main(String[] args)Class<?> parentClass = Child.class.getSuperclass(;Field[] fields = parentClass.getDeclaredFields(;for (Field field : fields)System.out.println(field.getName();}Method[] methods = parentClass.getDeclaredMethods(;for (Method method : methods)System.out.println(method.getName();}}```运行这段代码,将会输出父类的所有字段和方法的名称。

JAVA接口:1.接口的定义(属性和方法)

JAVA接口:1.接口的定义(属性和方法)

JAVA接⼝:1.接⼝的定义(属性和⽅法)⼀、接⼝的概念:接⼝是⼀种引⽤的数据类型,接⼝只是描述应该具备的⽅法,没有具体的实现,不能实例化。

1. 接⼝的定义:
关键字:interface,不再使⽤class。

接⼝的⽂件后缀名仍为java,编译后的⽂件仍叫class⽂件
与类的定义相同,唯⼀不同的是关键字
public interface MyInterface{
}
⼆、接⼝内成员(属性、⽅法)定义:
1.接⼝内属性的定义:接⼝中不能定义普通的属性
必须定义为常量,普通的类中可以⽤get set进⾏操作,接⼝不可以。

固定写法:public static final 数据类型属性名 = 值;
公共访问权限静态的固定
2. 接⼝内⽅法的定义:
接⼝内的⽅法,必须全部是抽象⽅法,⽅法的定义有固定格式的:
public abstract 返回值类型⽅法名(参数列表);
因为接⼝内⽅法必须要在实现的类中重写,故修饰符只能⽤public必须使⽤abstract,抽象⽅法
接⼝内的⽅法,只能提供公共访问的抽象⽅法。

java基础-类的定义、成员变量、方法、对象的创建与使用

java基础-类的定义、成员变量、方法、对象的创建与使用

java基础-类的定义、成员变量、⽅法、对象的创建与使⽤⼀.JAVA类的定义 JAVA⾥⾯有class关键字定义⼀个类,后⾯加上⾃定义的类名即可。

如这⾥定义的person类,使⽤class person定义了⼀个person类,然后在person这个类的类体⾥⾯定义person这个类应该具有的成员变量(即属性)和⽅法,如这⾥定义的int id和int age这个两个成员变量,或者叫属性,这个id表⽰⼈的⾝份证号码,⼈应该具有这个属性,age表⽰⼈的年龄,这也是⼈应该具有的。

这样就在person这个类⾥⾯定义了两个⼈应该有的属性,接下来就是定义⽅法了,这⾥定义了三个⽅法,分别是getAge()、setAge(int i)和getId(),分别⽤来获取⼈的年龄,设置⼈的年龄,获取⼈的id,getAge()⽅法获取了⼈的年龄后,将获取到的值返回,所以使⽤了return age语句,getId()⽅法也使⽤了return id语句⽤于返回获取到的id的值。

⼆. 成员变量 在JAVA⾥⾯的任何变量⾸先应该要声明,然后再赋值,然后再使⽤。

成员变量和局部变量有⼀个重要区别:成员变量在类⾥⾯声明时如果不进⾏初始化,那么JAVA会默认给它初始化,⽽局部变量JAVA不会默认给它初始化,所以在⽅法⾥⾯声明⼀个局部变量如果不给它初始化时就会出错。

默认初始化⼤多数都是0,boolean类型的为false,引⽤类型的为null,如过不记得JAVA对成员变量默认的初始化是多少的话,那就这样做,定义⼀个成员变量,不给它初始化,然后直接打印这个成员变量,打印出来的结果就是JAVA默认的初始化的值。

三、Java⾯向对象的基本概念——引⽤ 引⽤类型和基本类型有着巨⼤的区别,当声明⼀个int i=0时,系统会马上给这个i分配⼀个内存空间(在栈内存⾥⾯分配⼀⼩块区域⽤来装数字0),⾥⾯装着⼀个值为0,以后使⽤i这个名字马上就可以访问这个内存空间⾥⾯的值,这就是基本数据类型,所以基础类型就只占⼀块内存。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Phone Student= new Student() ;
1
2
public Student() { = “张三”; 3 this.age = 18; }
初始化属性
构造方法(构造函数)
• 不带参数的构造方法 public Student() { = “张三”; this.age = 18; }
– 当一个类被声明为 protect 时,只对包内的类可见,包外的类可通过继承访问该成员。 2.类的两大组成要素是什么? ˗ 属性、方法 3.类命名规则 类命名规则: 1、不能使用Java关键字 2、首字母可以为字母,也可以是“_”或“$ ”(建议不要这样) 3、不能包含空格或“.”号
本章任务
以OO方式: • 计算并显示总成绩 • 计算并显示平均成绩
方法调用案例
• •
编写成绩计算类(ScoreCalc) 编写测试类
成绩计算类
属性:3门成绩 (Java、C#、DB) 方法: 计算平均成绩 显示平均成绩 计算总成绩 显示总成绩
成绩计算类
测试类
编程实践
– 编写手机类(Phone):它可以下载音乐,可以播放这些音乐,可以进行充电 – 编写电池类(Cell):自动续电 手机类 – 编写测试类(Test) 电池类
手机类
行为: 播放下载的音乐 下载 充电
电池类
属性: 品牌 行为: 续电
测试类
手机的“充电”方法是通过调用 电池的“续电”方法实现的
编程实践
– 编写手机类(Phone):它可以下载音乐,可以播放这些音乐,可以进行充电 – 编写电池类(Cell):自动续电 – 编写测试类(Test) 手机类
手机类
属性: play() 方法: downloadMusic( ) 无 显示“播放……”,调用下载音乐方法 返回下载的音乐名称
public void a(){ 2、不同类中的方法调用 ——先创建类对象,然后使用“.‖调用 Teacher t = new Teacher(); t.b(); //调用Teacher类的b() }
public class Test { public static void main(String[ ] args) { Scanner input = new Scanner(System.in); int a = input.nextInt(); } }
}
总结
定义类的方法的步骤是什么? 类中的一个方法如何调用类的另一个方法? 类中的一个方法如何调用另一个类的方法?
第11讲 类的方法
教师: 班级:
回顾
1.成员的访问权限有哪些? – 当一个成员被声明为 – 当一个成员被声明为
public时,所有其他类,无论是属于哪个包,都可以访问该成员; private 时,不能被该成员所在类之外的任何类中代码访问; default
– 当一个成员没有任何访问限制修饰符时,其只包内的类是可见的;
常见错误2-2
public class Student{ public double getInfo(){ double weight = 95.5; double height = 1.69; return weight, height; } }
方法至多可以返回一个值,不 能返回多个值
方法调用
方法名称
public void run(){ System.out.println("正在以0.1米/秒的速度向前奔跑"); }
public String bark(){ String sound = "吼" ; return sound; }
}
方法体
如何定义类的方法
• 类的方法定义类的某种行为(或功能) 方法返回的数据类型
谁能使用这些变量?
public class AutoLion{ 成员变量
类型1 变量1; 类型2 变量2; 类型3 变量3;
AutoLion类的方法 别的类的方法
public 返回类型 方法1(){ 类型4 变量4; } public 返回类型 方法2(){ 类型 5 变量5; }
局部变量 方法1 局部变量 方法2
本章目标
• • • • 理解变量作用域 会定义和使用类的方法 理解类的构造方法 理解变量作用域
类的方法
按此按钮, 狮子开始跑
电动玩具狮子 属性: 颜色:黄色 行为: 跑 叫
• •
写出狮子对象的“跑”方法 写出狮子对象的“叫”方法
类的方法示例
AutoLion类代码实现
访问类型
返回类型 public class AutoLion { String color = "黄色";
电池类 测试类
chargeCell()
充电,调用Cell类的续电方法
手机测试类 测试手机的播放 音乐和充电方法
电池类
属性: brand 方法: 品牌
getPower()
“续电”方法, 显示充电信息
构造方法(构造函数)
• 构造方法是一种特殊的方法。 – 构造方法的名字和所存在的类是一样的; – 构造方法没有返回类型; – 主要作用:完成对象的初始化; – 当创建对象时被调用。
方法的名称
方法的访问类型
方法的定义
方法的主体
定义类的方法
1
2
3
public 返回值类型 方法名() {
4
}
//这里编写方法的主体
方法的命名
• 如何给方法起名字? – 只能以字母、‘_’或‘$’开头 – 可以包括数字,但不能以它开头 遵循的命名规范 – 通常方法名是一个动词,如果有两个以上单词组成,第一个单词的首字母小写, 其后单词首字母大写
编译错误
return name;
} …… }
返回类型要匹配
常见错误2-1
public class School{ …… public static void main(String[ ] args){ …… return “苏州工业职业技术学院! "; } } 返回类型是void 方法中不能有返回值
• • 方法是个“黑匣子”,完成某个特定的应用程序功能,并返回结果 方法调用:执行方法中包含的语句
对象名.方法名();
小明过生日,爸爸送他一个电动狮子玩具,编程测试这个狮子能否正常工作
public class LionTest { 方法调用 public static void main(String[ ] args) { AutoLion lion = new AutoLion(); System.out.println(lion.showLion()); lion.run(); public class AutoLion { System.out.println(lion.bark()); String color = "黄色"; } } public void run(){ //方法1:跑 在main()方法中调用类的方法 System.out.println("正在以0.1米/秒的速度向前奔跑。"); 必需先创建对象 } public String bark(){ //方法2:叫 String sound = "吼" ; return sound; } public String ge}

方法的返回值
• 两种情况 – 如果方法具有返回值,方法中必须使用关键字return返回该值,返回类型为该返回 值的类型
– 如果方法没有返回值,返回类型为void
return 表达式; public class Student{ String name = "张三"; public void getName(){
public class AutoLion { String color = "黄色";
public void run(){ //方法1:跑 System.out.println("正在以0.1米/秒的速度向前奔跑。"); } public String bark(){ //方法2:叫 String sound = "吼" ; return sound; } public String getColor(){ //方法3:获得颜色属性 return color ; } public String showLion() { //方法4:输出类的描述信息 return "这是一个" + getColor() + "的玩具狮子!叫声是" + sound ; } }
}
面向对象的编程思维
• ScoreCalc类 和 Test类
public static void main(String[ ] args) { Scanner input = new Scanner(System.in); Test ScoreCalc System.out.print("请输入Java成绩:"); int java = input.nextInt(); 一次还可以接受,如果 main(){ calcTotalScore() 类的方法实现某个特定的功能, //程序入口 …… //计算并输出总成绩 还要再执行这个功能, /*计算并显示输出*/ 别的类不需要知道它如何实现! 调用 难道还要重复再写? int total = java + c + db; 知道了实现此功能的类和它的方法名, calcDiffTime showTotalScore() / 3; double avg = total 就可以直接调用了,不用重复写代码! //计算并输出平均分 System.out.print("总成绩:" + total); 调用 System.out.print("\n平均分: " + avg); calcAvg() } showAvg()
相关文档
最新文档