类和对象
类和对象的关系:类代表一个群体,对象代表群体里的一个个个体。比如:一个类叫Student 对象可以为student01 。
类的格式: class类名称{}
对象的格式 :类名称 对象名称 = new 类名称()
//自定义一个类。
class Student{
String name ;
int age ;
}
public static void main(String args[]){
//定义并实例化一个对象。
Student stu = new Student() ;
}
对象产生分析
对象是一个引用类型,所有的引用类型必须开辟空间才可以引用否则会出现
NullPointer Exception
这样的报错,这个错误会伴随我们的开发生涯,大家遇到可以检查一下是否开辟了空间。
引用类型指的就是内存空间的操作
下面我们来分析一下对象的产生
对象的产生是:Student stu = new Student() ;
这里的 new 关键字就是开辟空间的过程 。
开辟空间主要是堆空间和栈空间(目前我们简单Java类涉及)。堆空间是保存真正的数据的,栈空间是保存堆的内存地址的即堆内存的操作权。
我们下面分布解析一下对象产生的过程。
首先Student stu = null ;声明对象名称
然后stu = new Student();开辟一个堆内存空间,并且内存的地址存放到栈内存当中即stu指向这个堆内存。
stu.name = "张晓伊" ;
stu.age = 18 ;
这样我们就得到了一个姓名叫张晓伊年龄18的学生对象。
引用传递分析
引用传递即一个堆内存被多个栈内存引用 还是上面堆栈的理解敲个码
Student stu01 = new Student() ;
stu01.name = "小三";
stu01.age = 18 ;
Student stu02 = stu01 ;
stu02.name = "小三丫";
上面代码就是一个一个堆内存被多个栈内存重复调用的例子。
最后结果是输出一个姓名为小三丫年龄为18的学生对象。
垃圾内存
垃圾内存就是我们同时去new一个实例化对象。然后把stu02=stu01;
这样我们一开始开辟的stu02所指向的堆内存就没有栈内存指向了,这样的堆内存空间我们称之为垃圾内存。垃圾内存会被Java内置的GC回收掉,开发过程中我们要注意避免造成过多的垃圾内存。
private 修饰
在Java的简单类中为了提高私密性我们会用private来修饰我们的属性做到外部类没法调用。
class Student{
private String name ;
private int age ;
}
在就是我们用private去修饰的对象属性。但是没办法调用。我们需要写一个set方法和get方法去实现调用。
public void setName(String name){
this.name = name ;
}
public void setAge(int age){
this.age = age ;
}
public String getName(){
return this.name ;
}
public int getAge(){
return this.age ;
}
构造方法
构造方法定义格式 :类名称()
每个类中必定有一个无参构造方法,如果没有系统会自己创建一个
像在定义对象的时候就用到了构造方法:
Student stu = new Student() ;
这个里面的Student() 就是一个无参构造方法。
类中除了可以又构造方法之外还可以又其他普通方法
总结
上面内容做一个总结打一个简单Java类模型
class Student{
private int id;
private String name ;
private String sex ;
private String address ;
private double score;
private int age ;
public Student(){}
public Student (String name , int id, String sex, String address, double score ,int age ){
setName(name);
setId(id) ;
setSex(sex) ;
setAddress(address) ;
setScore(score) ;
setAge(age);
}
public void setName (String name){
this.name = name ;
}
public void setId (int id){
this.id = id ;
}
public void setSex(String sex){
this.sex =sex ;
}
public void setAddress(String address){
this.address =address ;
}
public void setScore(double score){
this.score = score ;
}
public void setAge(int age){
this.age = age ;
}
public String getName(){
return name ;
}
public int getId(){
return id ;
}
public String sex(){
return sex ;
}
public String getAddress(){
return address ;
}
public double getScore(){
return score ;
}
public int getAge(){
return age ;
}
public String getInfo(){
return "姓名:"+name+"\n"+"学号:"+id+"\n"+"性别:"+sex+"\n"+"地址:"+address+"\n"+"成绩:"+score+"\n"+"年龄:"+age ;
}
}
public class TestDemo {
public static void main (String args[]){
System.out.println(new Student("张三",2017025,"男","太平洋比基宁海滩",100.0,18).getInfo());
}
}