A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

仓禀实而知礼节

初级黑马

  • 黑马币:12

  • 帖子:4

  • 精华:0

[JavaEE] 技术贴

© 仓禀实而知礼节 初级黑马   /  2020-1-14 12:05  /  888 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

类的定义
类的组成:属 性和行为
属性:在类中通过成员变量来实现(类中方法外的变量)
行为:在类中通过成员方法来体现(和前面的方法比,去掉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=&quot][size=16px]类名创建注意不要是小写[/size][/font][/color][/align][b]执行过程:[/b][align=left][color=rgb(31, 9, 9)][font=&quot][size=16px]main方法执行, main{[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font=&quot][size=16px]new Dog():[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font=&quot][size=16px]//进行一个方法调用,在栈内存中执行[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font=&quot][size=16px]//切换到Dog类[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font=&quot][size=16px]Dog(){[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font=&quot][size=16px]this.name=name[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font=&quot][size=16px]this.age=age[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font=&quot][size=16px]this.color=color}[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font=&quot][size=16px]//方法执行完在 堆内存中创建一个对象(dog: color:黄色,age:2,...)[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font=&quot][size=16px]//Dog方法执行完后,从栈中消失[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font=&quot][size=16px]//回到min方法[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font=&quot][size=16px]show(){[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font=&quot][size=16px]shout(name+age+color)[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font=&quot][size=16px]}[/size][/font][/color][/align][align=left][color=rgb(31, 9, 9)][font=&quot][size=16px]//调用堆内存中的数据 打印数据,完成后栈内存中的数据消失.[/size][/font][/color][/align]
 
[align=left][color=rgb(31, 9, 9)][font=&quot][size=16px]//括号里没有参数是无参构造,
this.name=name;
//括号里有参数列表叫做 有参构造 String name

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马