成员变量

类的成员

泪湿孤枕 提交于 2019-12-10 23:27:34
属性   语法格式:修饰符 类型 属性名 = 初值;   说明:   修饰符:public、protected、private:用于表示成员变量的访问权限。static:表示该成员变量为类变量,也称为静态变量。final:表示将该成员变量声明为常量,其值无法更改。   类型:表示变量的类型。   属性名:表示变量名称。   成员变量和局部变量   成员变量:在类中定义的变量。     实例变量:在类实例化成对象才能够使用的。修饰符 类型 属性名 = 初值;     类变量:不需要类实例化成对象就能够使用。修饰符 static 类型 属性名 = 初值;     成员变量有默认初始化值。   局部变量:在方法中定义的变量。     形参:在方法标签中定义的变量。public void xingcan( 类型 形参名 ){}     方法局部变量:在方法内中定义的变量。      代码块局部变量:在代码块中定义的变量。 {int i = 0} 解释:单独一个{ }称为代码块,其中的变量称为代码块局部变量。     局部变量作用范围只在定义的局部范围中。作用的范围结束,变量空间会自动释放。     局部变量没有默认初始化值,每次必须显示初始化。     局部变量声明时不指定权限修饰符,因为作用范围只在局部。 方法   语法格式:   修饰符 返回值类型 方法名(参数类型 形参1,参数类型

反射

末鹿安然 提交于 2019-12-10 19:54:28
反射 Java代码在计算机中经历的三个阶段 1.source源代码阶段 2.类对象阶段 3.RunTime运行时阶段 将类的各个组成部分封装为其他对象,这就是反射机制。 优点: 1.程序运行中可以获取这些对象; 2.可以解耦,提高可扩展性; 获取Class类的方式 1.Class.forName(“全类名”) 将字节码文件加载进内存,通过类名获取(静态方法)(多用于配置) 异常ClassNotFoundException:类名或者包名写错。 2.类名.class 类名属性(用于传参) 3.对象.getClass() 类的方法(对象获取字节码文件) 用= =比较这三个获取的类,= =比较内存地址,这三个引用指向堆内存中的同一个对象 同一个字节码文件在一次程序运行过程中,只会被加载一次,通过任意方式获取的Class对象都是同一个 Class对象功能 获取成员变量们 * Field[] getFields() :获取所有public修饰的成员变量 * Field getField(String name) 获取指定名称的 public修饰的成员变量 * Field[] getDeclaredFields() 获取所有的成员变量,不考虑修饰符 * Field getDeclaredField(String name) 获取构造方法们 * Constructor<?>[]

结构体(结构体嵌套、结构体指针、结构体参数传递)

谁都会走 提交于 2019-12-10 19:13:35
结构体(struct) 1、基本概念 结构体-----将不同类型的数据成员组织到统一的名字之下,适用于对关系紧密,逻辑相关、具有相同或不同类型的数据进行处理 2、结构体定义格式 struct 结构名(也可称作结构标识符) { 类型 变量名; 类型 变量名; ······ }; struct 结构名 结构变量; 或者 struct 结构名 { 类型 变量名; 类型 变量名; ······ }结构变量; 例:声明结构体类型的同时定义变量名 1 struct student 2 { 3   int num; 4 }teacher; (声明结构体类型仅仅是声明了一个类型, 系统并不为之分配内存 ,就如同系统不会为类型 int 分配内存一样。只有当使用这个类型定义了 变量 时,系统才会为变量分配内存。所以在声明结构体类型的时候,不可以对里面的变量进行初始化。) 定义了一个结构名为student的结构体和一个结构变量teacher,如果省略变量名(teacher),就变成了对结构的声明,上述结构体声明也可分开写 1 struct student 2 { 3   int num; 4 }; 5 6 struct student teacher; 与上面效果相同,可理解为 struct student类似于int ,而我们用的是teacher类似于变量,如果省略结构名,则称之为无名结构

java中final的用法

夙愿已清 提交于 2019-12-10 17:26:54
1.被final修饰的类无法被继承。 2.被final修饰的方法无法被重写,因为abstract修饰的方法就是用来重写的,所以final和abstract是互相矛盾的。 3.被final修饰的成员变量,其值初始化之后不可改变。 (1)由于成员变量具有默认值而局部变量没有默认值,所以成员变量被final修饰时一定要赋值,不然会报错。 (2)对于final修饰的成员变量,要么直接赋值,要么通过构造方法赋值,二者选其一。 (3)必须保证类当中所有重载的构造方法都会对final修饰的变量赋值 来源: https://www.cnblogs.com/iceywu/p/12017841.html

Java面向对象-4.继承、this、super

ぃ、小莉子 提交于 2019-12-10 14:59:52
extends继承: 提高了代码的复用性 提高了代码的维护性 让类与类产生了关系,是多态的前提 弊端:类的耦合性增强了 开发的原则:高内聚(自己能做的自己做),低耦合 java中类的继承特点: 只支持单继承,不支持多继承(一个儿子只能有一个爹) 支持多层继承(父、子、孙) 如果想用这个体系的所有功能用最底层的类创建对象 如果想看这个体系的共性功能,看最顶层的类 继承注意事项: 子类只能继承父类所有非私有的成员变量和方法 子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法 不要为了部分功能而去继承 继承中成员变量的关系: 若父类与子类有相同的成员变量,则子类对象调用时就调用子类的成员变量(就近原则) 若父类与子类有相同的成员变量,则在成员变量前加上super就可以在子类对象调用时就调用父类的成员变量 若父类与子类有相同的成员变量,则在成员变量前加上this就可以在子类对象调用时就调用子类的成员变量 this和super的区别: this可以访问自己的成员变量,若本类没有这个成员变量,也可以访问父类的成员变量 super只能访问父类的成员变量 在每一个类中构造方法里面都会有一个默认的super()方法,子类调用构造方法时都会先调用父类的构造方法 子类中所有构造方法都会默认访问父类的空参的构造方法,若自己给出super(参数);则会访问父类有参的构造方法

Java面向对象03成员变量和局部变量

允我心安 提交于 2019-12-10 14:15:58
成员变量和局部变量 1.定义 成员变量:在类中定义,但定义在方法之外的变量称作成员变量。可以不用赋值,成员变量有默认的初始值。 默认初始值如下 整数类型(byte、short、int、long):0 浮点数型(float、double):0.0 字符类型(char):' '(空格,不是空) 布尔类型(boolean):false 引用数据类型: String:null 数组:null 自定义的类型:null 局部变量:在代码块、方法中、方法参数定义的变量就是局部变量。局部变量使用之前,需要在方法中定义,并且赋值!局部变量没有默认初始值。 示例: public class Person(){ public String name(); public int age(); public cha gender; public void selfIntroduce(){ public String hobbit; System.out.println("*********"); } } 类Person中的成员变量为name/age/gender,也叫做类Person的属性。 类Person中的成员方法为selfIntroduce,也叫做类Personde的行为或者操作。 定义在selfIntroduce方法中的hobbit是局部变量。 2.作用域 成员变量的作用域在整个定义的类中都可以使用

类、方法、成员变量和局部变量的可用修饰符

≯℡__Kan透↙ 提交于 2019-12-09 22:58:00
1、抽象类中的抽象方法(其前有abstract修饰)不能用private、static、synchronized、native访问修饰符修饰。原因如下:抽象方法没有方法体,是用来被继承的,所以不能用private修饰;static修饰的方法可以通过类名来访问该方法(即该方法的方法体),抽象方法用static修饰没有意义;使用synchronized关键字是为该方法加一个锁。。而如果该关键字修饰的方法是static方法。则使用的锁就是class变量的锁。如果是修饰类方法。则用this变量锁。但是抽象类不能实例化对象,因为该方法不是在该抽象类中实现的。是在其子类实现的。所以。锁应该归其子类所有。所以。抽象方法也就不能用synchronized关键字修饰了;native,这个东西本身就和abstract冲突,他们都是方法的声明,只是一个吧方法实现移交给子类,另一个是移交给本地操作系统。如果同时出现,就相当于即把实现移交给子类,又把实现移交给本地操作系统,那到底谁来实现具体方法呢? 2、接口是一种特殊的抽象类,接口中的方法全部是抽象方法(但其前的abstract可以省略),所以抽象类中的抽象方法不能用的访问修饰符这里也不能用。而且protected访问修饰符也不能使用,因为接口可以让所有的类去实现(非继承),不只是其子类,但是要用public去修饰。接口可以去继承一个已有的接口。

Java学习笔记(面向对象上)

无人久伴 提交于 2019-12-09 19:11:05
面向对象(上) 面向对象的特点: 封装性 (是面向对象的核心思想,将对象的属性和行为封装起来)、 继承性 (主要描述类与类之间的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行扩展)和 多态性 (指的是在程序中允许出现重名现象,它指在一个类中定义的属性和方法被其他类继承后,它们可以具有不同的数据类型或表现出不同的行为,使得同一个属性和方法在不同的类中具有不同的语义。例如听到 cut时,理发师的行为是剪发,演员的行为是停止表演)。 一个类包含多个对象,比如动物类,包含对象有狗、狼、猫等等。 在程序中创建对象,首先需要定义一个类。类中可以定义成员变量(用于描述对象的特征)和成员方法(用于描述对象的行为)。 class Person{ int age = 23; //定义在类中的变量为成员变量 //定义speak()方法 void speak(){ int age = 30; //定义在方法中的变量为局部变量 System.out.println("我今年"+age+"岁!"); /*局部变量可以和成员变量同名,此时方法中通过变量名访问到的是局部变量*/ } } class Person{ int age; void speak(){ System.out.println("我今年"+age+"岁!"); } } public class Test { public

OC 封装

China☆狼群 提交于 2019-12-09 17:14:14
首先介绍一下设置实例变量(setter)方法和访问实例变量(getter)的方法 ,那么问题来了,set和get方法的作用是什么呢?这里不得不提到一个概念『封装』。 我们之前使用类属性时,都会在花括号的里面加上一个 @public 。也就是说这类的属性是公开的,这时谁都可以对它进行修改,当一个类把它的属性暴露给外部的时候,那么该类就失去了对属性的控制权。 在OC语言中,使用@interface和@implementation来处理类。 就好比一款网游(具体过程复杂的多,只是举例加深理解),你看到的界面,进行的操作(如攻击,补充体力等等)都是你可以调用的方法,那么这些方法的名称的声明就是在@interface中 而你在执行操作时,程序把你的命令实现并展现在你眼前的这个过程,你是看不到的,而这就是@implementation里进行的 @interface就好像暴露在外面的时钟表面,向外界提供展示以及接口。 (类的属性在不声明的情况下默认都是@private:也就是私人的,在其他类中是无法调用的) @implementation就好像隐藏在时钟内部的构造实现,把具体的实现封装了起来。 封装的原理就是: 让实例变量默认只能被类的对象方法所调用. 介绍了封装的作用和原理,我们回到set get方法,介绍一下set和get 方法的使用 在前面提到为了安全性考虑

OC之成员变量封装

南笙酒味 提交于 2019-12-09 16:52:36
#import<Foundation/Foundation.h> @interface Student : NSObject { // 成员变量尽量不要用 @public // @public int age; // @public // 只读( readonly ):只允许外界访问我的 no ,不允许外界修改我的 no int no; // 只需要提供 get 方法 } /* set 方法 1. 作用: 提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤 2. 命名规范: ( 1 ) 方法名必须以 set 开头 ( 2 ) set 后面跟上成员变量的名称,成员变量的首字母必须大写 ( 3 )返回值一定是 void ( 4 ) 一定要接收一个参数,而且参数类型跟成员变量类型一致 ( 5 ) 形参的名称不能跟成员变量名一样 */ - (void)setAge:(int)newAge; /* get 方法 1. 作用:返回对象内部的成员变量 2. 命名规范: ( 1 ) 肯定有返回值,返回值类型肯定与成员变量类型一致 ( 2 ) 方法名跟成员变量名一样 ( 3 ) 不需要接收任何参数 */ - (int)age; - (void)study; @end @implementation Student // set 方法的实现 - (void)setAge:(int