Java学习笔记_ day06

1:this关键字
概述:代表本类当前对象的引用(对象名),通俗点,谁来调用我,我就代表谁


问题:当成员变量跟局部变量重名的时候,我调用set方法设置成员变量的值不成功
原因:在Java里面使用变量遵循这么一个原则,就近原则:谁靠近我,我就使用谁,局部变量有就使用局部变量,否则使用成员变量,
     如果都没有就报错
解决:把成员变量名字跟局部变量的名字不一样;如果我一定要成员变量跟局部变量重名怎么办:
     只要在你想表示为成员变量的变量之前加上this.
//这样这个变量就变成成员变量
Person p = new Person();
p.setName("baby");
public void setName(String name){//n = "baby";
this.name = name;//this.name这个name就变成成员变量的name,而不再是局部变量,这样就可以给成员变量设置值成功
//p.name = name;
}
理解:对应类Person,有多个对象,比如Person p = new Person();//this,本类当前对象的引用p,延伸代表p2,p3,p...,谁来调用我,我就代表谁


数据类型:
基本数据类型:byte,short,int,long,double,float,char,boolean,不是基本数据类型 就一定 是 引用数据类型
基本数据类型存的是值


引用数据类型:包括类,数组,接口,凡是可以通过new关键字new出来都是,比如String引用数据类型
引用数据类型里面存的是地址值,暂时理解为对象的地址值
引用:就是引用数据类型的变量,比如String s;//s就是引用;Person p = new Person();//p就是引用,对象名,存的是对象的地址值
通过对象的地址值就可以找到对象,找到对象就可以使用对象里面的变量和方法,通过对象名(对象).来调用,哪里不会哪里

2:static关键字//一个类可以创建多个对象,共享就是多个对象都用同一个东西
概述:static,静态(共享的)的意思,如果一个类的成员,包括变量和方法,想给类的所有对象共享,就使用static修饰
特点://记忆
1.随着类的加载而加载//记忆(类只加载一次,因为我只要一个类就可以创建多个对象,java里面看到类写出来,类就加载了)
2.优先于对象存在(理解:对象是通过类来创建的,类的加载优先于对象存在)
3.如果一个类的成员,包括变量和方法,想给类的所有对象共享,就使用static修饰
4.还可以通过类名.来调用(static修饰的东西随着的类的加载而加载,类加载的时候已经存在了,存在就可以使用!!!)

注意事项://记忆
1.静态方法里面没有this关键字(this表示当前对象的引用,静态方法是static修饰的东西随着的类的加载而加载,
  类的加载优先于对象存在,这个时候还没有对象,因为对象是通过类来创建的,所以没有对象的引用this)


2.静态方法,除非在里面创建对象,否则只能调用静态成员(静态的成员变量和静态的成员方法),调用简记,静态只能调用静态
 (只有用static修饰的东西随着的类的加载而加载,类加载的时候已经存在了,存在就可以调用使用!!!)


总结://理解.不用特意去背
 类的加载:我们写的源文件.java文件经过编译会生成类名.class字节码文件,运行的时候把字节码文件.class(对应就是类)加载进入内存,
          内存执行的是运行中的数据,里面的数据在程序运行完毕就从内存中消失了,所以每运行一次类就只加载一次,为了便于你记住,
  在eclipse里面,是自动编译的,那么类在什么时候加载呢,当你运行时看到类名第一次写在哪里,类就在哪里加载了,只加载一次!


 事物属性对应Java里面就是成员变量,写在类中,方法外,成员变量是属于对象的,随着对象的创建而创建,
 并且每一个对象里面都有各自的一份成员变量,
     成员变量属于对象,所以又叫对象变量,实例变量


     事物的行为对应Java里面的成员方法,写在类中{},成员方法随着对象创建并且调用而存在
 成员变量和成员方法只能被对象名(对象)调用,成员方法还叫对象方法,实例方法


 成员变量用static静态修饰就变成了静态变量,还叫类变量(随着类的加载而加载),静态成员变量属于类的,不属于对象,
 类加载的时候优先于对象存在,静态变量只有一份,因为随着类的加载而加载,类只加载一次,因为创建一个类就可以创建多个对象
 也就是说静态变量在类加载的时候已经存在了并且只有一份,对象是指类的加载之后通过类来创建的,可以给类的所有对象所共享


 成员方法用static去修饰就变成了静态方法,属于类的,还叫类方法,随着类的加载而加载并且加载一次,类加载的时候已经存在,那就
 可以通过类名点来调用,
 用static修饰的东西,都是随着类的加载而加载,类加载的时候已经存在了,就可以通过类名.来调用
 并且类的加载优先于对象存在,对象是在类加载之后创建的,所以对象也可以通过对象名.来调用static修饰的东西


3:final关键字
概述:最终的意思,最后一个的意思,用final修饰的变量是最终变量(常量),只能被赋值一次
注意事项:成员变量如果被final修饰,它的默认值无效,要手动给他赋值(如果成员变量的默认值如果有效但是用final不能被再次赋值,
只能使用默认值,没有意义)
代码:
public class FinalTest {
// final static int i ;//报错,成员变量有默认值的,但是用final修饰的成员变量的默认值无效,要手动赋值,
//  用final修饰的变量是最终变量(常量),只能被赋值一次
final static int i  = 666;//手动赋值,成员变量有默认值的,但是用final修饰的成员变量的默认值无效,要手动赋值,
//用final修饰的变量是最终变量(常量),只能被赋值一次


public static void main(String[] args) {
//基本数据类型的局部变量的情况
// final int i = 666;//用final修饰的变量是最终变量(常量),只能被赋值一次
// i = 999;//报错,用final修饰的变量是最终变量(常量),只能被赋值一次,上面已经赋值一次了

// i = 999;
// System.out.println(i);

//引用数据类型的变量,用final修饰的变量是最终变量(常量),只能被赋值一次
final FinalTest t = new FinalTest();
t =  new FinalTest();
System.out.println(t);

}
}


//发现用final修饰的变量只能赋值一次,里面的值永远都是固定的,叫做常量,里面的值不能发生变化的量
常量:在程序的运行过程中,其值不能发生改变的量
分类:
字面值常量:从字面上就可以知道他的值,比如0就是0,"abc"就是"abc",值已经固定死了,只能有一个
自定义常量:就是用final修饰的变量最终变量(常量),因为之能被赋值一次,值已经固定死了,只能有一个
   比如final int i = 666;i就是自定义常量,一般会把i这个常量写成大写的,这个是个规范不是规则,建议这样做
       final int I = 666;syso(I);//一般我通过I就知道他表示一个常量


4:Random类的使用
概述:Random是个类,表示随机数类,通过类名来创建对象,拿到对象名点来调用这个类里面的变量和方法,
如果这个变量或者方法是用static修饰的,可以用类名点来调用也可以通过对象名点来调用
因为这个类是在util包下的,所以要导包(除了lang包下的不用导),就是在类的上面用import关键字表示你要使用哪个包下的哪个类,
比如:import java.util.Random;(不用记那么多统一用alt /如果要导包就自动帮你导,不用导就不导,推荐使用alt /)
(当然导包你也可以用鼠标点击生成或者用整理包快捷键ctr shift o,没有帮你导包,有多余的包帮你删掉)

最重要是这个方法得到0到一定范围-1的随机整数:
代码:
Random r = new Random();//对象名是r,创建对象格式代码套路 alt/选类 对象名 = new alt /选构造方法,得到对象名点来调用方法
int i = r.nextInt(4);//产生一个随机数,范围在包含0-3之间,0,1,2,3
System.out.println(i);


5:补充内容
A.同一个包下不能有两个相同名字的类,包其实就是一个文件夹

猜你喜欢

转载自blog.csdn.net/ycx13787444472/article/details/80343681