Java中的对象与类
一. 类的定义
1. 类:是构造对象的模板或蓝图,类是独立在main方法外但又由main调用和测试,有独立性但却缺少自主性.
2. 类的调用通过在mian方法中建立对象实现调用
3. 类中的成员方法和成员变量的访问都需要在main方法中通过建立对象来访问
4. 类的建立大大减少工作难度,对于程序得可修改性大大提高,同时使得mian方法所占的内存减少
5. 类将程序碎块化,使得在写程序是如搭积木,只需要将需要的类通过main方法进行连接,就能得到预取效果
2.类的创建方法:
class 类名称{
成员变量;
成员方法(中的变量称为局部变量);
}
3.类的调用方法:
public static void mian(Strings [ ] args){
类名称 对象名称=new 类名称(); //创建类的对象
对象名称 . 成员变量(软件自动提示选择所需的变量名称);
对象名称 . 成员方法(软件自动提示选择所需的变量名称);
}
4.类对象在字节码文件中的流程
1)主方法先在栈内存中开辟出一个存储main方法的内存空间
2)在main方法开辟出来的空间内建立类的对象,同时生成地址
3)在对象调用并成员变量赋值后,在对象生成的地址上,在堆内存中存储赋值(成员变量在赋值前为该变量的默认初始值)
4)在成员方法赋值后,也在堆内存中存储(成员方法暂时性在栈内存中开辟空间,方法调用后自动删除)
4.成员变量和局部变量的区别
1)位置不同:成员变量在类中,方法外
局部变量在方法中
2) 初始状态不同:成员变量有系统默认初始化,可以不需要给定值
局部变量必须定义初始值
3) 内存空间不同:成员变量在堆内存中
局部变量在栈内存中
4) 生命周期不同:成员变量跟着类走,类的加载而加载,类的消失而消失
局部变量随着方法的调用而存在,方法的调用完毕而消失
二. 匿名对象
1. 匿名对象建立的方法
对象建立: 类名称 对象名称= new 内名称();
匿名对象建立: new 类名称();
2.匿名对象的使用方法和注意事项
A.匿名对象在使用成员方法和成员变量时和不匿名对象方法一样(new 类名称.成员变量/成员变量)
B.匿名对象在接口中经常使用
C.在实际开发中一般只使用一次,不建议多次使用,防止内存溢出的现象(因为new一直在堆内存中开辟空间)
三. 形式参数
1. 形势参数两种类型的分析
A. 基本类型:形式参数的改变对实际参数没有任何影响
B. 引用类型:形式参数的改变会直接影响实际参数
引用类型具体分析
class Student{ //类1 public void show() { System.out.println("好好学习,天天向上...."); } } |
class StudentDemo{ //类2 Student () ; public void method(Student s) { //形式参数现在引用类型 s.show(); } } |
method方法中的Student s 形势参数是引用类型,是Student类中,所以要建立Student中的对象后,method方法才能使用(好比测试类通过建立对象来调用类2中的方法,但是类2中方法中的引用类型需要对类1建立对象后才能实现自身方法的使用)
public class ArgsTest { //测试类 public static void main(String[] args) { (1)建立StudentDemo的对象 StudentDemo sd=new StudentDemo(); (2) 建立Student类的对象 Student s=new Student(); Sd.method(s); } |
通过在main方法中建立两个类中的对象,实现类2中应用类型Student s可以应用的对象,从而实现了调用StudentDemo中的method方法
四. 封装和private关键字
1. Private的使用意义
Private在修饰类中的成员变量时,使得被修饰的成员变量无法被类之外(包括测试类)的方法进行访问,但被修饰的成员变量在该类中可以被任意访问
如外部类(包括测试类)需要访问被private修饰的成员变量时,需要公共的访问方法(如:set/get xxxx 方法),将被private修饰的私有化变量进行公有化转化(只是一种方法,但依然不改变该变量的私有性,也就是private修饰的成员变量的私有性不会因为公有方法而改变,公有性也只存在与该方法中,如其他外部类不使用该公共方法依然无权访问该变量)
被Private修饰,也体现了一种封装性,使得程序更加稳定,排错更加方便(出错处可以在对应的类中修改).
2. private的使用方法
private 数据类型 数据名称;
※当成员变量和局部变量名称一致的情况,遵循就近原则
3. set / get xxxx 方法
set / get xxxx是一种可以公有化的方法.
set / get xxxx的书写基本格式
Class 类名{
private 数据类型 数据名称1;
Public void set方法名1(数据类型 数据名称2){
数据名称2=数据名称1;
}
public 数据类型 get方法名2(){
Return 数据类型2;
}
}
※在main方法中调用数据类型1时,先通过用方法1(set)的赋值,后通过方法2(get)获取到数据类型1.
4. 关键字this的使用
This的使用意义:为了见名知意,减少中间数据类型2的繁琐,使用的this方法,只需要在被修饰的私有化变量前加this,就可以让set方法中的数据名称2和被私有化的变量相同.
Class 类名{
private 数据类型 数据名称1;
Public void set方法名1(数据类型 数据名称1){
This数据名称1=数据名称1;
}
public 数据类型 get方法名1(){
Return 数据类型1;
}
}
五. 构造方法
1. 构造方法作用:是给对象进行初始化的过程,同时构造方法也属于类的组成部分,分别为:成员变量,构造方法,成员方法.()
※构造方法的方法名与类名相同,并且构造方法没有关键字void
2. 构造方法的注意事项:
1) 如果没有提前写出无参构造,系统会默认提供无参构造(系统默认的无参构造会显示地址值)
2) 如果提前写出无参或者有参构造,那么系统不会在提供无参构造(建议永远给出无参构造)
3. 构造方法的书写格式
Class 类名{
public 类名(){
}
}
六. 成员方法的分类
1.成员方法的分类:
1)按照返回值划分: void的形式:没有具体的返回值
非void形式:有具体返回值
2)按照参数进行划分: 空参构造
有参构造
各种类型的例子
class Student {
private String name ;
private String age ;
public Student() {
}
//有返回值没有参数的
public String show() {
return "helloworld" ;
}
//没有返回值,有参数的情况
public void method(String s) {
System.out.println(s);
}
//没有返回值,没有参数的情况
public void function() {
System.out.println("function student...");
}
//有返回值,有参数的情况
public String function2(String s1,String s2) {
return s1+ s2;
}
}