详解JAVA成员变量和局部变量
JAVA基础之局部变量与全局变量以及成员变量的区别
JAVA基础之局部变量与全局变量以及成员变量的区别局部变量
定义:在⽅法内定义的变量称为“局部变量”或“临时变量”,⽅法结束后局部变量占⽤的内存将被释放。
全局变量
定义:全局变量,⼜称“外部变量”,它不是属于哪个⽅法,作⽤域从定义的地址开始到源⽂件结束。
注意事项:
当局部变量与全局变量重名时,起作⽤的是局部变量。
成员变量
定义:在类体的变量部分中定义的变量,也称为字段。
区别:
java中没有全局变量的定义,这是C中的
例:
class Demo{
int x;// ⾮静态成员变量,⼜称为属性,对该类不同的对象来说,属性是不同的
static int y;// 静态成员变量,⼀个类中只有⼀个该变量,该类不同的对象共享同⼀个静态成员变量
public static void main(String[] args){
int m = 0;// 局部变量,是⽅法内部定义的变量,只在⽅法内部可见,在该⽅法结束后,由垃圾回收器⾃动回收
}
}。
成员变量、实例变量、类变量和局部变量区别
成员变量、实例变量、类变量和局部变量区别
⼀、成员变量、实例变量、类变量和局部变量区别
1::变量电议部分所定义的变量被称为类的。
也就是说在整个类中都有效,类中的⽅法可以直接调⽤成员变量使⽤。
然⽽成员变量⼜分为实例成员变量(简称)和类变量(简称)
1.1::就是我们正常定义的变量,⽐如int a; a就是
1.2::定义前要加上Static ⽐如static int a;这个a就是静态变量,当在变量定义前加上static的时候就代表着该变量在使⽤的时候有⼀处改变则各个⽤到这个变量的地⽅,该变量都发⽣改变,就是所谓的⼀处改变处处改变,静态变量的⽣存期为整个,但是只能在定义该变量的函数内使⽤该变量。
退出该函数后,尽管该变量还继续存在,但不能使⽤它。
2::在⽅法体中定义的变量和⽅法的参数称。
也就是说只在定义它的⽅法内有效,⽽⽅法外部的其他⽅法⽆法使⽤局部变量。
当局部变量名字与成员变量名字相同,则成员变量被隐藏,即这个成员变量在这个⽅法内暂时失效,以局部变量定义的为准。
⼆.长提到的⽅法有,类⽅法,实例⽅法。
就是名字和类名相同,⽽且没有类型。
类⽅法和实例⽅法的区别就是类⽅法前⾯有static修饰,⽽实例⽅法没有static修饰。
实例⽅法既能对类变量操作,也能对实例变量操作,⽽类⽅法只能对类变量进⾏操作。
java内部类知识点总结
java内部类知识点总结Java内部类是Java语言的一个重要特性,它允许在一个类的内部定义另一个类。
本文将从以下几个方面对Java内部类进行总结:1. 内部类的定义和特点内部类是指在一个类的内部定义的另一个类,它可以被看作是一个类的成员。
内部类可以访问外部类的所有成员,包括私有成员,而外部类不能直接访问内部类的成员。
内部类对外部类的访问具有完全访问权,而外部类对内部类的访问则需要通过内部类的实例来进行。
内部类可以被定义为静态或非静态的,静态内部类可以访问外部类的静态成员,而非静态内部类则不能访问外部类的静态成员。
2. 内部类的分类Java内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。
成员内部类是指在类的内部定义的非静态类,它可以访问外部类的所有成员,并且可以被外部类的其他成员访问。
成员内部类可以被看作是外部类的一个成员,它可以访问外部类的成员变量和成员方法,而外部类则不能直接访问成员内部类的成员。
局部内部类是定义在方法或作用域内的内部类,它只能在定义它的方法或作用域内使用,局部内部类可以访问外部类的所有成员,但是外部类不能访问局部内部类的成员。
匿名内部类是没有名称的内部类,它通常用于继承一个类或实现一个接口,并且只使用一次。
匿名内部类必须继承一个类或实现一个接口,并且必须在创建对象时实现它的方法,它可以访问外部类的所有成员。
静态内部类是定义在类的内部的静态类,它可以访问外部类的静态成员,但是不能访问外部类的非静态成员。
静态内部类可以被看作是外部类的一个静态成员,它只能访问外部类的静态成员,而不能访问外部类的非静态成员。
3. 内部类的应用场景内部类在Java中有着广泛的应用场景,其中最常见的应用场景包括以下几个方面:3.1 实现多重继承Java中不支持多重继承,但是通过使用内部类可以实现类似于多重继承的功能。
例如,一个类可以继承一个类,并且在内部定义一个实现接口的内部类,从而实现多重继承的效果。
JAVA篇:修饰符与接口、类、方法、成员变量、局部变量、方法块
JAVA篇:修饰符与接⼝、类、⽅法、成员变量、局部变量、⽅法块或许这是⼀个⽐较轻松简单的知识点,因为只是简单地做⼀个总览对⽐⽽已。
这周⽐较忙,祝我⾃⼰好运。
有关接⼝(interface)的修饰符,其实⼀般⽤public,也可以不加修饰词(default),或者是使⽤private修饰的声明在类的内部的内部接⼝。
不存在protected修饰的接⼝。
⽽接⼝内部可以有⽤public static final修饰的静态常量,除此之外只存在public修饰的⽅法(接⼝中⽆修饰词的⽅法也默认是public)了。
⽆论是接⼝还是接⼝中的⽅法的abstract修饰词都是隐含的,不必显式地修饰在接⼝或者⽅法前⾯。
类的访问限制修饰词与接⼝⼀样,但是还可以有⾮访问限制修饰词abstract(抽象类)和final(不可继承的类)。
类的成员变量可以被四种访问修饰词修饰,同时也可以被static(静态变量),final(常量),transtient(有关序列化特殊标识变量,具体还需要进⾏了解), volatie(线程共享变量)。
类⽅法除了访问限制修饰符,还可使⽤static(静态⽅法),final(不可改变的⽅法),abstract(抽象的),native(⾮java实现的),synchronized(线程同步),类构造⽅法只可使⽤访问限制修饰符修饰,局部变量只能使⽤final定义常量,⽅法块可以使⽤static定义静态⽅法块和使⽤synchronized 定义线程同步的⽅法块。
java的接⼝、类1、接⼝(interface) 在java中,接⼝是⼀个抽象类型,是抽象⽅法的集合,接⼝通常以interface来声明,接⼝只能包含抽象⽅法和以static\final修饰的变量,⼀个接⼝可以继承(extends)另⼀个接⼝。
接⼝只包含要实现的⽅法,⽽类描述对象的属性和⽅法,两者实现类似但是概念不同。
java提供了类和接⼝之间的实现机制,接⼝不可被实例化,只能被实现(implements),实现接⼝的类必须实现接⼝中全部的抽象⽅法,否则该类必须使⽤abstract声明为抽象类。
java基础知识点整合
面向对象3.1 面向对象介绍1.什么是面向对象对象其实就是现实生活中的各种物体,他们有各种各样的功能,当我们需要借助这些物体去完成我们的需求时,我们就是在面向这些对象,使用它们其中的功能,至于他们其中的功能是如何实现的,我们无需知道,只要能完成需求即可.2.什么是面向对象编程(OOP):Object Oriented Programming 是一种编程思想, 使用对象去进行编程.它的特点有: 封装, 继承, 多态3.对象从哪来:对象是需要先用类来描述, 然后使用类来创建.类是对象的描述, 对象是类的实例.4.面向对象的优点提高代码复用性.使用者无需关心对象其中是如何实现的.让程序员从一个编写者转换成一个使用者.更加符合人的思维能力,使编程更简单.3.2 定义类1.成员变量在类中用变量来描述这一类对象公有的特征.2.成员函数在类中用函数来描述这一类对象公有的行为.3.3 创建和使用对象1.怎么创建使用"new 类名()"形式创建一个对象2.怎么使用通过"."语法来访问类的成员.例如: Person p = new Person(); = "张三";p.eat();3.4对象的初始化过程1.加载类类在第一次使用的时候被加载到内存中2.初始化成员变量当创建对象的时候, 成员变量会初始化为默认值, 基本数据类型都是0, 引用数据类型都是null3.5对象的生命周期1.开始new关键字创建对象的时候, 生命周期开始2.结束没有任何引用指向对象, 该对象成为垃圾, 被虚拟机回收3.6 匿名对象1.什么是匿名对象没有任何引用指向的对象, 就叫匿名对象2.匿名对象有什么特点匿名对象在创建之后立即被回收, 只能使用一次3.7 封装1.什么是封装封装就是将一类事物的特征和行为封装在一个类中,定义成成员变量和成员函数创建对象之后, 这些成员函数可以访问自己的成员变量2.对成员变量的封装使用private关键字将成员变量私有化如果需要对外部提供访问方式, 写公有的get, set方法3.8 构造函数1.什么是构造函数构造函数是一个特殊的函数.函数名必须和类名一致.没有返回值类型.(不等于void,不能写任何返回值).可以写return,但是不能写return+值(尽量不要写).new关键字创建对象时自动调用2.应用场景如果我们希望一段代码在创建对象的时候执行, 就可以写在构造函数中通常我们使用构造函数对成员变量进行赋值3.构造函数和成员变量的执行顺序成员变量优先于构造函数先执行,因为通常使用构造函数都是对成员变量进行初始化,所以如果没有成员变量,构造函数是没有任何意义的.4.构造函数的重载和普通函数一样, 参数列表不同(类型不同,顺序不同,个数不同)即可.重载只与参数列表有关5.构造函数的调用在创建对象时自动调用.在构造函数的第一条语句可以使用"this(被调用的构造函数的实际参数)"的形式调用该类其他构造函数.6.自动生成构造函数在一个类中构造函数是一定存在的.因为在一个类中如果没有写任何的构造函数, 编译时也会自动生成一个无参的构造函数, 里面什么代码都没有.如果写了任何一个构造函数, 那么就不会有自动生成的了注意: 我们在类中只写了一个有参构造函数的时候,这个类就不能使用无参的构造函数创建对象了7.构造函数的访问权限通常构造函数的访问权限都是公有的, 因为构造函数就是为了让别人创建对象时调用的个别情况下在定义类时不希望外部创建对象, 这时可以使用private修饰构造函数, 例如: 单例设计模式(Singleton)3.9 成员代码块(构造代码块)1.什么是成员代码块在类中使用"{}"定义一段代码, 这段代码在创建对象的时候会自动运行2.成员代码块和构造函数的区别构造函数在创建对象的时候是N个选1个调用而代码块是一定执行构造函数可以传入参数代码块不能传入参数3.创建对象时内存中的工作顺序在内存中查找指定的类, 如果没有就加载类, 有则直接引用在内存中开辟一块空间, 将成员变量初始化为默认值, 0和null按照类代码从上到下的顺序, 执行代码块或者成员变量赋值执行构造函数中的代码4.在方法中也可以写代码块(方法代码块),但是不常用3.10成员变量和局部变量1.成员变量在类中定义的变量,(Field),在整个类都可以访问(用于描述着一类事物的共有特征).成员变量随着对象的建立而建立,存在于对象所在的堆内存中.成员变量有默认初始值(0/false/null)2.局部变量在方法/语句中定义的变量(Local Variable),存在于栈内存中.作用范围一结束,变量的空间会自动释放.局部变量是没有初始值的.3.同名问题在同一个作用域中成员变量不能重复, 局部变量也不能重复但是成员变量和局部变量可以同名, 他们互相不冲突4.访问问题在局部变量和成员变量同名的时候, 如果直接用变量名访问一个变量, 那么是先找局部变量, 如果不存在才找成员变量这时如果不想找局部变量, 直接找成员变量, 应该用"this.变量名"3.11 this关键字1.构造函数中"this(参数)"形式可以在构造函数的第一条语句中调用其他的构造函数"this.成员名"形式可以调用当前对象的成员2.普通函数中this用在普通的函数中, 可以代表调用当前函数的对象哪个对象调用this所在的函数,this就代表那个对象.3.内部类中可以使用外部类名.this.成员来访问外部类的成员.3.12静态(static)变量1.什么是静态变量用static修饰的成员变量就是静态变量(随着类的加载而加载)优先于所有非静态成员及成员代码块.2.静态变量和普通变量有什么不同静态变量在类加载后就初始化, 不用创建对象可以直接使用.静态变量被类的所有对象共享(在共享区), 通过一个对象改变, 所有对象都改变.静态变量可以使用"类名.变量名"形式访问, Java推荐使用这种方式, 而不是通过对象访问.3.类在什么时候加载类在第一次使用的时候加载例如: 创建对象, 使用静态变量, 使用静态方法定义变量的时候不加载类.4.静态变量在什么时候使用在定义一个类的时候, 如果希望这个类的所有对象共享一个数据时, 就可以使用静态成员变量.3.13静态(staitc)方法1.什么是静态方法用static修饰的方法就是静态方法静态方法类加载后可以直接运行可以使用"类名.方法名"调用2.什么时候使用静态方法如果一个方法没有访问任何外部的非静态成员, 那么就可以定义为static.这样在调用的时候不用创建对象即可使用, 给人提供方便, 并且效率更高.3. 静态方法使用的注意事项1. 静态方法不能直接访问方法外非静态成员.因为静态方法是随着类的加载而加载的,而非静态成员只有在对象创建才会加载.因此,当静态方法访问方法外非静态成员,对象不一定被创建,所以不能直接访问,除非在静态方法中创建本类对象,才可以访问,方法外静态成员.2. 与静态方法不能直接访问方法外非静态成员相反,非静态方法是可以访问静态成员的,因为,对象被创建了,这个类一定被加载到内存中,所以可以访问.3. 因为静态优先于对象存在,所以在静态方法中是不能出现this,super这两个关键字,道理很简单,静态被加载时还没有对象,而这两个关键字都和对象有关,所以不能使用.4. 静态的利与弊静态好处:1. 如果一个类里的某一个成员变量,他的所有需要共同使用它,没必要每一个对象都存储一份,可以将成员变量设为static,系统将进行单独空间(方法区/静态区) 存储,节省内存空间.2. 静态的成员可以直接被类名调用,使用简单.静态弊端:1. 因为静态是随着类加载而加载的的,所以其生命周期是和类同存亡的.所以生命周期很长,比较浪费内存空间.2. 因为静态只能访问静态,所以访问有一定的局限性.3. 因为主函数是静态的,所以用主函数调用的方法再不创建对象的情况下,只能都是静态的.3.14静态代码块1. 什么是静态代码块用static修饰的代码块类加载后直接运行, 只能执行一次(因为类只会加载一次),如果在一个类中有主函数,他是优先于主函数运行的.不能访问外部非静态成员2. 什么时候用静态代码块在定义一个类的时候, 如果希望某一段代码在别人使用这个类的时候就执行, 那么就可以写在静态代码块中.用于给类初始化.3.15单例设计模式设计模式:解决某一类问题最行之有效的方法.单例设计模式:让一个类只能创建一个对象.懒汉式和饿汉式饿汉式步骤:1.私有化构造函数.2.创建一个对象,并私有(防止类外改变对象内部内容).3.创建一个公有的,静态的方法,返回本类对象,使类外获取本类对象.懒汉式步骤:1.私有化构造函数.2.创建一个对象引用,并私有(防止类外改变对象内部内容).3.创建一个公有的,静态的方法,判断是否创建了一个对象如果创建了,返回本类对象, 如果没有创建,创建一个对象返回,使类外获取本类对象.3.16继承1.什么是继承定义一个类, 使用extends关键字可以继承另一个类, 得到父类的所有非私有属性和方法.2.继承的特点Java只支持单继承, 不支持多继承, 但可以多重继承.一个父类可以有多个子类, 但一个子类只有一个父类.3.java改良多继承的原因?提高代码的安全性,如果一个子类继承多个父类,而这多个父类中有同名的方法,子类要去访问的话,就不知道要访问哪一个方法了.降低了安全性..4.子类对象创建的过程子类对象之所以能调用父类的方法, 是因为在创建子类对象的时候, 其内部创建了一个父类对象.在new一个对象时,会先去子类构造函数,中寻找super()(如果没有显示指定父类构造函数)然后创建父类,然后再回到子类中创建对象.调用子类的方法时, 虚拟机会先在子类中查找是否包含该方法, 如果没有则找父类.在调用子类构造函数的时候, 一定会使用"super(参数)"形式调用父类构造函数创建父类对象.子类中必须要有一个构造函数含有super调用父类构造函数..super和this类似, 都是必须在构造函数的第一条语句使用如果构造函数写了this, 那么则不能写super, 反之亦然如果没写this也没写super, 默认会自动调用父类无参的构造函数5.方法覆盖(重写)覆盖可以让子类将从父类继承来的方法进行扩展,提高代码复用性,减少冗余.覆盖时子父类的方法名子必须相同, 包括返回值,参数列表,并且子类的权限必须大于或等于父类.只能覆盖非私有方法.6.重载(Overload)和重写(Override)的区别:重载:名字相同,参数列表不同只与参数列表相同.重写:子父类的方法名子必须相同, 包括返回值,参数列表,子类的权限必须大于或等于父类.(如果父类返回值是一个类,子类返回值可以是和父类相同的类或其子类).7.向上转型子类可以当作父类使用, 因为父类的功能子类都有Fu f = new Zi();如果一个方法要求传入一个父类类型对象, 我们也可以传入一个子类对象8.强制类型转换在子类当作父类来用时, 不能调用子类特有的成员.如果一定要调用, 需要把父类类型强转回子类类型.这种转换叫强制类型转换, 在编译时不论类型是否匹配都不会报错, 为了程序安全, 通常在转换之前使用instanceof进行判断.3.17Object类及其中常用方法1.什么是Object类Object类是Java中所有类的父类, 如果定义一个类不继承任何类, 默认继承ObjectObject类中的方法会被所有的类继承2.finalize任何对象在成为垃圾被销毁之前, 都会调用finalize 方法Object类中的finalize方法是空的, 什么都没有当我们希望在对象被销毁之前执行一段代码, 就可以在类中重写finalize方法, 把要执行的代码写在方法中.3.toStringtoString方法可以将一个对象转为字符串表示形式Object类中的toString方法返回的是"类名@内存地址"当我们希望调用toString时返回成员变量的值, 就可以重写该方法调用System.out.println()方法时会自动打印对象toString的返回值4.equalsequals方法是用来比较两个对象的Object类中equals方法默认比较的是对象的地址如果我们希望比较两个对象的属性, 那么可以重写equals方法, 在方法内比较所有的属性在比较字符串时如果希望比较两个字符串的内容, 就需要使用equals, String类是重写了equals的3.18 组合设计模式1.什么是组合设计模式在我们定义一个类的时, 如果需要使用另外一个类的方法, 就可以用组合设计模式.2.组合设计模式的写法在类中定义一个被组合类型的成员变量通过构造函数组合一个对象, 用成员变量引用在方法中使用成员变量调用被组合对象的方法3.组合设计模式和继承的区别不占用继承的位置, 当前类组合一个类之后还能继承其他类组合设计模式组合的类不能当作被组合的类使用3.19 多态1.多态的体现父类引用指向子类对象.(父类的引用可以接受自己的子类).2.多态的前提类与类之间必须有关系,要么继承,要么实现.子类与父类存在覆盖,因为在不强转的情况下,父类,不能访问子类特有的方法.3.多态的好处提高代码扩展性.4多态的弊端虽然提高了扩展性,但是只能使用父类父类引用访问父类成员(共有成员),为了能访问子类特有方法,父类的引用必须转成子类类型(向下转型).3.20 抽象1.什么是抽象类用abstract修饰的类就是抽象类, 抽象类中可以定义抽象方法2.什么是抽象方法用abstract修饰的方法就是抽象方法, 抽象方法在子类中必须全部重写3.什么时候用抽象类和抽象方法在我们定义类的时候, 如果多个类有相同的方法, 那么就应该把这些方法抽取到父类中定义完全相同的方法直接在父类中定义并实现, 如果只有方法签名(无方法体)一样而实现不同, 那么就可以在父类中定义抽象方法这样别人看到父类的时候就知道子类都有什么功能了, 方便他人阅读我们的代码, 也更好的支持了多态.4.抽象类细节有抽象方法的类必须声明为抽象类, 抽象类可以没有抽象方法抽象类不能创建对象子类继承抽象类时必须重写所有的抽象方法3.21 final修饰符1. final代表最终的, 可以用来修饰类, 方法, 变量.2. 被final修饰后的特点final的类不能被继承final的方法不能被重写final的变量只能赋值一次,在程序运行结束前,会一直存在与内存中.如果内部类在局部位置上,只能访问该局部中被final 修饰的变量.被final修饰的形参,第一次赋值是在调用它所在的函数时,不能再次赋值了.被final修饰的引用类型变量,不能在指向其他对象,但是他第一次指向的对象中的内容是可以改变的.final 只是修饰了引用.public static final 修饰的变量时全局变量,可以使用类名调用,名字全部大写3.22模板设计模式1.什么是模板设计模式在编程的过程当中, 如果经常要做一些类似的事, 其中某些步骤相同, 有些步骤不同, 这是就可以使用模板设计模式2.怎么使用模板设计模式定义一个抽象类定义一个final的方法在方法中写出每次相同的步骤, 不同的步骤写成抽象方法, 调用抽象方法每次实现不同的步骤时, 定义子类继承抽象类, 重写抽象方法即可, 相同的步骤无需重写直接调用final方法3.23接口1.什么是接口接口是一种特殊的抽象类2.接口和抽象类的区别抽象类用abstract class定义, 接口用interface定义抽象类中可以有不抽象的方法, 接口中所有方法都是抽象的抽象类用extends继承, 接口用implements实现抽象类可以继承抽象类, 接口可以继承接口抽象可以继承接口,接口不能继承抽象因为抽象类里面有可能会有非抽象方法..抽象类中的方法没有默认修饰符, 接口中的方法默认是public abstract修饰的抽象类中的成员变量没有默认修饰符, 接口中的成员变量默认是public static final 修饰的一个类只能继承一个抽象类, 一个类可以实现多个接口3.什么时候用抽象类, 什么时候用接口能用接口的时候就不用抽象类(没有任何不抽象的方法), 因为接口不占用继承位置如果需要定义不抽象的方法, 那么就必须使用抽象类.3.24 策略设计模式定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。
Java基础知识总结(超详细整理)
Java基础知识总结(超详细整理)Java语⾔的特点1.⾯向对象⾯向对象(OOP)就是Java语⾔的基础,也是Java语⾔的重要特性。
⾯向对象的概念:⽣活中的⼀切事物都可以被称之为对象,⽣活中随处可见的事物就是⼀个对象,我们可以将这些事物的状态特征(属性)以及⾏为特征(⽅法)提取并出来,并以固定的形式表⽰。
2.简单好⽤Java语⾔是由C和C++演变⽽来的,它省略了C语⾔中所有的难以理解、容易混淆的特性(⽐如指针),变得更加严谨、简洁、易使⽤。
3.健壮性Java的安全检查机制,将许多程序中的错误扼杀在摇蓝之中。
另外,在Java语⾔中还具备了许多保证程序稳定、健壮的特性(强类型机制、异常处理、垃圾的⾃动收集等),有效地减少了错误,使得Java应⽤程序更加健壮。
4.安全性Java通常被⽤在⽹络环境中,为此,Java提供了⼀个安全机制以防恶意代码的攻击,从⽽可以提⾼系统的安全性。
5.平台⽆关性Java平台⽆关性由Java 虚拟机实现,Java软件可以不受计算机硬件和操作系统的约束⽽在任意计算机环境下正常运⾏。
6.⽀持多线程在C++ 语⾔没有内置的多线程机制,因此必须调⽤操作系统的多线程功能来进⾏多线程程序设计,⽽ Java 语⾔却提供了多线程⽀持。
多线程机制使应⽤程序在同⼀时间并⾏执⾏多项任务,该机制使得程序能够具有更好的交互性、实时性。
7.分布式(⽀持⽹络编程)Java语⾔具有强⼤的、易于使⽤的⽹络能⼒,⾮常适合开发分布式计算的程序。
java中提供了⽹络应⽤编程接⼝(),使得我们可以通过URL、Socket等远程访问对象。
8.编译与解释共存Java语法基础标识符: ⽤来标识类名、对象名、变量名、⽅法名、类型名、数组名、⽂件名的有效字符序列。
合法的标识符:由字母、数字、下划线“_”、美元符号“$”或者“¥”组成,并且⾸字符不能是数字。
不能把java关键字和保留字作为标识符。
标识符对⼤⼩写敏感。
关键字:Java语⾔中已经赋予了特定含义的保留字: const、goto,Java版本中尚未使⽤,但以后版本可能会作为关键字使⽤变量:程序运⾏期间可以被改变的量。
java var用法
java var用法
在Java 10之后,引入了`var`关键字,可以用于局部变量的类型推断。
使用`var`关键字声明的变量,编译器会根据变量初始化的值来推断变量的类型,从而省略了显式声明变量类型的过程。
`var`关键字的用法如下:
```java
var variableName = value;
```
下面是关于`var`关键字的一些规则和注意事项:
1. `var`关键字只能用于局部变量,不能用于成员变量或方法参数。
2. 在使用`var`关键字声明变量时,必须同时进行变量的初始化操作。
3. 在一行代码中可以同时声明和初始化多个变量,每个变量都使用`var`关键字。
4. `var`关键字声明的变量是具有明确类型的,只是类型由编译器根据初始化值自动推断出来。
5. `var`关键字声明的变量只能是局部变量,不能是静态变量或实例变量。
下面是`var`关键字的一些示例:
```java
var count = 10; // int
var name = "John"; // String
var list = new ArrayList<String>(); // ArrayList<String>
var map = new HashMap<Integer, String>(); // HashMap<Integer, String>
```
使用`var`关键字能够简化代码书写,尤其是对于较长的类名。
然而,滥用`var`关键字可能会降低代码的可读性,因此,应该适度使用。
全网最详细java变量详解(变量定于及语法创建)
全⽹最详细java变量详解(变量定于及语法创建)变量的使⽤定义 变量⽤于操作系统中,实体之间的传递,把变量看作⼀个在内存空间中声明的存储位置,在调⽤变量的时候,系统会⾃动的调⽤内存中的存储位置。
在Java中,变量⼜称为字段,故字段在Java中⼜有分类。
变量命名为驼峰输⼊法:如testWord,textWordOne,testWordTwo...开头⾸单词⼤写,后⾯单词⼩写1.变量类别(变量在Java中的分类)1.1 成员变量定义 成员变量⼜称为成员字段、实例字段(实例在后⾯类对象的创建会有讲解),成员变量位于类体(Class)的区域范围内,所以它是属于类的。
在Java中创建实例字段后,成员变量也会随之在类体加载完成后进⾏堆栈(内存区域)的创建。
下⾯为创建成员变量的语法格式:class类体 {数据类型变量名; //此为创建成员变量的语法格式}1.2 局部变量定义 局部变量是在⽅法下的变量,位于⽅法块的区域内。
在⽅法调⽤的时候会进⾏创建局部变量,然后⽣成相应的空间等待执⾏调⽤。
下⾯为创建局部变量的语法格式:class类体 {数据类型变量名; //此为创建成员变量的语法格式public static void main(String [] args) {数据类型变量名; //此为创建局部变量的语法格式,位于⽅法中}}2.变量使⽤中的分类 变量在使⽤的过程中也有使⽤分类的定义。
2.1 变量在⽅法中的使⽤ 变量在⽅法标签的括号中称为“临时参数”或者“临时变量”。
实例:class类体 {public void⽅法名 (数据类型临时变量名) {//此为创建⽅法的临时变量System.out.println("输出⽅法的临时参数:" + 临时变量名);}}注:临时变量的使⽤范围(⽣命周期)只能在⽅法内使⽤。
2.2变量在类中的使⽤ 变量在类中称为成员变量(成员字段),加上修饰符之后⼜是另⼀种定义。
计算机软件Java编程特点与技术探究
计算机软件Java编程特点与技术探究目录1. 计算机软件Java编程概述 (2)1.1 Java编程语言的特点 (3)1.2 Java编程语言的发展历程 (5)1.3 Java编程语言的应用领域 (6)2. Java编程语言的基础特性 (7)2.1 Java数据类型和变量 (9)2.2 Java运算符和表达式 (10)2.3 Java流程控制语句 (11)2.4 Java异常处理机制 (13)2.5 Java数组和集合类库 (14)3. Java面向对象编程技术 (15)3.1 类和对象的概念与特征 (17)3.2 封装、继承和多态的原理与实践 (19)3.3 抽象类和接口的概念与用法 (20)3.4 内部类和匿名类的实现方式 (21)4. Java高级特性和技术应用探究 (22)4.1 Java多线程编程技术 (24)4.1.1 线程的创建与启动 (25)4.1.2 线程同步与互斥 (26)4.1.3 线程通信与队列模型 (28)4.2 Java网络编程技术 (29)4.2.1 Socket编程基础 (30)4.2.2 TCP/IP协议详解 (32)4.2.3 UDP协议详解 (34)4.3 Java图形界面编程技术 (35)4.3.1 AWT和Swing框架简介 (37)4.3.2 Java图形界面组件的使用技巧 (39)4.4 Java数据库编程技术 (41)4.4.1 JDBC连接数据库的基本方法 (42)4.4.2 SQL语句的执行与优化技巧 (44)4.4.3 JPA框架的使用实践 (45)4.5 Java Web开发技术 (46)1. 计算机软件Java编程概述Java是一种面向对象的编程语言,由Sun Microsystems公司于1995年推出。
Java具有简单、易学、跨平台、安全等特点,广泛应用于各种领域,如企业应用、移动应用、Web应用等。
Java编程语言的设计目标是让开发人员能够快速编写出稳定、可靠的软件,同时降低开发难度和维护成本。
final关键字:用来修饰类,方法,成员变量,局部变量
final关键字:⽤来修饰类,⽅法,成员变量,局部变量final 关键字:⽤来修饰类,⽅法,成员变量,局部变量
表⽰最终的不可变的
1、final修饰⼀个类
表⽰当前的类不能有⼦类,也就是不能将⼀个类作为⽗类
格式:
public final class 类名称 {
class body
}
⼀个类如果是final的,那么其中所有成员⽅法都不能被覆盖重写(因为没有⼦类),但是该类可以有⽗类
2、final关键字修饰成员⽅法
这个⽅法就是最终⽅法,也就是该类的⼦类不能覆盖重写这个⽅法
对于类、⽅法来说abstract、final不能同时使⽤,因为他们是⽭盾的,abstract的⽅法必须覆盖重写,但是final的⽅法不能覆盖重写3、final修饰局部变量
⼀旦使⽤final修饰局部变量,就不能改变,也就是⼀旦赋值不能更改,⽽且只能赋值⼀次,哪怕第⼆次赋值是⼀样的也不⾏
对于引⽤类型来说,使⽤关键字final修饰,不可变的含义就是地址值不能改变,但是该地址指向的对象的内容是可以改变的
4、final关键字修饰成员变量
对于成员变量来说,⼀旦使⽤final关键字,也是⼀样不能改变
a、和局部变量的不同点在于,成员变量有默认值,因此必须⼿动赋值
b、final的成员变量可以定义的时候直接赋值,或者使⽤构造⽅法在构造⽅法体⾥⾯赋值,但是只能⼆者选其⼀
c、如果没有直接赋值,那就必须保证所有重载的构造⽅法最终都会对final的成员变量进⾏了赋值。
java中的类变量和实例变量
java中的类变量和实例变量java中的变量分为1.局部变量;2.成员变量: 分为a.类变量, b.实例变量。
1.局部变量:局部变量声明在⽅法、构造⽅法或者语句块中;局部变量在⽅法、构造⽅法、或者语句块被执⾏的时候创建,当它们执⾏完成后,变量将会被销毁;访问修饰符不能⽤于局部变量;局部变量只在声明它的⽅法、构造⽅法或者语句块中可见;局部变量是在栈上分配的。
局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使⽤。
2.成员变量成员变量是定义在类中,⽅法体之外的变量。
这种变量在创建对象的时候实例化。
成员变量可以被类中⽅法、构造⽅法和特定类的语句块访问。
a.类变量:类变量也称为静态变量,在类中以 static 关键字声明,但必须在⽅法之外。
⽆论⼀个类创建了多少个对象,类只拥有类变量的⼀份拷贝。
静态变量除了被声明为常量外很少使⽤。
常量是指声明为public/private,final和static类型的变量。
常量初始化后不可改变。
静态变量储存在静态存储区。
经常被声明为常量,很少单独使⽤static声明变量。
静态变量在第⼀次被访问时创建,在程序结束时销毁。
与实例变量具有相似的可见性。
但为了对类的使⽤者可见,⼤多数静态变量声明为public类型。
默认值和实例变量相似。
数值型变量默认值是0,布尔型默认值是false,引⽤类型默认值是null。
变量的值可以在声明的时候指定,也可以在构造⽅法中指定。
此外,静态变量还可以在静态语句块中初始化。
静态变量可以通过:ClassName.VariableName的⽅式访问。
类变量被声明为public static final类型时,类变量名称⼀般建议使⽤⼤写字母。
如果静态变量不是public和final类型,其命名⽅式与实例变量以及局部变量的命名⽅式⼀致。
b.实例变量:实例变量声明在⼀个类中,但在⽅法、构造⽅法和语句块之外;当⼀个对象被实例化之后,每个实例变量的值就跟着确定;实例变量在对象创建的时候创建,在对象被销毁的时候销毁;实例变量的值应该⾄少被⼀个⽅法、构造⽅法或者语句块引⽤,使得外部能够通过这些⽅式获取实例变量信息;实例变量可以声明在使⽤前或者使⽤后;访问修饰符可以修饰实例变量;实例变量对于类中的⽅法、构造⽅法或者语句块是可见的。
java基础-类的定义、成员变量、方法、对象的创建与使用
java基础-类的定义、成员变量、⽅法、对象的创建与使⽤⼀.JAVA类的定义 JAVA⾥⾯有class关键字定义⼀个类,后⾯加上⾃定义的类名即可。
如这⾥定义的person类,使⽤class person定义了⼀个person类,然后在person这个类的类体⾥⾯定义person这个类应该具有的成员变量(即属性)和⽅法,如这⾥定义的int id和int age这个两个成员变量,或者叫属性,这个id表⽰⼈的⾝份证号码,⼈应该具有这个属性,age表⽰⼈的年龄,这也是⼈应该具有的。
这样就在person这个类⾥⾯定义了两个⼈应该有的属性,接下来就是定义⽅法了,这⾥定义了三个⽅法,分别是getAge()、setAge(int i)和getId(),分别⽤来获取⼈的年龄,设置⼈的年龄,获取⼈的id,getAge()⽅法获取了⼈的年龄后,将获取到的值返回,所以使⽤了return age语句,getId()⽅法也使⽤了return id语句⽤于返回获取到的id的值。
⼆. 成员变量 在JAVA⾥⾯的任何变量⾸先应该要声明,然后再赋值,然后再使⽤。
成员变量和局部变量有⼀个重要区别:成员变量在类⾥⾯声明时如果不进⾏初始化,那么JAVA会默认给它初始化,⽽局部变量JAVA不会默认给它初始化,所以在⽅法⾥⾯声明⼀个局部变量如果不给它初始化时就会出错。
默认初始化⼤多数都是0,boolean类型的为false,引⽤类型的为null,如过不记得JAVA对成员变量默认的初始化是多少的话,那就这样做,定义⼀个成员变量,不给它初始化,然后直接打印这个成员变量,打印出来的结果就是JAVA默认的初始化的值。
三、Java⾯向对象的基本概念——引⽤ 引⽤类型和基本类型有着巨⼤的区别,当声明⼀个int i=0时,系统会马上给这个i分配⼀个内存空间(在栈内存⾥⾯分配⼀⼩块区域⽤来装数字0),⾥⾯装着⼀个值为0,以后使⽤i这个名字马上就可以访问这个内存空间⾥⾯的值,这就是基本数据类型,所以基础类型就只占⼀块内存。
java基础知识大全(必看经典)
第一讲 Java语言入门1.1 Java的特点面向对象:•与C++相比,JAVA是纯的面向对象的语言C++为了向下兼容C,保存了很多C里面的特性,而C,众所周知是面向过程的语言,这就使C++成为一个"混血儿"。
而JAVA语法中取消了C++里为兼容C所保存的特性,如取消了头文件、指针算法、结构、单元等。
可移植〔平台无关性〕:•生成中间字节码指令与其他编程语言不同,Java并不生成可执行文件〔.exe文件〕,而是生成一种中间字节码文件〔.class文件〕。
任何操作系统,只要装有Java虚拟机〔JVM〕,就可以解释并执行这个中间字节码文件。
这正是Java实现可移植的机制。
•原始数据类型存储方法固定,避开移植时的问题Java的原始数据类型的大小是固定的。
比方,在任何机器上,整型都是32位,而C++里整型是依赖于目标机器的,对16位处理器〔比方8086〕,整数用两个字节表示;在像Sun SPARC这样的32位处理器中,整数用4个字节表示。
在Intel Pentium处理器上,整数类型由具体的操作系统决定:对于DOS和Win32来说,整数是2个字节;对于Windows 9x 、NT和2000,整数是4个字节。
当然,使整数类型平台无关之后,性能必然有所下降,但就Java来说,这个代价是值得的。
Java的字符串,那么采用标准的Unicode格式保存。
可以说,没有这个特性,Java的可移植性也不可能实现。
简单•JAVA在语法上与C++类似JAVA的语法与C++很接近,有过C或者C++编程经验的程序员很容易就可以学会JAVA语法;•取消了C++的一些复杂而低效的特性比方:用接口技术代替了C++的多重继承。
C++中,一个类允许有多个超类,这个特性叫做"多重继承",多重继承使得编译器非常复杂且效率不高;JAVA 的类只允许有一个超类,而用接口〔Interface〕技术实现与C++的多继承相类似的功能其它被取消的特性包括:虚拟根底类、运算符过载等•JAVA的根本解释器和类支持模块大概仅40K即使参加根本的标准库和支持线程的模块,也才220K左右。
Java简答题(背诵)
1. 在继承关系中,方法的重写要遵循“两同两小一大”规则,简述其含义。
答:“两同”即方法名相同、形参列表相同;“两小”指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常应比父类方法声明抛出的异常类更小或相等;“一大”指的是子类方法的访问权限应比父类方法更大或相等。
2. 如果在某个方法中访问名为a的变量,简述系统查找变量a的顺序。
答:先查找本方法中是否有a局部变量,再查找当前类中是否有a的成员变量,最后查找当前类的直接父类中是否包含a成员变量,依次上溯到间接父类,直到ng.Object类,如果最终不能找到,则系统出现编译错误。
3. 说明重载和重写的区别。
答:方法的重载和重写是Java多态性的不同表现。
重写是父类与子类之间多态性的一种表现,重载是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称、参数和返回值类型,就说该方法被重写。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
如果在一个类中定义了多个同名的方法,它们有不同的参数个数或不同的参数类型,则称为方法的重载。
重载的方法是可以改变返回值的类型的。
4. 说明接口和抽象类的区别。
答:·抽象类可以有构造方法,接口中不能有构造方法。
·抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的。
·抽象类中抽象方法可以指定为public,接口中抽象方法不能指定其他修饰符,固定就是public,因此可省略不写。
·抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的。
·一个类可以实现多个接口,但只能继承一个抽象类。
5. 说明= =和equals()的区别。
答:如果= =的两边都是基本类型变量或包装类对象所组成的表达式,= =用于比较两边的表达式的值是否相等。
如果= =的两边是引用类型的变量,= =用于判断这两个引用类型的变量是否引用同一块内存。
java中的成员变量、类变量,成员方法、类方法属性和方法区别
java中的成员变量、类变量,成员⽅法、类⽅法属性和⽅法区别成员变量:包括实例变量和类变量,⽤static修饰的是类变量,不⽤static修饰的是实例变量,所有类的成员变量可以通过this来引⽤。
类变量:静态域,静态字段,或叫静态变量,它属于该类所有实例共有的属性。
⽽且所有的实例都可以修改这个类变量的值(这个类变量没有被final修饰的情况),⽽且访问类变量的时候不⽤实例,直接⽤类名.的⽅式就可以。
成员⽅法:包括实例⽅法和类⽅法,⽤static的⽅法就是类⽅法,不⽤static修饰的就是实例⽅法。
实例⽅法必须在创建实例之后才可以调⽤。
类⽅法:和类变量⼀样,可以不⽤实例,直接⽤类就可以调⽤类⽅法。
类⽅法这不是⼀个名词,只是单纯的类中描述的⼀个⽅法。
加了static的⽅法,在程序中只运⾏⼀次,⽐如你两次实例化对象了,但你实际上只调⽤了⼀次static标识的⽅法。
在定义类时,经常需要抽象出它的属性,并定义在类的主体中。
下⾯就来介绍与属性相关的内容。
常量属性在类中定义的属性有常量属性和成员属性之分。
常量属性⽤final关键字修饰,常量只能赋值⼀次,在程序中不能修改它的值。
⼀般来说,在类中定义的常量属性⽤⼤写字母命名。
成员属性成员属性是抽象出来的类属性,成员属性不能直接被外部访问或修改,需要通过get和set⽅法来访问或修改属性值,成员属性⼀般⽤private 关键字修改,表明为私有成员,禁⽌外部直接访问。
成员属性的作⽤范围为整个类⽂件,作⽤范围就是成员属性的有效⼯作范围,在整个类⽂件中,成员属性都可以被访问和使⽤。
(1)使⽤默认值初始化Java为声明的成员属性或变量提供了默认初始化机制,当声明成员属性或变量时即使没有显式赋值,Java也会为以下类型的成员属性或变量提供默认值: 2)使⽤显式值初始化声明成员属性的同时,进⾏赋值。
3)使⽤类构造⽅法初始化通过类构造⽅法来初始化属性(类构造⽅法后⾯介绍)成员变量变量前⾯已经介绍过了,变量的主要作⽤是存储程序运⾏过程中的临时数据,程序退出后,变量存储的内容不再存在。
java入门---对象和类概念详解实例
java⼊门---对象和类概念详解实例Java作为⼀种⾯向对象语⾔。
⽀持以下基本概念:多态继承封装抽象类对象实例⽅法重载这篇⽂章,我们主要来看下:对象:对象是类的⼀个实例(对象不是找个⼥朋友),有状态和⾏为。
例如,⼀条狗是⼀个对象,它的状态有:颜⾊、名字、品种;⾏为有:摇尾巴、叫、吃等。
类:类是⼀个模板,它描述⼀类对象的⾏为和状态。
下图中男孩⼥孩为类,⽽具体的每个⼈为该类的对象:现在让我们深⼊了解什么是对象。
看看周围真实的世界,会发现⾝边有很多对象,车,狗,⼈等等。
所有这些对象都有⾃⼰的状态和⾏为。
拿⼀条狗来举例,它的状态有:名字、品种、颜⾊,⾏为有:叫、摇尾巴和跑。
对⽐现实对象和软件对象,它们之间⼗分相似。
软件对象也有状态和⾏为。
软件对象的状态就是属性,⾏为通过⽅法体现。
在软件开发中,⽅法操作对象内部状态的改变,对象的相互调⽤也是通过⽅法来完成。
接下来,我们来看下类。
类可以看成是创建Java对象的模板,通过下⾯⼀个简单的类来理解下Java中类的定义:public class Dog{String breed;int age;String color;void barking(){}void hungry(){}void sleeping(){}}⼀个类可以包含以下类型变量:局部变量:在⽅法、构造⽅法或者语句块中定义的变量被称为局部变量。
变量声明和初始化都是在⽅法中,⽅法结束后,变量就会⾃动销毁。
成员变量:成员变量是定义在类中,⽅法体之外的变量。
这种变量在创建对象的时候实例化。
成员变量可以被类中⽅法、构造⽅法和特定类的语句块访问。
类变量:类变量也声明在类中,⽅法体之外,但必须声明为static类型。
⼀个类可以拥有多个⽅法,在上⾯的例⼦中:barking()、hungry()和sleeping()都是Dog类的⽅法。
然后我们来看下构造⽅法。
每个类都有构造⽅法。
如果没有显式地为类定义构造⽅法,Java编译器将会为该类提供⼀个默认构造⽅法。
变量的知识点总结
变量的知识点总结什么是变量?在计算机编程中,变量是一个用来存储数据的命名内存位置。
它们允许程序员在代码中引用这些数据,而不需要知道实际的内存地址。
变量是程序中存储和操作数据的基本工具,可以是数字、字符串、数组、对象等不同类型的数据。
在大多数编程语言中,变量都有以下基本特性:•名称:变量有一个唯一的名字,用来在代码中标识和引用它。
•数据类型:变量可以存储不同类型的数据,如整数、浮点数、字符串等。
•值:变量存储的实际数据。
•作用域:变量的作用范围,即它可以被访问的代码范围。
变量的类型在大多数编程语言中,变量都有不同的类型,用来表示存储在其中的数据的特性。
常见的变量类型包括:•整数:用来存储整数值,如-10、0、100等。
•浮点数:用来存储小数值,如3.14、2.5等。
•字符串:用来存储文本字符序列,如“hello world”等。
•布尔值:用来存储真或假的值,如true或false。
•数组:用来存储一组相同类型的数据元素。
•对象:用来存储复杂的数据结构,由多个属性组成。
在一些动态类型编程语言中,变量的类型是在运行时确定的,而在一些静态类型编程语言中,变量的类型是在编译时确定的。
不同的变量类型有不同的特性和限制,程序员需要根据实际需要选择合适的类型。
声明和使用变量在大多数编程语言中,变量的声明和使用都需要遵循一定的语法规则。
通常情况下,变量需要被声明后才能被使用。
在声明变量时,需要指定变量的名称和类型,有些语言也需要初始化变量的值。
一旦声明了变量,就可以在程序中使用它来存储和操作数据。
变量的声明和使用示例(使用Python语言):```python# 声明一个整数变量num = 10# 声明一个字符串变量name = "Alice"# 使用变量进行计算result = num * 2print(result) # 输出20```在上面的示例中,我们声明了一个整数变量num和一个字符串变量name,并且使用它们进行计算和输出。
类方法成员变量和局部变量的可用修饰符权限
类方法成员变量和局部变量的可用修饰符权限在Java编程语言中,类、方法、成员变量和局部变量可以使用不同的修饰符权限来控制其可见性和访问级别。
这些修饰符权限可以分为四个类别:访问权限、非访问权限、继承性和抽象性。
以下是每个类别中可用的修饰符权限的详细讨论。
1.访问权限修饰符:- public:public是最高级别的访问权限修饰符,可以被任何类、方法、成员变量和局部变量访问。
当一个类、方法、成员变量或局部变量被声明为public时,它可以被任何类或方法访问。
- protected:protected修饰符只允许同一包中的类访问,并且可以被不同包中的子类访问。
当一个成员变量或方法被声明为protected时,它可以被访问的范围包括同一类、同一包中的类和不同包中的子类。
-默认(默认):如果没有明确指定访问权限修饰符,则默认修饰符将应用。
默认访问级别是包级别访问权限,即同一包中的类可以访问。
但是,在不同包中的类无法访问。
- private:private是最低级别的访问权限修饰符,它仅允许在同一类中访问。
当一个成员变量或方法被声明为private时,它只能在包含它的类中访问。
2.非访问权限修饰符:- final:final修饰符表示一个类、方法、成员变量或局部变量是不可更改的。
当一个类被声明为final时,它不能被继承。
当一个方法被声明为final时,它不能被子类重写。
当一个成员变量被声明为final时,它不能被修改。
当一个局部变量被声明为final时,它不能被重新赋值。
- static:static修饰符表示一个类、方法、成员变量或局部变量是静态的。
当一个成员变量被声明为static时,它成为类级别的变量,所有该类的实例共享相同的变量。
当一个方法被声明为static时,它成为类级别的方法,可以直接从类中调用,无需创建实例。
当一个类被声明为static时,它成为静态内部类,无需创建外部类的实例即可访问。
java各详细总结知识点
java各详细总结知识点一、Java语法1. 数据类型Java中的数据类型分为基本数据类型和引用数据类型。
基本数据类型包括整型,浮点型,字符型和布尔型。
引用数据类型包括类、接口、数组等。
2. 变量在Java中,变量是用来存储数据的容器。
它们可以存储不同类型的数据,例如整数、浮点数、字符等。
变量分为局部变量和成员变量。
3. 运算符Java中的运算符包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符等。
这些运算符可以实现数据的计算和比较。
4. 控制流Java中的控制流包括顺序结构、选择结构和循环结构。
通过控制流语句,程序可以根据条件执行不同的代码块,实现不同的功能。
5. 方法方法是Java中用来组织和重用代码的一种机制。
它可以细化程序的逻辑结构,并提高代码的可读性和可维护性。
6. 数组数组是一种用来存储多个相同类型数据的容器。
在Java中,数组可以是一维的、二维的甚至多维的。
使用数组可以方便地管理大量数据。
7. 字符串在Java中,字符串是一种特殊的对象类型。
Java提供了丰富的字符串处理方法,例如字符串连接、子字符串提取、字符串比较等。
8. 输入输出在Java中,通过输入输出流可以实现与外部设备的交互。
Java提供了丰富的输入输出类和方法,可以实现文件的读写、网络通信等功能。
二、面向对象编程1. 类和对象在Java中,所有的代码逻辑都是围绕类和对象展开的。
类是一种模板,描述了对象的属性和行为。
对象是类的实例,可以根据类创建多个对象。
2. 封装封装是面向对象编程的核心思想之一。
通过封装,可以将数据和行为封装在一个对象中,避免外部直接访问对象的数据。
3. 继承继承是一种代码复用的机制,可以让子类继承父类的属性和方法。
通过继承,可以实现类与类之间的层次关系,提高代码的重用性和扩展性。
4. 多态多态是面向对象编程的另一个核心概念。
通过多态,可以使不同类的对象对同一消息作出不同的响应。
多态性可以提高代码的灵活性和可扩展性。
Java语言的作用域及分类
Java语言的作用域及分类Java语言的作用域及分类在程序源码中,声明在不同地方的变量具有不同的作用域,例如:局部变量、全局变量等。
在Java语言中,作用域是由花括号“{...}”的位置决定的,它决定了其定义的变量名的可见性与生命周期。
在Java语言中,变量类型主要有三种:成员变量、静态变量和局部变量。
类的成员变量的作用范围与类的实例化对象的作用范围相同,当类被实例化时,成员变量就会在内存中分配空间并初始化,直到这个被实例化对象的生命周期结束时,成员变量的生命周期才结束。
被static修饰的成员变量称为静态变量或全局变量,与成员变量不同的是,静态变量不依赖于特定的实例,而是被所有实例所共享,也就是说,只要一个类被加载,JVM就会给类的静态变量分配存储空间。
因此,可以通过类名和变量名来访问静态变量。
局部变量的作用域与可见性为它所在的花括号内。
此外,成员变量也有四种作用域,它们的区别见下表:(1)public。
表明该成员变量或方法对所有类或对象都是可见的`,所有类或对象都可以直接访问。
(2)private。
表明该成员变量或方法是私有的,只有当前类对其具有访问权限,除此之外的其他类或者对象都没有访问权限。
(3)protected。
表明该成员变量或方法对自己及其子类是可见的,即自己和子类具有权限访问。
除此之外的其他类或对象都没有访问权限。
(4)default。
表明该成员变量或方法只有自己和与其位于同一包内的类可见。
若父类与子类位于同一个包内,则子类对父类的default 成员变量或方法都有访问权限;若父类与子类位于不同的package (包)内,则没有访问权限。
需要注意的是,这些修饰符只能修饰成员变量,不能用来修饰局部变量。
private与protected 不能用来修饰类(只有public 、abstract 或 final 能用来修饰类)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//方法里的局部变量,局部变量覆盖成员变量 int price = 65; //直接访问 price 变量,将输出 price 局部变量的值:65 System.out.println("这时 price 输出的是局部变量的值:"+price);
//使用类名作为 price 变量的限定 //将输出 price 类 Field 的值:78.0 System.out.println(VariableOverrideTest.price);
//用来调用非 static 修饰的属性
//通过 Person 对象的引用 p 来访问 Person 对象 name 实例 Field //并通过实例访问 eyeNum 类 Field
System.out.println("p 变量的 name Field 值是:" + + " p 对象的 eyeNum Field 值是:" + p.eyeNum+"\n");
从图可以看出,当 Person 类初始化完成后,系统将在堆内存中为 Person 类分配一块内存区 (当 Person 类初始化完成后,系统会隐含地为 Person 类创建一个类对象,在这块内存区里 包含了保存类属性 eyeNumr 内存,并设置 eyeNum 的默认初始值:0)
系统接着创建了一个 Person 对象,并把这个 Person 对象赋给 P1变量,Person 对象里包含了 名为 name 的实例属性,实例属性是在创建实例时分配内存空间,并指定初始值的。当创建 了第一个 Person 对象时,系统的内存图如下:
从上图可以看出,因为 eyeNum 类属性并不属于 Person 对象,它是属于 person 类的,所以 创建第一个 Person 对象时并没有为 eyeNum 类属性分配内存,系统只是为 name 实例属性分 配了内存空间,并指定默认初始值:null. 接着执行 Person p2 = new Person();代码创建第二个 Person 对象,此时因为 Person 类已经存 在于堆内存中了,所以不再需要对 Person 类进行初始化。创建第二个 Person 对象与创建第 一个 Person 对象并没有什么不同。 当程序执行 ="世界";代码时,将为 p1的 name 属性赋值,也就是堆内存中的 name 指向一个“世界”的字符串,执行完成后,两个 Person 对象在内存中的图如下:
/*****
{ //定义一个代码块局部变量 a
int a; //下面代码将出现错误,因为 a 变量还未初始化 System.out.println("代码块局部变量 a 的值:" + a);
*/ //为 a 变量赋初始值,也就是进行初始化
a = 5; System.out.println("代码块局部变量 a 的值:" + a);
//直接为 name 实例 Field 赋值 = "孙悟空";
//通过 p 访问 eyeNum 类 Field,依然是访问 Person 的 eyeNum 类 Field p.eyeNum = 2;
//再次通过 Person 对象来访问 name 实例 Field 和 eyeNum 类 Field
成员变量被分为类属性和实例属性两种,定义一个属性时不使用 static 修饰的就是实例属性, 使用 static 修饰的就是类属性。其中类属性从这个类的准备阶段起开始存在,直到系统完全 销毁这个类,类属性的作用域与这个类的生存范围相同; 而实例属性则从这个类的实例被 创建开始起存在,直到系统完全销毁这个实例,实例属性的作用域与对应实例的生存范围相 同。 提醒大家注意的是:一个类在使用之前要经过类加载、类验证、类准备、类解析、类初始化 等几个阶段。 正是基于这个原因,我们把类属性和实例属性统称为成员变量,其中类属性可以理解为类成 员变量,它作为类的一个成员,与类共存亡;实例属性则可理解为实例成员变量,它作为实 例的一个成员,与实例共存亡。 (1)只要类存在,程序就可以访问该类的类属性,在程序中访问类属性通过如下格式: 类.类属性; (2)只要实例存在,程序就可以访问该实例属性,在程序中访问实例属性通过如下格式: 实例.实例属性
System.out.println("方法局部变量 a 的值:" + a); } } 看下编译结果:
形参的作用域是整个方法体内有效,而且形参也无须显式初始化,形参的初始化在调用该方 法时由系统完成。
当通过类或对象调用某个方法时,系统会在该方法栈区内为所有形参分配内存空间,并 将实参的值赋给对应的形参,这样就完成了形参的初始化。
public class VariableOverrideTest {
//定义一个 name 实例 Field private String name = "世界";
//定义一个 price 类 Field private static double price = 78.0;
//主方法,程序的入口 public static void main(String[] args) {
与成员变量 不同的是,局部变量除了形参之外,都必须显式初始化.也就是说,必须先给方法局 部变量和代码块局部变量指定初始值,否则不可以访问它们.
看代码: public class BlockTest {
public static void main(String[] args) {
//在主方法中通过大括号定义一个局部代码块
看下编译结果:
从上面的那段程序我们可以清楚地看出局部变量覆盖成员变量,不过依然可以在方法中显式 指定类名和 this 作为调用者来访问被覆盖的成员变量,这让 我们编程时更自由。不过大部 分时间,我们还是应该尽量避免这种局部变量和成员变量同名的情形。
成员变量 的初始化和内存中的运行机制 当系统加载类或创建该类的实例时,系统自动为成员变量分配内存空间,并在分配内存空间 后,自动为成员变量指定初始值。 看代码: //创建第一个 Person 对象 Perosn p1 = new Person(); //创建第个二 Person 对象 Person p2 = new Person(); //分别为两个 person 对象的 name 属性赋值 = "世界"; = "您好"; //分别为两个 person 对象的 eyeNum 属性赋值 //在这里我是接着前面的代码接着讲的,eyeNum 是使用了 static 修饰的 p1.eyeNum = 2; p2.eyeNum = 3; 当程序执行第一行代码 Perosn p1 = new Person(); 时,如果这行代码是第一次使用 Person 类,刚系统通常会在第一 次使用 Personod 时加载这个类,并初始化这个类。在类的准备阶段,系统将会为该类的类 属性分配内存空间,并指定默认初始值。当 Person 类初始化完成后,系统内存中的存储图:
我提醒大家注意: 在同一个类里,成员变量的作用范围是整个类内有效,一个类里不能定 义两个同名的成员变量,即使一个是类属性,一个是实例也不行;一个方法里不能定义两个 同名的局部变量,即使一个是方法局部变量,一个是代码块局部变量或者形参也不行。
JAVA 允许局部变量和成员变量同名,如果方法里的局部变量和成员变量同名,局部变量会 覆盖成员变量,如果需要在这个方法里引用被覆盖的成员变量,则可使用 this(对于实例属 性)或类名(对于类属性)作为调用者来限定访问成员变量。
从上面程序中来看,成员变量无须显式初始化,只要为了一个类定义了类属性或实例属性,则 系统会在这个类的准备阶段或创建这个类的实例时进行默认初始化,成员变量默认初始化时 的赋值规则与数组动态初始化时数组元素的赋值规则完全相同. 这时我们发现类属性的作用域比实例属性的作用域更大:实例属性随实例的存在而存在,而类 属性则随类的存在而存在.实例也可访问类属性,同一个类的所有实例访问类属性时,实际上 访问的是同一个类属性,因为它们实际上都是访问该类的类属性. 局部变量: 根据定义形式的不同,分为三种: 形参:在定义方法签名时定义的变量,形参的作用域在整个方法内有效. 方法局部变量:在方法体内定义的局部变量,它的作用域是从定义该变量 的地方生效,到该方 法结束时消失 代码块局部变量:在代码块中定义的局部变量,这个局部变量的作用域从定义该变量的地方生 效,访问的 a 变量并不存在
System.out.println(a);
//因为变量 a 的作用域只在代码块中有效
}
}
从程序的运行结果可以看出,只要离开了代码块局部变量所在的代码块,则这个局部变量将 立即被销毁,变为不可见。
对于方法局部变量,其作用域从定义该变量开始,直到该方法结束。 public class MethodLocalVariableTest {
//Person 类已经初始化了,则 eyeNum 变量起作用了,输出0 System.out.println("Person 的 eyeNum 类 Field 值:" + Person.eyeNum+"\n"); //因为是类的 field(eyeNum)所以可以直接调用
//创建 Person 对象 Person p = new Person();
public static void main(String[] args) {