类与对象
类与对象概念
1)类是抽象、概念的,是数据类型
2)对象是具体、实际的,是实例
3)类是对象的模板,对象是类的一个个体,对应一个实例
属性(成员变量)
属性 = 成员变量 = 字段
例:Car(name,price,color)
class Car{ String name; double price; String color; String[] master;//属性可以是基本数据类型,也可以是引用类型(对象,数组)}1)属性的定义语法和变量一致
例: 访问修饰符 属性类型 属性名;
protected String name;访问修饰符:控制实行的访问范围,分为四种:public、protected、private以及默认
属性可以是基本数据类型,也可以是引用类型(对象,数组)
Car c1 = new Car()//创建 Car 对象//c1 是对象名(对象引用)//new Car() 创建的对象空间(数据)才是真正的对象属性不赋值有默认值,具体:int、short、byte、long 为 0;float、double 为0.0;char 为 \u0000;boolean 为 false。
创建对象
1)先声明、再创建
Car car;//声明对象 catcar = new Car();//创建2)直接创建
Car car = mew Car();访问属性
对象名.属性名
car.name;Java 内存的结构分析
栈:一般存放基本数据类型(局部变量)
堆:存放对象(Car car,数组等)
方法区:常量池(常亮,比如字符串),类加载信息
示意图:[Car(name,price,color)]
案例 1:
Person p = new Person();p.name = "jack";p.age = 10;//先加载 Person 类信息(属性和方法信息,只会加载一次)//在堆中分配空间,进行默认初始化(按规则)//把地址赋给p,p 就指向对象//进行指定初始化案例 2:

成员方法
class Person { //public 表示方法是公开 //void 表示方法没有返回值 //speak() speak 是方法名,() 是形参列表 //{} 是方法体 public Void speak(){ System.out.println("Hello world."); }}方法写好但不去调用,就不会输出
先创建对象,然后调用方法
Person p1 = new Person();p1.speak();成员方法的定义
访问修饰符 返回数据类型 方法名 (形参列表…){//方法体
语句;
return 返回值;//return 语句非必须
}
解释:
形参列表:表示成员方法的输入
getSum(int num1,int num2)
返回数据类型:表示成员方法的输出,void 表示没有返回值
方法主体:实现某一功能的代码块
访问修饰符:控制方法使用的范围
注意:
一个方法最多只有一个返回值(返回多个值可以返回数组)
返回类型可以为任意类型,包括基本类型或引用类型(即数组、对象)
如果方法要求返回值,结尾必须有「return 返回值;」语句,如果为 void 可以不用或者写「return;」
方法名遵循驼峰命名法
一个方法可以有 0 到多个参数,用逗号间隔,参数可以是任何类型
参数列表传入类型应该要求一致或者兼容(int 对整型或byte)
定义时参数叫做形式参数(形参)、调用时参数叫实际参数(实参),实参和形参个数、类型、顺序必须一致
方法不能再定义方法(不能嵌套定义)
调用细节
同一个类的方法可以直接调用:
class A{ public void print(int n){ System.out.println("打印" = n); }
public void sayOk(){ print(10); }}跨类调用:
class A{ B b = new B();//创建一个 B 类的对象,然后再调用方法 b.hi;}
class B{ public void hi(){ System.out.println("hi"); }}方法递归
让方法自己调用自己:
class T{ public int fibonacci(int n){ if(n >= 1){
if(n == 1 || n == 2){ return 1; }else{ return fibonacchi(n-1) + fibonacchi(n-2);
}else{
System.out.println("输入 n >= 1 的整数");
} } }}方法重载
java 允许同一个类中,多个同名方法的存在,但是要求「形参列表」不一致
好处:方便起名和记名
方法名必须相同,参数列表必须不同(个数或顺序或类型),返回类型无要求
class Calculater{ //int 和 int public int calculate(int n1,int n2){ return n1 + n2; } //int 和 double public double calculate(int n1,double n2){ return n1 + n2; } //double 和 int public double calculate(double n1,int n2){ return n1 + n2; } //int 和 int 和 int public int calculate(int n1,int n2,int n3){ return n1 + n2 + n3; }}可变参数
java 允许将同一个类中多个同名同功能,但是参数个数不同的方法,封装成一个方法
语法:
访问修饰符 返回类型 方法名(数据类型… 形参名){
}
//优化前class HspMethod{ public int sum(int n1,int n2){ return n1 + n2; } public int sum(int n1,int n2,int n3){ return n1 + n2 = n3; } public int sum(int n1,int n2,int n3,int n4){ return n1 + n2 + n3 + n4; } //……//优化后 public int sum(int... nums){ int res = 0; for(int i = 0;i < nums.length;i==){ res += nums[i]; } return res; //「int...」表示接受可变参数,int 是类型,接受零到多个int //使用可变参数 nums 的时候可以当做数组使用 }}注意:
1)可变参数的实参可以为 0 到多个
2)可变参数的实参可以是数组
3)可变参数本质就是数组
4)可变参数可以和普通类型放在一起作形参列表,但必须保证可变参数在最后
5)一个形参列表中只能出现一个可变参数
作用域
1)java 编程中主要的变量就是属性(成员变量)和局部变量
2)局部变量一般在成员方法中定义的变量(Cat类中的cry)
3)作用域分类
全局变量:也叫属性,作用域在整个类体
局部变量:除了属性以外的其他变量,作用域在其定义的代码块中
4)全局变量可以不赋值直接使用(有默认值),局部变量必须赋值后使用(无默认值)
部分信息可能已经过时