类的定义
类的组成:属 性和行为
属性:在类中通过成员变量来实现(类中方法外的变量)
行为:在类中通过成员方法来体现(和前面的方法比,去掉static关键字即可)
public class 类名{
//成员变量
变量1的数据类型 变量1;
变量2的数据类型 变量2;
//成员方法
方法1;
方法2;}
//定义类 phone对象的使用创建对象 格式: 类名 对象名=new 类名() 范例:Phone p=new Phone(); 使用对象 1:使用成员变量 格式:对象名,变量名 范例 p.brand [Java] 纯文本查看 复制代码 public class Test{
public static void main(String[]args){
//创建对象
Phone p=new Phone();
//使用成员变量
System.out.println(p.brand);
System.out.println(p.price)
}
}
public class Phone{
//定义成员变量: 数据类型 变量名
String brand;
int price;
//成员方法: 用的是定义方法的方法 去掉static 即可,注意整个范围要在类下
public void call(){
System.out.println("打电话");
}
public void sendMessage(){
System.out.println("发短信");
}
}
对象的使用
创建对象
格式:
类名 对象名=new 类名()
范例:Phone p=new Phone();
使用对象
1:使用成员变量
格式:对象名,变量名
范例 p.brand
public class Test{
public static void main(String[]args){
//创建对象
Phone p=new Phone();
//使用成员变量
System.out.println(p.brand);
System.out.println(p.price)
}
}
2.使用对象方法
格式:p.call()
p.sendMessage();
案例学生
成员变量: 姓名,年龄
成员方法: 写作业和学习
定义学生类:
//定义学生类
public class Student{
//成员方法
String name;
int age;
//成员方法
public void study(){
System.out.println("好好学习,天天向上")
}
public void doHomework(){
System.out.println("键盘敲烂,月薪过万")}
}
在另一个java文件中
public class StudentDemo{
public static void main(String[]args){
Student s=new Student();
//使用对象
System.out.println(s.name+","+s.age);
s.name="林青霞"
s.age=30;
//使用方法
s.study();
s.doHomework();
}
对象内存图
如果涉及到多个对象的方法调用,属性是不共有的,涉及到多个对象方法是公用的.
因为在栈内存中,栈内存中,方法的调用时相内同的.
如果创建第二个对象的时候引用了第一个对象 如下,地址值会是同一块,当第一个对象变动的时候第二个对象也随之改变.
本地方法栈中执行的不是java语言,C语言.代码有行号.java代码需要编译.`
区别
成员变量
局部变量
类中位置不同类中方法外(类中方法外的变量)方法内或方法申明上
内存中位置不同堆内存栈内存
生命周期不同随着对象的存在而存在,随着对象的小时而小时随着方法的调用而存在,随着方法的调用完毕而小时
初始值不同有默认的初始值没有默认的初始值,必须先定影赋值,才能使用;封装private 关键字:
是一个权限修饰符,可以修饰成员(成员变量和成员方法),作用是保护成员不被其他的类使用,被private修饰的成员只在本类中才能访问.
针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作:
GET 变量名方法
用于获取成员变量的值
方法用PUBLIC修饰
set变量名方法用于设置成员变量的值方法用public修饰
当我们把上述例子中的 int age改成private int age的时候,测试中的 print age会报错,因为成员变量已经变成private
可以用get和set方法获取或者
public void getAge(int a){
age=a;//必须有一个数 因为有一个返回值需要一个值来接受
}
//get方法必须要有返回值
public void setAge(int a){
age=a;
if(a<0||a>120){
System.out.print("你给的年龄有误");
}
}
将有可能产生问题的成员实属,用private关键字进行修饰之后,不能直接通过对象名进行赋值和取值.
通过成员方法,可以对传递的参数进行校验,符合要求,我们再赋值
可以对
private int age;
private int weigh;
public void setAge() //set 方法一定要有参数,否则不成功
哪个对象调用方法,方法里面使用属性就是该对象的值.
this 关键字
this.name=name;
有this代表成员变量,没this表示局部变量.
不带this修饰的变量是形参,而不是成员变量,方法的形参不没有与成员变量同名,不带this修饰的变量是成员变量.
在局部变量和成员变量重名的时候(解决局部变量影藏成员变量)我们用this,遵循就近原则,如果重名,会赋值相距行数最少的变量.
谁调用这个方法 ,this就代表谁的对象.
this的内存原理,:
1.方法进栈
2.调用谁(比较参数)的方法就代表谁的对象,
3.方法消失,然后堆消失.
封装的定义
1,三大特性之一,封装,继承,多态.客观世界的成员都是隐藏在对象内的.
2,封装原则,将某些信息藏在类内部,不允许外部程序直接访问.
3:提高了代码的复用性,成员变量和成员方法的复用.
构造方法
构造方法是一种特殊的方法,作用,创建对象,
作用:创建对象
格式:
public class 类名{
修饰符类名(参数)}
1:方法直接调用(方法和方法定义的必须在同一种类中){show()}
2:成员方法的调用,要创建成员方法 的类的对象+.+方法名.{s.show()}
3:构造方法 new+空格+构造方法名,取调用
构造方法的注意事项
public Student(String name)[Java] 纯文本查看 复制代码 public Student(){}[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font="][size=16px]类名创建注意不要是小写[/size][/font][/color][/align][b]执行过程:[/b][align=left][color=rgb(31, 9, 9)][font="][size=16px]main方法执行, main{[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font="][size=16px]new Dog():[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font="][size=16px]//进行一个方法调用,在栈内存中执行[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font="][size=16px]//切换到Dog类[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font="][size=16px]Dog(){[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font="][size=16px]this.name=name[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font="][size=16px]this.age=age[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font="][size=16px]this.color=color}[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font="][size=16px]//方法执行完在 堆内存中创建一个对象(dog: color:黄色,age:2,...)[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font="][size=16px]//Dog方法执行完后,从栈中消失[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font="][size=16px]//回到min方法[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font="][size=16px]show(){[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font="][size=16px]shout(name+age+color)[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font="][size=16px]}[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font="][size=16px]//调用堆内存中的数据 打印数据,完成后栈内存中的数据消失.[/size][/font][/color][/align]
[align=left][color=rgb(31, 9, 9)][font="][size=16px]//括号里没有参数是无参构造,
this.name=name;
//括号里有参数列表叫做 有参构造 String name |
|