17、Java基础——如何导入包、成员变量和局部变量、访问权限修饰符、static静态修饰

目录

课前先导

一、如何导入包

1、JDK提供的基本包

2、如何导入包

 3、导包注意事项

二、成员变量与局部变量 

1、成员变量

2、局部变量 

3、注意事项

4、成员变量和局部变量的区别

三、访问权限修饰符

1、类的访问控制

2、类成员的访问控制

四、static静态修饰

1、static的特性

2、static修饰的成员 

3、实例变量与静态变量的区别

4、实例方法与静态方法的区别 

5、静态代码块


课前先导

学完本篇,我们就要进入面向对象的学习了,之前我们的代码都在一个类中完成,是Java代码的入门写法,我们今天的学习就是由一个类完成代码到多个类完成代码的过渡,很重要!

本篇是后面面向对象要用到的只是点,大家现在不懂的不必纠结,把这篇当做查询资料,在后面的学习中有什么不懂的来查询就可以了。 

一、如何导入包

我们前面的学习内容总共有两个需要导包的类,Scanner类和Arrays类,他们都是由我们安装的JDK提供的java util包中的类,今天我们就来看看Java中其他的包以及怎么导入包

1、JDK提供的基本包

(1)java.lang:虚拟机自动引入

(2)java.util:提供一些实用类

(3)java.io:输入、输出 

前面两个我们都见过和用过了,io包在我们后面学到io流的时候就见到了

2、如何导入包

导入包时,如果包里面还有子文件夹,是不导入子文件夹的

语法格式

import  包名.类名;

(1)导入系统包;

  import java.util.*:  导入java.util包中所有类 ,有它就不用其他的util导包语句了

(2)导入自定义的包

 3、导包注意事项

(1)一个类同时引用了两个来自不同包的同名类 必须通过完整类名来区分;

(2)每个包都是独立的,顶层包不会包含子包的类;

(3)package和import的顺序是固定的

* package必须位于第一行(忽略注释行)

* 只允许有一个package语句

* 其次是import

* 接着是类的声明

二、成员变量与局部变量 

1、成员变量

成员变量(全局变量)定义在类中方法外(某些结构外)的变量,能够作用在整个类中,可以用static修饰。(被static修饰的成员变量叫静态变量,没被static修饰的变量叫实例变量)

成员变量可以分为两种 

(1)实例变量:指没有被 static 修饰的成员变量;

(2) 静态变量(或称为类变量):指被 static 修饰的成员变量。

2、局部变量 

局部变量定义在方法或者某些结构中的变量,只能作用在方法中或者定义它的结构中,不可以用static修饰。

main方法也是一个方法,而且是用static修饰的静态方法 ,main方法里面的变量是局部变量

3、注意事项

(1)系统会给成员变量赋予一个默认值,局部变量必须先初始化(赋值)才能使用,系统不会给局部变量赋予默认值

 这里报错是因为main方法是静态方法,静态方法只能调用静态变量和静态方法,我们给成员变量加上static

 这里报错是因为局部变量是没有默认值的,我们没有给他赋值,它就没有值,就不能参加运算,我们给它赋个值

 (2)同一个类中不能有同名的成员变量(全局变量),在同一个方法或者结构中,不能有同名的局部变量,不同的方法中可以有同名的局部变量

同一个类中定义相同的成员变量名会报错,在同一个类中不同的方法中(结构中)定义相同的局部变量名可以使用,因为 局部变量随着方法的调用而存在,随着方法调用的完毕而消失。

 (3)同一个类中可以有同名的成员变量和局部变量,但是局部变量具有更高的优先级

我们先定义个成员变量,然后通过main方法输出 

再在main方法中定义一个和成员变量同名的局部变量 ,然后输出

输出的是局部变量a。 

4、成员变量和局部变量的区别

(1)在类中定义的位置不同

成员变量在类中方法外(某种结构外);

局部变量定义在方法中(某种结构中)。

(2) 初始化值不同

成员变量有默认的初始化值;

局部变量没有默认的初始化值,必须先定义,赋值之后才能使用。

(3)生命周期不同

成员变量随着对象的存在而存在,随着对象的消失而消失;

 局部变量随着方法的调用而存在,随着方法调用的完毕而消失。

(4)在内存中的位置不同

成员变量是在堆内存中;

局部变量是在栈内存中。 

三、访问权限修饰符

Java中的权限修饰符一共有四个,按访问权限的从大到小排列;分别是:

public 、protected 、默认(default) 、private;

英文单词: public  公共的、公众的     protected   受保护的        private   私有的

访问权限控制又分为:类的访问控制类成员的访问控制

1、类的访问控制

能修饰类的访问权限修饰符只有两个:public  和   默认(default)

public访问权限修饰符:公有访问级别;

默认(default)访问权限修饰符:包级私有访问级别。

(1)public修饰的类

 一个Java文件只能有一个public修饰的类,并且这个类的名称要和这个Java怎建的名称保持一致(就是我们平常创建的类),否则会报错。

 (2)默认修饰符修饰的类

 一个Java文件中可以有多个默认修饰符修饰的类(默认修饰符不要写default,什么都不写)

 (3)不同修饰符修饰的类的区别

---->  一个Java文件中,除了可以定义public修饰的类之外,还可以定义0个或者多个默认修饰符(不要写default,什么都不写)的类

注意:一般来说,一个Java文件中只定义一个类

 ---->在同一个包中的public修饰的类中访问public和默认修饰符修饰的类

 ---->在同一个包中的默认修饰符修饰的类中访问public和默认修饰符修饰的类

  ---->在不同包中的public修饰的类中访问public和默认修饰符修饰的类

 出问题了,访问默认修饰符修饰的类报错了,不是我没有导包,MyEclipse也没提示我导包,我们手动导包看一下

访问默认修饰符修饰的类还是报错 !并不是我们导包的问题。

  ---->在不同包中的默认修饰符修饰的类中访问public和默认修饰符修饰的类 

 访问默认修饰符修饰的类报错了,我们再手动导包

 访问默认修饰符修饰的类还是报错 !

(4)类的访问控制总结

一个Java文件中,除了可以定义public修饰的类之外,还可以定义0个或者多个默认修饰符的类;

* public修饰的类可以在任何地方被访问;

* 默认修饰符修饰的类只能被同包的类访问。

2、类成员的访问控制

(1)public:公共权限,可以被任意类访问,不同包不同类依然可以访问

(2)protected: :受保护的权限

* 同包中的其他类可以访问其他类protected修饰的属性;

* 不同包中的类不能访问protected修饰的属性;

* 子类可以访问父类中默认修饰的属性

(3)默认修饰符:

* 同包中的其他类可以访问其他类默认修饰符修饰的属性

* 不同包中的类不能访问默认修饰符修饰的属性

* 子类不可以访问父类中默认修饰的属性

(4)private:私有权限 

只能在本类中被访问访问

四、static静态修饰

我们main方法的语句和我们之前定义方法中都能看到static,今天就来了解一下。

英文单词: static   静止的、静态的

(1)static关键字可以修饰成员变量和成员方法,被static修饰的成员变量叫静态变量,被static修饰的方法叫静态方法。局部变量不可以被static修饰;

(2)static关键字主要用于内存管理,被static修饰的成员只会分配一次存储空间,不会因为类的加载而重新分配空间;

(3)static可以修饰变量、方法、代码块和内部类 ;

(4)作用域:static关键字属于类,而不是类的实例。

1、static的特性

(1)随着类的加载而加载(在类加载的同时就分配好了内存空间);

(2)优先于对象存在;

(3)被所有对象共享(可以在只赋一次值后,所有的对象都可以直接调用,共享这个值,或直接通过类名调用)。

2、static修饰的成员 

(1)被static修饰的成员变量

称为类变量静态变量

可以被类内部的任意方法访问。

(2)static修饰的成员方法

称为类方法静态方法

可以被类内部的任何方法访问,但静态方法只能访问静态变量

(3) 被static修饰的成员在面向对象中的特点

(1)被static修饰的成员会存储在数据共享区;

(2)被static修饰的成员变量的值只有一个,我们可以通过多个对象调用它;

(3)被static修饰的成员,有两种调用方式,除了可以通过对象名调用外,还可以通过类名调用它

类名.静态成员;

 我们先定义一个属性类

 我们先通过对象调用

看另一种用对象调用静态方法的格式 :静态变量只赋一次值

 通过类名调用静态方法

3、实例变量与静态变量的区别

实例变量:

(1)每创建一个实例,Java 虚拟机就会为实例变量分配一次内存;

(2)在类的内部,可以在非静态方法中直接访问(静态方法只能访问静态变量);

(3)在本类的静态方法或其他类中则需要通过类的实例对象进行访问。

 静态变量:

(1)在类的加载过程中完成静态变量的内存分配,Java 虚拟机只为静态变量分配一次内存,不会随着类的加载重新分配内存;

(2)在类的内部,可以在任何方法体内直接访问静态变量;

(3)在其他类中,可以通过类名访问该类中的静态变量。

在内存中的位置:

实例变量:随着对象的建立存放在堆内存中;

静态变量:随着类的加载存放在栈内存中

 生命周期不同:

类变量周期生命最长,随着类的消失而消失;

实例变量生命周期比类变量短,它是随着对象的消失而消失。

4、实例方法与静态方法的区别 

静态方法(或称为类方法):指被 static 修饰的成员方法;

实例方法:指没有被 static 修饰的成员方法。

(1) 静态方法,属于类,而不属于类的对象;

(2)静态方法可以通过类名被直接调用,无需创建类的对象;

(3)静态方法中,不能使用 this 关键字,也不能直接访问所属类的实例变量和实例方法;

(4)静态方法中,可以直接访问所属类的静态变量和静态方法

(5)因为静态优先于对象存在,所以静态得方法中是不可以定义this、super关键字的

(6)实例方法,可直接访问所属类的静态变量、静态方法、实例变量和实例方法

5、静态代码块

用static修饰的代码块

static{

// java代码

}

(1)如果有多个静态代码块,按顺序加载;

(2) 每个静态代码块只会被执行一次。

 我们先看在一个类中的写法

public class Demo17 {
	//静态变量
	static int num = 100;
	//静态代码块
	static{
		num *= 2;
		System.out.println("静态代码块一:"+num);
	}
	static{
		num += 200;
		System.out.println("静态代码块二:"+num);
	}
	static{
		num /= 4;
		System.out.println("静态代码块三:"+num);
	}
	//main方法
	public static void main(String[] args) {
		
	}
	
}

没有main方法程序是不执行的,main方法是程序执行的入口

我们上面这种写法是标准的,在开发工具MyEclipse中运行时会有提示,我们看一下标准用法 

比较上面的代码,我们再定义一个静态方法 ,再别的类中调用

public class Demo17 {
	//静态变量
	static int num = 100;
	//静态代码块
	static{
		num *= 2;
		System.out.println("静态代码块一:"+num);
	}
	static{
		num += 200;
		System.out.println("静态代码块二:"+num);
	}
	static{
		num /= 4;
		System.out.println("静态代码块三:"+num);
	}
	//静态方法
	public void show(){
		System.out.println("静态方法");
	}
	
}

 我们在main方法中创建对象后直接运行,可以看到我们的运行结果是静态代码块,因为static修饰的成员是属于类的,随着类的加载而加载,我们创建Demo17类的对象时,加载了Demo17类,随着加载的还有它的静态成员。

 这里我们创建了两个对象,类加载了两次,而静态代码只运行了一次说明每个静态代码块只会被执行一次。

我们再看一下怎么调用静态变量和静态方法

 通过上图可以看到我们的代码用对象调用静态成员报黄了,因为static属于类,所以一般用类名调用,用对象调用也没错

今天这篇知识点还是比较乱,大家可以作为查询资料,在后面面向对象的学习中有什么不懂的可以查阅,我们现在就对这些只是混个眼熟,后面学习面向对象时能够知道是干嘛的就行。好了,今天的学习就到此结束了,我是一米八、有腹肌、低于半小时你报警的Loveletter,觉得内容不错的小伙伴可以点点关注,我们下篇博文见,再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值