Java-面向对象、构造方法、静态static

一、Java中最基本的单位是类
基本数据类型的值传递,不改变其值;
引用数据类型的值传递,改变其值。
String当作参数传递时跟基本数据类型一样不改变其值。
StringBuffer当作参数传递时,值改变。
  • 成员变量:就是事物的属性,在类中,方法外。
  • 成员方法:就是事物的行为,和以前定义方法一样,只是把static去掉
  • 注意:
1. 每个编译单元(文件)都只能有一个public类。即每个编译单元都有单一的公共接口,用public类实现。此时,mian()就必须要包含在public类中。
2.public类的名称必须完全与含有该编译单元的文件名称一致,包括大小写。如果不匹配,编译时错误。
3.如果编译单元(文件)中不含有一个public类,此时编译单元文件名称可以与启动类名称可以不一致,即可以随意对文件命名。这样的话,main()不是必须要放在public类中才能运行程序。
总的来说,一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必须与之一致,否则无法编译,如果源文件中没有一个public类,则文件名与类中没有一致性要求。至于main()不是必须要放在public类中才能运行程序。
二、对象的内存图
一个对象的内存图:
栈里面存储的是局部变量-main方法+int []arr:值为堆里实例的地址值0x0011,地址指向堆里的实例,初始化值为0,0,0;赋值后为10,20,0;
两个对象的内存图,每用一次都会在堆内存里面产生一个对象
三个引用两个对象:
三、成员变量和局部变量的区别
  1. 在类中的位置不同
成员变量:在类中方法外
局部变量:在方法定义中或者方法申明上
  1. 在内存中的位置不同
成员变量:堆内存(成员变量属于对象,对象进堆内存)
局部变量:栈内存(局部变量属于方法,方法进栈内存)
  1. 生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
  1. 初始化值不同
成员变量:有默认初始化值
局部变量:没有默认初始化值,必须定义,赋值,然后才能使用
注意:
  • 局部变量名称和成员变量名称可以一样,在方法使用的时候,采用的是就近原则。
  • 基本数据类型变量包括:byte, short, int, long, float, double, boolean, char。
  • 引用数据类型变包括:数组,类,接口,枚举
补充:①静态方法可以直接调用
② 非静态方法的调用,需要使用对象来调用。
四、形参是一个类类型(引用类型)
这里其实需要的是该类的对象,引用数据类型给的是地址值,基本数据类型给的是值。
 
五、匿名对象
  • 匿名对象即没有名字的对象
  • 应用场景:
1. 调用方法,仅仅只调用一次的时候,好处:节省代码。注意:不适合调用多次的时候,因为调用多次就会产生多个对象,匿名对象调用完毕就是垃圾,可以被垃圾回收器回收;
问:匿名对象是否可以调用属性并赋值?有什么意义?
匿名对象可以调用属性,但是没有意义,因为调用后就会变成垃圾,如果需要复制还是使用有名字的对象。
 
2. 匿名对象可以作为实际参数传递。
 
六、private关键字
特点:被private修饰的成员,只能在本类中被访问
封装和private的应用:
把成员变量用private修饰,提供对应的getXxx()方法和setXxx()方法。
注意:private仅仅是封装的一种体现形式,不能说封装就是私有。
 
 
七、this关键字
代表当前对象的引用,用来区分成员变量和局部变量重名。
 
八、构造方法及其重载
作用:给对象的属性进行初始化
格式:
  • 方法名与类名相同
  • 没有返回值,连void也没有
  • 没有具体的返回值
注意:
构造方法不能创建对象调用,在一创建对象的时候,系统就帮我调用了构造方法。
构造方法也是有return语句的,格式是:return;
 
构造方法的重载
如果没有构造方法(包括有参构造方法和无参构造方法),系统将自动提供一个无参构造方法;
如果我们给出了有参构造方法,没有无参构造方法,系统将不再提供无参构造方法,就必须自己给出,建议永远自己给出无参构造方法。
eg:
class DemoGouzao{ public static void main(String args[]){ Student s1 = new Student("张珊",22); s1 = new Student("张珊珊",222); //这种方式看着结果貌似是改名了,实际上是将原对象变成垃圾 System.out.println(s1.getName()+"........"+s1.getAge()); System.out.println("-----------------"); Student s = new Student(); //空参创造对象 s.setName("里斯"); s.setAge(23); s.setName("李思思"); System.out.println(s.getName()+"--set,get---"+s.getAge()); } } class Student{ private String name; private int age; public Student(){} //空参构造 public Student(String name,int age){ //有参构造 this.name=name; this.age=age; } public void setName(String name){ this.name=name; } public String getName(){ return name; } public void setAge(int age){ this.age=age; } public int getAge(){ return age; } }
 
创建对象的步骤:
 
 
static:静态区,也叫共享区
static关键字的特点:
  1. 随着类的加载而加载(即随着字节码文件加载到方法区)。
  2. 优先于对象存在。
  3. 被类的所有对象共享。(如果某个成员变量是被所有对象共享的,那么它就应该被定义为静态的)。共性用静态,特性用非静态。
  4. 可以通过类名调用(推荐用这种)。也可以用对象调用。
 
static注意事项:
  1. 在静态方法中是没有this关键字的。因为静态是随着类的加载而加载,this是随着对象的创建而存在,静态比对象先存在。
  2. 静态方法只能访问静态的成员变量和静态的成员方法。
  3. 静态方法:只能访问静态成员变量、静态成员方法。
  4. 非静态方法:可以访问静态成员变量,也可以访问非静态成员变量,成员方法的访问也是如此,都能访问。
总结:静态只能访问静态,非静态都能访问。
 
静态变量与成员变量的区别
静态变量也叫类变量,成员变量也叫对象变量(实例变量)
  1. 所属不同:静态变量属于类,所以也叫类变量,成员变量属于对象,所以也叫实例变量或对象变量。
  2. 内存中位置不同:静态变量存储于方法区的静态区,成员变量存储于对内存。
  3. 内存出现时间不同:静态变量随着类的加载而加载,随着类的消失而消失,成员变量随着对象的创建而存在,随着对象的消失而消失。
  4. 调用不同:静态变量可以使用类名调用,也可以通过对象调用,成员变量只能通过对项目调用。
如果一个类中所有的方法都是静态的,需要多做一步,私有构造方法,目的是不让其他类创建本类对象,直接用类名. 调用即可。
 
解释main方法:
 
制作文档说明书>>>>>>
/**
这是一个数组工具类,里面封装的数组最大值,打印数组,数组反转的方法
@author 张珊
@version v1.0
*/
在cmd中运行:javadoc -d api -version -author ArrayTool.java
 
 
 
Math
生成随机数:random(); 生成 [ 0, 1); 是个double型。
(int)Math.random()*100; //生成0.00000~99.99999之间的随机数
 

posted @ 2021-02-19 17:47  鲸落98  阅读(44)  评论(0)    收藏  举报