类和对象的区别和联系
类是抽象的,概念的,代表一类事物,比如人类,猫类.., 即它是数据类型.
对象是具体的,实际的,代表一个具体事物, 即 是实例.
类是对象的模板,对象是类的一个个体,对应一个实例
属性,成员变量,字段
成员变量 = 属性 = field(字段) (即 成员变量是用来表示属性的,统一叫属性
属性是类的一个组成部分,一般是基本数据类型,也可是引用类型(对象,数组)。比如我们前面定义猫类的int age就是属性
属性的定义语法同变量,示例:访问修饰符 属性类型 属性名; 这里老师简单的介绍访问修饰符: 控制属性的访问范围 有四种访问修饰符 public, proctected, 默认, private ,后面我会详细介绍
属性的定义类型可以为任意类型,包含基本类型或引用类型
属性如果不赋值,有默认值,规则和数组一致。具体说: int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000,boolean false,String null
创建对象
先声明再创建 Cat cat ; //声明对象 cat cat = new Cat();
//创建 2) 直接创建 Cat cat = new Cat();
访问属性
基本语法 对象名.属性名; 案例演示赋值和输出 cat.name ; cat.age; cat.color;
类和对象的内存分配机制(重要) 看一个思考题 我们定义一个人类(Person)(包括 名字,年龄)。
类和对象的内存分配机制
Java 内存的结构分析
- 栈: 一般存放基本数据类型(局部变量)
- 堆: 存放对象(Cat cat , 数组等)
- 方法区:常量池(常量,比如字符串), 类加载信息
\1) 先加载 Person 类信息(属性和方法信息, 只会加载一次)
在堆中分配空间, 进行默认初始化(看规则)
把地址赋给 p , p 就指向对象
进行指定初始化, 比如 p.name =”jack” p.age = 10
成员方法
public void speak() {
System.out.println("一个好人");}
//成员方法的好处
//1) 提高代码的复用性
//2) 可以将实现的细节封装起来,然后供其他用户来调用即可
/*
成员方法的定义
访问修饰符 返回数据类型 方法名(形参列表..) {//方法体
语句;
return 返回值;
}
*/
成员方法传参机制(非常重要)
结论:基本数据类型,传递的是值(值拷贝),形参的任何改变不影响实参
引用数据类型的传参机制(数组,对象...)
引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参!
方法的递归(非常重要)
简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂问题,同时可以让代码变得简洁
1) 打印问题
2) 阶乘问题
代码
public class Recursion01 {
//编写一个 main 方法
public static void main(String[] args) {
T t1 = new T();
t1.test(4);//输出什么? n=2 n=3 n=4
int res = t1.factorial(5);
System.out.println("5 的阶乘 res =" + res);
}
}
class T {
//分析
public void test(int n) {
if (n > 2) {
test(n - 1);
}
System.out.println("n=" + n);
}
//factorial 阶乘
public int factorial(int n) {
if (n == 1) {
return 1;
} else {
return factorial(n - 1) * n;
}
}
}
方法重载
java 中允许同一个类中,多个同名方法的存在,但要求 形参列表不一致!
可变参数
java 允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。 就可以通过可变参数实现
语法:
访问修饰符 返回类型 方法名(数据类型... 形参名) { }
//1. int... 表示接受的是可变参数,类型是 int ,即可以接收多个 int(0-多)
//2. 使用可变参数时,可以当做数组来使用 即 nums 可以当做数组
//3. 遍历 nums 求和即可
public int sum(int... nums) {
//System.out.println("接收的参数个数=" + nums.length);
int res = 0;
for(int i = 0; i < nums.length; i++) {
res += nums[i];
}
return res;
}
1)可变参数的实参可以为0个或任意多个。
2)可变参数的实参可以为数组。
3)可变参数的本质就是数组.
4)可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后5)一个形参列表中只能出现一个可变参数
作用域
1.在java编程中,主要的变量就是属性(成员变量)和局部变量。
2我们说的局部变量一般是指在成员方法中定义的变量。【举例Cat类: cry】
3.java中作用域的分类
全局变量:也就是属性,作用域为整个类体Cat类: cry eat等方法使用属性【举例】
局部变量;也就是除了属性之外的其他变量,作用域为定义它的代码块中!全局变量(属性)可以不赋值,直接使用,因为有默认值,局部变量必须赋值后,才能使用,因为没有默认值。[举例]
构造方法、构造器
语法:
- [修饰符] 方法名(形参列表)
- 构造器的修饰符可以默认, 也可以是 public protected private
- 构造器没有返回值
- 方法名 和类名字必须一样
- 参数列表 和 成员方法一样的规则
- 构造器的调用, 由系统完成
构造方法又叫构造器(constructor),是类的一种特殊的方法,它的主要作用是完成对新对象的初始化。它有几个特点:1) 方法名和类名相同 2) 没有返回值 3) 在创建对象时,系统会自动的调用该类的构造器完成对象的初始化。
this关键字
this代表当前对象
this:哪个对象调用,就代表哪个对象
this 关键字可以用来访问本类的属性、方法、构造器
this 用于区分当前类的属性和局部变量
访问成员方法的语法:this.方法名(参数列表);
访问构造器语法:this(参数列表); 注意只能在构造器中使用(即只能在构造器中访问另外一个构造器, 必须放在第一条语句)
this 不能在类定义的外部使用,只能在类定义的方法中使用。
标签:int,基础,对象,参数,面向对象编程,方法,public,属性 From: https://www.cnblogs.com/zfDr-dr/p/17963984