类:一组属性和相关行为(方法、函数)的集合
类是对一类事物的描述,是抽象(abstract)的,
对象是一类事物的实例,是具体的,
类是对象的模板,对象是类的实体
类的定义
属性(成员变量):
行为(成员方法):
成员方法没有static关键字
成员变量是在类当中的
//下面是描述一个学生的类;
public class Student {
int age = 18;//成员变量
String name = "张三";//成员变量
//成员学习方法
public void study(){ //
System.out.println("学习");
}
//成员吃饭方法
public void eat(){
System.out.println("吃饭");
}
}
//通常情况下一个类不能直接使用,需要创建一个对象才能使用;
1、导包
import 包名称.类名称;(路径)
同一个包下不用导入
2、创建
类名称 对象名 = new 类名称();
3、使用
使用成员变量
对象.成员变量名
对象.成员变相方法
成员变量是有默认值的
下面创建一个student的类
package study;
public class Use {
public static void main(String[] args) {
Student stu = new Student();
System.out.println(stu.age);
System.out.println(stu.name);
System.out.println(stu.defaultStr);
System.out.println(stu.defaultInt);
System.out.println(stu.defaultfloat);
System.out.println(stu.defauldouble);
System.out.println(stu.defaultlong);
}
}
//以下是实例化类 为对象
package study;
public class Student {
int age = 18;
String name = "张三";
String defaultStr;
int defaultInt;
float defaultfloat;
double defauldouble;
long defaultlong;
public void study(){
System.out.println("学习");
}
public void eat(){
System.out.println("吃饭");
}
}
以下是结果
对象的内存图解
先来段代码活动下手指
//创建一个phone类
package cn.study;
public class Phone {
String brand = "华为";
String Model ="P30pro";
String color ="black";
double size =5.5;
int price = 5300;
//打电话
public void call(String who){
System.out.println("正在呼叫"+who);
}
public void call(long who){
System.out.println("正在呼叫"+who);
}
//发短信
public void msg(String m,long n){
System.out.println("已经将短信内容"+m+"发送到"+n);
}
//发短信方法重载
public void msg(long n,String m){
System.out.println("已经将短信内容"+m+"发送到"+n);
}
public void msg(String n,String m){
System.out.println("已经将短信内容"+m+"发送到"+n);
}
//打开照相机
public void camera(){
System.out.println("已经打开照相机");
}
}
//实例化一个类对象
package cn.study;
public class Newphone {
public static void main(String[] args) {
Phone phone = new Phone();
System.out.println(phone.brand);
System.out.println(phone.color);
System.out.println(phone.Model);
System.out.println(phone.price);
System.out.println(phone.size);
phone.call(18888888888L);
phone.msg("华为牛逼",18888888888L);
phone.msg(18888888888L,"华为牛逼");
phone.msg("任正非","华为牛逼");
}
}
//输出结果
华为
black
P30pro
5300
5.5
正在呼叫18888888888
已经将短信内容华为牛逼发送到18888888888
已经将短信内容华为牛逼发送到18888888888
已经将短信内容华为牛逼发送到任正非
以上代码和图解无关系,
进栈,压栈,先进栈的在底下
成员变量通过对象的内存地址即可访问
成员方法在对象里是一个内存地址 访问成员方法需要先通过对象的内存地址 再通过成员方法的内存地址去进行调用,当方法调用完成后就会出栈(弹栈)从栈空间消失,
2个对象的内存图
两个引用指向同一个地址的内存图
对象类型作为方法的参数;
讲对象作为参数 传递的时候 传递的是引用地址值
package cn.study;
//创建一个phnoe类
public class Phone {
String brand = "华为";
String Model ="P30pro";
String color ="black";
double size =5.5;
int price = 5300;
//打电话
public void call(String who){
System.out.println("正在呼叫"+who);
}
public void call(long who){
System.out.println("正在呼叫"+who);
}
//发短信
public void msg(String m,long n){
System.out.println("已经将短信内容"+m+"发送到"+n);
}
//发短信方法重载
public void msg(long n,String m){
System.out.println("已经将短信内容"+m+"发送到"+n);
}
public void msg(String n,String m){
System.out.println("已经将短信内容"+m+"发送到"+n);
}
//打开照相机
public void camera(){
System.out.println("已经打开照相机");
}
}
实力化phone类,讲实例化对象作为参数传递给 phonetwo函数进行一些列操作;(对象类型传递的是地址值)
package cn.study;
public class Newphone {
public static void main(String[] args) {
Phone phone = new Phone();
System.out.println(phone.brand);
System.out.println(phone.color);
phoneTwo(phone);
}
public static void phoneTwo(Phone Parameter){
Parameter.brand="小米";
Parameter.color="red";
System.out.println(Parameter.brand);
System.out.println(Parameter.color);
}
}