java学习日记(七)--静态变量

变量的访问原则和this关键字

变量的访问原则:就近原则
全局变量和局部变量如果有同名的变量:在方法中优先使用局部变量全局变量和局部变量允许有同名的变量
相同的大阔号里面【作用域】不允许出现同名的变量
方法中的局部变量不提供给其他方法使用只供给自己使用
this关键字
定义:代表当前调用对象。 this本质是对象
用于区分局部变量和成员变量同名的情况。使用this.属性名称的一定是成员变量,没有使用this.的变量,根据就近 原则来确定使用哪个变量。
this他不是一个固定的对象。他一定代表的是类的一个对象。
代码示例

book1.setPrice(200);//book1在调用方法 this就代表book1 book2.setPrice(400);//book2在调用方法 this就代表book2 book3.setPrice(600);//book3在调用方法 this就代表book3 public void setPrice(double price) {
this.price = price;
}
谁当下来调用setPrice(double price)this就代表谁

静态

概述:静态就是static ;
static是一个关键字,静止的,在java表示资源共享的。为什么要使用静态?

1、比如人都有国籍属性,中国人的国籍的值一样的,创建对象的时候需要在每个对象的空间中开辟对应的国籍属 性空间,所有对象的值都一样这样浪费空间。
2、如果把所有对象的属性值一样的属性共享,只开辟一块空间来存储所有的对象共享这个空间值就可以了。
3、对象依托类来的,可以把共享的资源放到类中,所有的对象使用的时候到类中来找就可以了;这样节省空间而 且提升了代码的执行效率,使用也方便。
4、使用static关键字对类描述的属性进行修饰,加载类信息的时候在方法区中单独开辟一块空间来存放静态的资源 供所有对象来共享,这块空间叫静态区【存在于方法区内】
静态体现方式:
被static修饰的资源就是静态的体现。
静态有什么特点:【需要大家去记忆 面试题】
1、属于类,优先于对象存在于内存中
2、随着类的加载而加载【类的加载他就初始化】
3、使用类名直接调用 【类名.属性名】
4、静态修饰的资源只能访问静态的资源
5、非静态的资源可以访问静态的资源修饰元素:变量、 方法。
静态变量

静态的东西的属于类,静态变量在类当中。被static修饰的变量就是静态变量
特点:
1、属于类不属于单独的对象,但是被对象共享
2、随着类的加载而加载,随着类的消失而消失【静态的生命周期延长】
3、优先于对象而存在【提前存在于方法区中】访问:
方式一:类名.属性名
方式二:对象名.属性名【不推荐使用】
代码示例

public class GrilFriend_Test {
public static void main(String[] args) {
//优先于对象存在System.out.println(GrilFriend.getSex());//lady System.out.println(GrilFriend.sex);//lady
GrilFriend gf1 = new GrilFriend();
 GrilFriend gf2 = new GrilFriend();
String sex = gf1.sex;//lady 开发中不推荐使用
System.out.println(sex); String sex2 = gf2.sex; System.out.println(sex2);//lady
//System.out.println(GrilFriend.get);
//System.out.println(GrilFriend.sex);
}
public void show () {
//定义一个静态变量
//static int a = 10;编译报错 方法中不可以定义静态变量的
System.out.println(sex+","+age);//静态的变量可以被非静态的方法使用
}
}

注意事项:
静态变量不能定义在方法中
静态的变量可以被非静态的方法调用
静态变量和非静态变量的区别【面试题】

1、所属不同:
静态变量:属于类非静态变量:
全局变量:属于对象
局部变量:属于方法
2、内存中的位置不同
静态变量:存储在方法区的静态区非静态变量:
全局变量:堆空间的对象空间里
局部变量:栈空间的方法中中
3、声明周期不一样:
静态变量:随着类的加载而加载,随着类的消失而消失非静态变量:
全局变量:随着对象的创建而创建,随着对象的消失而消失
局部变量:随着方法的调用而产生,随着方法的执行完毕就消失
4、访问方式不一样
静态变量:类名.属性名或者 类名.getter和setter方法

非静态变量:
全局变量:对象名.属性名或者对象名.getter和setter方法,或者直接使用使用局部变量:直接使用变量名使用
静态方法

概述:被static修饰的方法就是静态方法 比如:main方法就是一个静态方法静态方法的格式:
修饰符 static 返回值类型 方法名(形式参数){方法体或者return语句} 特点:
1、属于类不属于对象;被所有的对象共享
2、优先对象存在
3、随着类的加载就加载到静态区【普通方法加载到方法区的普通区】
4、不需要使用对象调用,可以直接被类名调用
说白点:静态方法不需要创建对象就可以被类名调用执行
5、只能使用静态资源
说白点:静态方法中只能使用静态变量,只能调用其他的静态方法,普通变量和普通方法不能被使用
调用格式:
类名.方法名(实际参数)
对象名.方法名(实际参数)【方式不推荐使用】
代码示例

 public class Demo01 {
int a = 10 ;//普通变量
static int b = 50;//静态变量
//普通方法
public void show() { System.out.println(a);//10 System.out.println(b);//50
//普通方法调用静态方法可以的
print();//变量50
//普通方法调用普通方法可以的
run();
}
public void run() { System.out.println("我跑得快");
}
//静态方法
public static void print() {
//System.out.println("变量"+a);a是普通变量 不能够被使用
System.out.println("变量"+b);

}
//静态方法
public static void main(String[] args) {
//show();报错,show方法是一个普通方法在静态方法中调用不了普通方法
/*Demo01 demo01 = new Demo01(); demo01.show();
print();
demo01.print();//不建议使用
Demo01 demo01 = new Demo01();
demo01.show();
}
}
 

注意事项:
1、普通方法可以使用普通变量和静态变量;静态方法只能使用静态变量
2、静态方法只能直接调用静态方法;而不能直接调用普通方法;
3、静态方法如果想要调用普通方法,先要创建该方法所在类的对象,再使用对象调用 该方法
4、普通方法可以调用静态方法和普通方法
写代码的时候:
静态的资源就使用类名来调用
普通资源必须先创建对象,再使用对象来访问使用

工具类

工具类的编写
概述:没有任何的成员属性,只有静态方法的类叫做工具类使用起来需要创建对象吗?不用
可以直接使用类名来调用方法,执行相关功能,提升了执行效率,使用简单。
自定义工具类:
1、名称:ArrayTool
2、作用:可以提供操作数组数据的各种功能
3、功能: 数组的遍历

获取数组的最大值获取数组的最小值数组元素的交换数组元素反转
代码

public class ArrayTool {
//数组的遍历
public static void printArr(int[] arr) { String a = "[";
for (int i = 0; i < arr.length; i++) { if (i== arr.length‐1) {
a+=(arr[i]+"]");
}else {
a+=(arr[i]+",");
}
}
System.out.println(a);
}
//获取数组的最大值
public static int getMax (int[] arr) {
//假设初始擂主
int max = arr[0];
for (int i = 1; i < arr.length; i++) { if (max<arr[i]) {
//更换擂主
max = arr[i];
}
}
return max ;
}
//获取数组的最小值
public static int getMin (int[] arr) {
//假设初始擂主
int min = arr[0];
for (int i = 1; i < arr.length; i++) { if (min>arr[i]) {
//更换擂主
min = arr[i];
}
}
return min ;
}
//数组元素的交换
public static int[] changeArr(int[] arr,int a, int b) { int temp = arr[a];
arr[a] = arr[b]; arr[b] = temp;
 
 

java中工具类很多都是jdk给写好了,我们只需要直接去使用。
帮助文档的制作

概述:工具类准备好之后,编译成.class的字节码文件,外界就无法看懂,别人想使用这个工具无法使用;所以需 要编写工具类的程序员,准备一份工具类的帮助文档;
如何生成帮助文档?
jdk里面提供的程序 javadoc结合文档注释以及相关的注解一起完成帮助文档的制作。注解:
@author :作者是谁谁谁 用在类上@version : 版本号是什么 用在类上@since : 从哪个版本开始 用在类上@param : 参数的解释 用在方法

@return : 返回值得解释 用在方法生成帮助文档:
利用命令来生成:【在黑窗口中执行】
javadoc -d 生成帮助文档的文件夹名称 -author -version java代码文件名
【带后缀名 .java】eclipse中有对应功能:
Project ===> Generate javadoc =>在弹出的页面中选择要生成的帮助文档路径【必须是空文件夹,如果不存在会自动创建】>点击finish就ok了
代码:

package com.ujiuye.demo;
/**
*	@author Xiaozhanfeng[肖占锋]
* @version 1.0.0.0.1
*	@since	jdk8开始
*
* */
public class ArrayTool {

//数组的遍历
/**
* @param arr 这是方法要打印的数组
* */
public static void printArr(int[] arr) { String a = "[";
for (int i = 0; i < arr.length; i++) { if (i== arr.length‐1) {
a+=(arr[i]+"]");
}else {
a+=(arr[i]+",");
}
}
System.out.println(a);
}
//获取数组的最大值
/**
*	@param arr 这是方法要操作的数组
*	@return 返回值是数组元素的最大值
* */
public static int getMax (int[] arr) {
//假设初始擂主
int max = arr[0];
for (int i = 1; i < arr.length; i++) { if (max<arr[i]) {
//更换擂主
max = arr[i];
}
}
 
return max ;
}
/**
*	@param arr 这是方法要操作的数组
*	@return 返回值是数组元素的最小值
* */
//获取数组的最小值
public static int getMin (int[] arr) {
//假设初始擂主
int min = arr[0];
for (int i = 1; i < arr.length; i++) { if (min>arr[i]) {
//更换擂主
min = arr[i];
}
}
return min ;
}
//数组元素的交换
/**
*	@param arr 这是方法要操作的数组
*	@param a 互换元素的第一个索引值
*	@param b 互换元素的第二个索引值
*	@return 返回值是互换元素后的数组【原数组】
* */
public static int[] changeArr(int[] arr,int a, int b) { int temp = arr[a];
arr[a] = arr[b]; arr[b] = temp; return arr;
}

//数组元素反转
/**
*	@param arr 这是方法要操作的数组
*	@return 返回值是反转元素后的数组【原数组】
* */
public static int[] reverse(int[] arr) {
for (int i = 0,j = arr.length‐1; i <= j; i++,j‐‐) { int temp = arr[i];
arr[i] = arr[j]; arr[j] = temp;
}
return arr;
}
}

在cmd使用户命令生成
在eclipse中生成对应的文档
jdk帮助文档的使用

jdk提供文档的使用

1、在线帮助文档:http://www.matools.com/api/java8
没有搜索框,只能对帮助文档特别熟悉。
2、离线的帮助文档:
1、打开文档
2、点击显示
3、点击索引
4、搜索需要的类型
5、阅读说明、说明中的示例代码
6、查看构造方法,判断是否可以创建对象
7、查看每个方法的返回值类型,判断是否是自己需要的方法
8、查看每个方法是否静态,判断是否可以使用类名直接调用
9、方法名称
10、方法的详细解释和参数列表

Math使用

练习 猜数字小游戏完成
生成一个1-100之间的随机数,作为要猜的数字
定义一个循环,不断的让用户猜测数字,并且提示“大了”、“小了”或者是“中了” 分析:
随机数怎么生成?两种方式:
1、Math类当中的功能random():可以随机的生成0到1之间的小数不会包含1,包含0 2、使用Random类中的nextInt(实参):
随机生成0到实参之间的整数,含0 不含实参。
死循环里面键盘录入,录入的数字和生成数字对比,相等了,猜中了循环停止【break】
Math类是一个工具类。他的所有功能都可以类名直接调用。Random类
代码

public class Demo02 {
public static void main(String[] args) {
double d = Math.random();//生成的数含0.0 不含1.0的
//num就是要猜的数字
int num = (int)(d*100+1);//d扩大100倍变为0到100【不含】的小数再加一
System.out.println(num);
Scanner sc = new Scanner(System.in); while(true) {
System.out.println("请输入您猜的数字【1到100】:");
int guess_num = sc.nextInt(); if (guess_num == num ) {
System.out.println("恭喜您猜对了,可以获得100万");
break;
} else if(guess_num > num){ System.out.println("您猜的数字大了");
}else {
System.out.println("您猜的数字小了");
}
}
}
}
random:
public class Demo02 {
public static void main(String[] args) {
//Method01();
//使用random 必须县创建对象 使用空参
Random random = new Random();
//调用相关方法生成随机数
int num = random.nextInt(100)+1;//0到99的数字
//加的数就是要生成的数的开始值	最大范围值 = 指定值‐1+开始值 98 = 指定值‐1+2
Scanner sc = new Scanner(System.in); while(true) {
System.out.println("请输入您猜的数字【1到100】:");
int guess_num = sc.nextInt(); if (guess_num == num ) {
System.out.println("恭喜您猜对了,可以获得100万");
break;
} else if(guess_num > num){ System.out.println("您猜的数字大了");
}else {
System.out.println("您猜的数字小了");
}
}
}
}

Arrays使用【操作数组的】

1、binarySearch(int[] arr, int key):查找数组arr中key值出现的索引值使用有前提:要求数组必须升序排列好

4、sort(int[] arr)【常用】:给数组arr进行升序排列5、toString(int[] arr)【常用】:展示数组中的内容的
代码

import java.util.Arrays;
public class Demo03 {
public static void main(String[] args) { int[] arr = {1,2,3,4,54,48,5,2};
Arrays.sort(arr); System.out.println(Arrays.toString(arr)); int i = Arrays.binarySearch(arr, 54);
System.out.println(i);//4 实际得到的是‐9
}
}

你可能感兴趣的:(Java学习,java,编程语言)