类和对象
类的定义:类是对现实生活中一类具有共同属性和行为的事物的抽象,确定对象将会拥有的属性和行为
属性:在类中通过成员变量来体现(类中方法外的变量)
行为:在类中通过成员变量来体现(和前面的方法比去掉static关键字即可)
类的定义步骤:
1.定义类
2.编写类的成员变量
3.编写类的成员方法、
格式:
public class 类名{
//成员变量
变量1的数据类型 变量1;
变量2的数据类型 变量2;
...
//成员方法
方法1;
方法2;
}
类和对象
对象的使用
创建对象
格式:类名 对象名 = new 类名();
使用对象:
1.使用成员变量
格式:对象名.变量名
2.使用成员方法
格式:对象名.方法名()
方法通用格式
public static 返回值类型 方法名(参数){
方法体;
return 数据;
}
public static 修饰符
返回值类型 方法操作完毕后返回的数据类型
当方法返回值类型为void时,不可返回数据,可写return 方法体中一班不写
方法名 调用方法时使用的标识
参数 由数据类型和变量名组成,多个参数间用逗号隔开
方法体 完成功能的代码块
return 若方法操作完毕,且有数据返回,用于把数据返回给调用者
调用方法时:
void类型的方法,直接调用即可
非void类调用的方法,推荐变量接收调用
方法调用格式
如 public static int azhe(int a){
return a;
}
public static void main(String[] args)
{
System.out.println("azhe(3)");
}
方法重载:指同一个类中定义的多个方法之间的关系。满足下列条件的多个方法相互构成重载
1.多个方法在同一个类中
2.多个方法具有相同的方法名
3.多个方法的参数不相同,类型不同或数量不同
方法的参数传递(基本类型)
对于基本参数的类型,形式参数的改变 不影响实际参数的值
如
public static void change(int a){
a = 200;
}
public static void main(String[] args){
int a = 100;
system.out.ptrintln(a);
change(a);
system.out.println(a);
}
两次输出结果均为100
方法参数传递(引用类型)
对于引用类型的参数 形式参数的改变 影响实际参数的值
如:
public static void change(int[] arr){
arr[1] = 200;
}
public static void main(String[] args){
int arr[] = new int[]{1,2,3,4,5};
system.out.ptrintln(arr[1]);
change(arr);
system.out.println(arr[1]);
}
第一次输出2
第二次输出200
方法重载
指同一个类中定义多个方法之间的关系
条件:
多个方法在同一个类中
有相同的方法名
多个方法的参数不同 类型不同 或数量不同
特点
仅对应方法的定义 与方法的调用无关 调用方式参照标准格式
仅针对同一个类中方法的名称与参数进行识别 与返回值无关 换句话说不能通过返回值来判定两个方法是否相互构成重载
成员变量和局部变量
成员变量:类中方法外变量
局部变量:方法中变量
区别:
位置不同
内存中位置不同 成员变量:堆内存 局部变量:栈内存
生命周期不同
成员变量:随对象的存在而存在 随对象的消而消失
局部变量:随方法的调用而存在 随方法的调用完毕而消失
初始化值不同
成员变量:有默认初始化值
局部变量:无默认初始化值 需要先定义 赋值 才能使用
private关键字
是一个权限修饰符 可修饰成员(成员变量和成员方法)
作用:保护成员不被别的类使用 被private修饰的成员旨在本类中才能访问
针对private修饰的成员变量 若需要被其他类使用 提供相应操作:
提供“get变量名()”的方法 用于获取成员变量的值 方法用public修饰
提供“set变量名(参数)”的方法 用于设置成员变量的值 方法用public修饰
变量名首字母需大写
this关键字
this修饰的变量用来指代成员变量
若方法的形参若与成员变量同名 不带this修饰的变量 指的是形参 而不是成员变量
方法的形参若没与成员变量同名 不带this的修饰变量指的是成员变量
使用场景
解决局部变量隐藏成员变量
this:代表所在的对象引用
方法被那个对象调用 this就代表那个对象
this内存原理
封装:面向对象三大特征之一(fengzhuang,继承,多态)
是面向对象编程语言对客观世界的模拟 客观世界里成员变量都是隐藏在对象内部的 外界是无法直接操作的
封装原则
将类的某些信息隐藏在类内部 不允许外部程序直接访问 而是通过该类提供的方法来实现对隐藏信息的操作和访问
成员变量 private 提供对应的getXxx()方法和 setXxx()方法
封装好处
通过方法来控制成员变量的操作 提高了代码的安全性
把代码用方法进行封装 提高了代码的复用性
构造方法
作用 创建对象
功能 完成对象数据的初始化
格式
public class 类名(){
修饰符 类名 (参数){
}
}
注意事项
当一个类中未编写一个构造方法 系统会自动给出一个无参的构造方法
一旦给出构造方法 系统将不会给出一个无参的构造方法
推荐:无论是否使用 都手工书写无参构造方法
标准类制作
(1)成员变量 :使用private修饰
(2)构造方法 :提供一个无参构造方法 提供一个带多个参数的方法
(3)成员方法 :提供一个成员变量对应的setXxx()和getXxx() 提供一个显示对象信息的show()
(4)创建对象并为其成员变量赋值的两种方式 :无参构造方法创建对象后使用setXxx()赋值 使用带参构造方法直接创建带有属性值的对象
API概述
API(Application Programming Interface):应用程序编程接口
Java API:指的是JDK中提供的各种功能的Java类
String概述
特点:字符串不可变 它们的值在创建后不能被更改
虽然String的值是不可变的 但他们可被共享
效果上相当于字符数组(cahr[]) 但底层原理是字节数组(byte[])
String构造方法
public String() 创建一个空白字符串对象 不含任何内容
public String(char chs[]) 根据字符数组的内容 来创建字符串对象
public String(char bys[]) 根据字节数组的内容 来创建字符串对象
String s = "abc"; 直接赋值的方式创建字符串对象 内容就是abc
String对象特点
通过new创建的对象 每一次new都会申请一个内存空间 虽然内容相同 但地址值不同
如下:
char[] chs = {'a','b','c'};
String s1 = new String(chs);
String s2 = new String(chs);
上面的代码中 JVM会首先创建一个字符数组 然后每一次new的时候都会有一个新的地址 只不过s1和s2参考的字符串内容是相同的
以“”方式给出的字符串 只要字符序列相同(顺序和大小写) 无论在程序代码中出现几次 JVM都会建立一个String对象 并在字符串池中维护
如下:
String s3 = ”abc“;
String s4 = ”abc“;
在上面的代码中 针对第一行代码 JVM会建立一个String对象放在字符串池中 并给s3参考
第二行则让s4参考字符串池中的String对象 也就是说它们本质上是同一个对象
字符串的比较
使用==作比较
基本类型:比较的是数据值是否相同
引用类型:比较的是地址值是否相同
字符串是对象 它比较内容是否相同 是通过一个方法来实现的 方法叫:equals()
public boolean equals(Object anObject):将此字符串与指定对象进行比较 由于我们比较的是字符串对象 所以参数直接传递一个字符串
遍历字符串
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
for(int i = 0;i<3;i++) {
System.out.println(Line.charAt(i));
}