java基础9 main函数、this、static、super、final、instanceof 关键字
一、main函数详解
1.public:公共的.权限是最大的,在任何情况都可以访问
原因:为了保证jvm在任何情况下都可以访问到main法
2.static:静态,静态可以让jvm调用更方便,不需要用对象调用
3.void:没有返回值.因为返回的数据是给jvm,而jvm使用这个数据是没有意义的,所有就不要了
4.main:函数名, 注意:main方法并不是关键字,只不过是jvm唯一识别的一个特殊函数名
5.arguments(args):担心某些程序启动时需要参数.
class Demo1 {public static void main(String[] args) {System.out.println("Hello World!");} }
二、this关键字
2.1 this 的概述
this关键字代表是对象的引用。也就是this在指向一个对象,所指向的对象就是调用该函数的对象引用。(this关键字代表了所属函数的调用对象)
2.2 this关键字的作用
1.如果存在同名的局部变量和成员变量时,在方法内部默认访问的是局部变量的数据
可以通过this关键字指定访问成员变量的数据
2.this关键字在构造函数中不能出现相互调用,因为是一个死循环。
class Student{int id; //身份证 (成员变量)String name;//名字 (成员变量)//目前情况:存在同名的局部变量和成员变量,在方面内部默认使用的局部变量的.public Student(int id,String name){//局部变量this.name = name;//把局部变量name的数据传给成员变量namethis.id = id; } } class Demo8 {public static void main(String[] args) {Student s=new Student(12580,"王麻子"); System.out.println(s.id+"\t"+s.name);} }
2.3 this关键字要注意的事项
1.如果在一个方法中访问一个变量时,该变量只存在成员变量的情况下,那么java编译器会自动在该变量前添加this关键.
2.this只能在非静态(没有static修饰的)函数中使用.
3.在一个构造函数中如何调用另一个构造函数的格式: this()无参构造器,this(参数...)有参构造器......。
一个构造器调用另一个构造器(方法/函数): this()关键字必须位于第一个语句,否则编译错误
class Student{int id; String name;//目前情况:存在同名的局部变量和成员变量,在方面内部默认使用的局部变量的.public Student(int id,String name){//全参构造器 this(name);//调用的是:含有参数name的构造器this.name = name;this.id = id;}//无参构造器public Student(){} //含一个参数的构造器public Student(String name){this.name=name;//把局部变量给了成员变量name } } class Demo8 {public static void main(String[] args) {Student s=new Student(250,"王麻子"); System.out.println(s.id);} }
三、static关键字
3.1 static修饰成员变量时
static修饰成员变量时,那么该成员变量数据就是一个共享数据;
静态成员的访问方式:
方式一: 使用对象进行访问
对象.变量名
方式二: 使用类名进行访问
类名.变量名
注意:
非静态成员变量,只能使用对象进行访问,不能使用类名访问。千万不要为了方便访问变量而使用static修饰,一定要是该数据是共享的数据时才使用static修饰
3.2 static修饰方法(静态成员方法)
静态方法的访问方式:
方式一: 可以使用对象调用
对象.静态的方法名();
访问方式二: 可以使用类名调用
类名.静态方法名();
class Student{String name;static String country="中国";//静态方法(函数)public static void study(){System.out.println(country+"努力学习");}//有参构造器public Student(String name){this.name=name;}//无参构造器public Student(){}//普通方法(函数)public void eat(){System.out.println(country+name+"努力学习");} }class Demo9 {public static void main(String[] args) {Student s=new Student("铁蛋");s.eat();//用对象名调用Student.study();//用类名直接调用 s.study();Student s1=new Student();s1.name = "狗娃";//用对象名调用Student.name = "狗蛋";//用类名直接调用;此处报错,原因:成员变量name不是静态变量,静态方法不能直接用类名调用,要用对象名调用System.out.println(s1.name+"\t"+Student.country); //Student.country:不报错的原因:因为country是静态成员变量,所以可以用类名调用 } }
3.3 静态的成员变量和非静态的成员变量区别
1.作用上区别:
1.静态成员变量的作用共享一个数据给所有对象使用
2.非静态成员变量的作用是描述一类事物的公共属性
2.数量与存储的位置的区别:
1.静态成员变量存储在方法区内存中,而且只会存储一份数据
2.非静态成员变量存储在堆内存中,有n个对象就会有n份数据
3.生命周期的区别:
1.静态的成员变量数据是随着类的加载而存在,随着类文件的消失而消失
2.非静态的成员变量数据是随着对象的创建而存在,随着对象的消失而被垃圾回收器回收掉
3.4静态函数要注意的事项
1.静态函数可以通过类名或者对象进行访问,而非静态的只能通过对象进行访问.
2.静态的函数是可以直接访问静态的成员的,但是不能访问非静态的成员;
原因:静态成员可以直接使用类名调用,这个时候可能还没有存在对象,
而非静态的成员是随着对象的创建而存在的
3.非静态的函数是可以直接访问静态和非静态的成员的.
原因:非静态函数只由对象调用,当对象存在时,静态的数据老早就存在了,
而非静态的数据也随着对象的创建而存在了
4.静态函数不能出现this或者super关键字
原因:因为静态函数是可以使用类名调用的,一旦使用类名调用,这个时候可能不存在对象,而this
关键字代表了一个函数的调用者对象,这个时候就会产生冲突
3.5 静态数据生命周期
静态的成员变量数据是先于对象存在的
四、super关键字
4.1、概念:
super关键字代表了父类空间的引用
4.2、super关键字的作用
1.子父类中存在这同名的成员时,在子类中默认访问子类的成员,可以通过super关键字访问父类指定父类成员
2.创建子类对象时,默认调用父类的无参构造器,可以通过super关键字调用父类中有参构造器
4.3、super关键字调用父类的构造方法时,要注意的事项
1.在子类的构造器中没有指定调用父类的构造方法,那么编译器会在子类构造器中默认添加一个super()
2.super关键字调用父类构造函数时,该语句必须要是子类函数的第一语句
3.super关键字与this关键字不能同时出现在一个构造函数中调用其他构造函数.因为两个语句都需要是第一个语句(第一行)
五、super关键字与this关键字的区别
1.代表的事物不一致
1.super关键字代表的是父类空间的引用.
2.this关键字代表是所属函数的调用对象.
2.使用的前提不一样
1.super关键字必须要有继承关系才能使用
2.this关键字不需要存在继承关系也可以使用
3.调用构造函数的区别
1.super关键字是调用父类的构造函数
2.this关键字是调用本类的构造函数.
//例子:super和this关键字 1 class Fu{ 2 int x=10; 3 String name; 4 5 public Fu(){ 6 System.out.println("父类无参构造器...."); 7 } 8 public Fu(String name){ 9 this.name=name; //把局部变量name的数据传给成员变量name 10 } 11 public void eat(){ 12 System.out.println("小头爸爸吃番薯......."+name); 13 } 14 } 15 16 class Zi extends Fu { 17 int x=20; 18 int num; 19 public Zi(){ 20 System.out.println("这是子类无参构造器..."); 21 } 22 public Zi(String name,int num){ 23 super(name); //指定调用父类的一个参数的构造器 24 super.eat();//调用父类中的eat() 方法 25 26 } 27 28 public void eat(){ 29 System.out.println("大头儿子吃龙虾...."+super.x+"\t"+name); //和this关键字的用法相似,这里(super.x)调用的是父类中的成员变量x,返回结果:10;去掉super关键字,返回结果:20 (就近原则) 30 } 31 } 32 class Demo7{ 33 public static void main(String[] args) { 34 Zi z=new Zi("二狗子",2); 35 z.eat(); //这里调用的是子类的eat()方法 36 } 37 }
结果图:
解析:
第一条结果:是子类实例化对象后(Zi z = new Zi("二狗子",2);),调用了子类的有参构造器(含两个参数的构造器),有参构造器的 “super(name)”再去调用父类中的含一个参数的构造器,才返回的第一条结果。
第二条结果:是直接调用子类中的 eat() 方法。(super.x)调用的是父类中的成员变量x,返回结果:10;去掉super关键字,返回结果:20 (就近原则);
由于super(name)调用父类中的含一个参数的构造器,所以,相当于子类间接继承了父类中的含一个参的构造器,故name也有父类一样的值。
六、final 关键字
常量修饰符一般为:public static final
例如:public static final double PI = 3.14; //圆周率
(注:常量的命名规范:
全部字母都要大写,单词与单词之间 使用下划线分割。)
final 关键字注意事项:
1.final关键字修饰一个基本类型的变量时,该变量不能重新赋值,第一次的值为最终值
2.final关键字修饰一个引用类型时,该变量不能重新指向新的对象.
3.final关键字修饰一个函数时,该函数不能被重写
4.final关键字修饰一个类时,该类就不能被继承
注:(基本类型包括:基本数据类型和引用数据类型,在java里面除去基本数据类型的其它类型都是引用数据类型,自己定义的class类都是引用类型,可以像基本类型一样使用。)
七、instanceof 关键字
1、instanceof关键字的作用
判断一个对象是否属于指定类型
2、instanceof使用的前提
判断对象与指定的类型必须是继承或者实现关系
3、instanceof的格式
对象 instanceof 类别
4、运用场景
多态
//需求,定义一个函数可以接收任意类型的动物对象,在函数的内部要调用到动物特有的方法//instanceofpublic static void print(Animal a){ //相当于:Animal a=new Fish();if(a instanceof Fish){Fish f=(Fish)a;f.bubble();}else if(a instanceof Mouse){Mouse m=(Mouse)a;m.dig();}else{System.out.println("输入错误");}}
解析:当实例化一个对象:
Animal a=new Mouse("米老鼠"); //多态,父类的引用指向子类的对象
a.run();
//a.dig(); //报错,因为是多态(父类中没有dig()方法),所以要强制转换类型
Mouse m=(Mouse)a; //强制类型转换
m.dig();
完整例子:
1 //动物类 2 abstract class Animal{ 3 String name; 4 public Animal(String name){ 5 this.name=name; 6 } 7 8 public abstract void run(); //抽象方法 9 } 10 //老鼠类 11 class Mouse extends Animal{ 12 public Mouse(String name){ 13 super(name); 14 } 15 public void run(){ 16 System.out.println(name+"四条腿慢慢走"); 17 } 18 19 public void dig(){ 20 System.out.println(name+"老打洞..."); 21 22 } 23 } 24 //鱼类 25 class Fish extends Animal{ 26 public Fish(String name){ 27 super(name); 28 } 29 public void run(){ 30 System.out.println(name+"摇着尾巴游啊游..."); 31 } 32 public void bubble(){ 33 System.out.println(name+"吹泡泡...."); 34 } 35 } 36 37 class Demo6 { 38 public static void main(String[] args) { 39 Animal a=new Mouse("米老鼠");//多态,父类的引用指向子类的对象 40 a.run(); 41 //a.dig();报错 42 //调用 43 Mouse m=(Mouse)a;//强制类型转换 44 m.dig(); //如果直接用a.dig()的话,会报错,因为是多态(父类中没有dig()方法),所以要强制转换类型 45 46 Animal a1=new Fish("金枪鱼"); 47 Fish f=(Fish)a1; 48 print(f); 49 } 50 51 //需求,定义一个函数可以接收任意类型的动物对象,在函数的内部要调用到动物特有的方法 52 //instanceof 53 public static void print(Animal a){ //相当于:Animal a=new Fish(); 54 if(a instanceof Fish){ 55 Fish f=(Fish)a; 56 f.bubble(); 57 }else if(a instanceof Mouse){ 58 Mouse m=(Mouse)a; 59 m.dig(); 60 }else{ 61 System.out.println("输入错误"); 62 } 63 } 64 }
八、其他java关键字
1、super和extends关键字:http://www.cnblogs.com/dshore123/p/8805436.html
2、break和continue关键字:http://www.cnblogs.com/dshore123/p/8656779.html
3、abstract关键字:http://www.cnblogs.com/dshore123/p/8867093.html
4、interface、implements关键字:http://www.cnblogs.com/dshore123/p/8873647.html
5、throw、throws、finally关键字:http://www.cnblogs.com/dshore123/p/8927993.html
原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:http://www.cnblogs.com/dshore123/p/8744330.html 欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!) |
检测语言世界语中文简体中文繁体丹麦语乌克兰语乌兹别克语乌尔都语亚美尼亚语伊博语俄语保加利亚语僧伽罗语克罗地亚语冰岛语加利西亚语加泰罗尼亚语匈牙利语南非祖鲁语卡纳达语印地语印尼巽他语印尼爪哇语印尼语古吉拉特语哈萨克语土耳其语塔吉克语塞尔维亚语塞索托语威尔士语孟加拉语宿务语尼泊尔语巴斯克语布尔语(南非荷兰语)希伯来语希腊语德语意大利语意第绪语拉丁语拉脱维亚语挪威语捷克语斯洛伐克语斯洛文尼亚语斯瓦希里语旁遮普语日语格鲁吉亚语毛利语法语波兰语波斯尼亚语波斯语泰卢固语泰米尔语泰语海地克里奥尔语爱尔兰语爱沙尼亚语瑞典语白俄罗斯语立陶宛语索马里语约鲁巴语缅甸语罗马尼亚语老挝语芬兰语苗语英语荷兰语菲律宾语葡萄牙语蒙古语西班牙语豪萨语越南语阿塞拜疆语阿尔巴尼亚语阿拉伯语韩语马其顿语马尔加什语马拉地语马拉雅拉姆语马来语马耳他语高棉语齐切瓦语 | 世界语中文简体中文繁体丹麦语乌克兰语乌兹别克语乌尔都语亚美尼亚语伊博语俄语保加利亚语僧伽罗语克罗地亚语冰岛语加利西亚语加泰罗尼亚语匈牙利语南非祖鲁语卡纳达语印地语印尼巽他语印尼爪哇语印尼语古吉拉特语哈萨克语土耳其语塔吉克语塞尔维亚语塞索托语威尔士语孟加拉语宿务语尼泊尔语巴斯克语布尔语(南非荷兰语)希伯来语希腊语德语意大利语意第绪语拉丁语拉脱维亚语挪威语捷克语斯洛伐克语斯洛文尼亚语斯瓦希里语旁遮普语日语格鲁吉亚语毛利语法语波兰语波斯尼亚语波斯语泰卢固语泰米尔语泰语海地克里奥尔语爱尔兰语爱沙尼亚语瑞典语白俄罗斯语立陶宛语索马里语约鲁巴语缅甸语罗马尼亚语老挝语芬兰语苗语英语荷兰语菲律宾语葡萄牙语蒙古语西班牙语豪萨语越南语阿塞拜疆语阿尔巴尼亚语阿拉伯语韩语马其顿语马尔加什语马拉地语马拉雅拉姆语马来语马耳他语高棉语齐切瓦语 |
选项 : 历史 : 反馈 : Donate | 关闭 |
转载于:https://www.cnblogs.com/dshore123/p/8744330.html
java基础9 main函数、this、static、super、final、instanceof 关键字相关推荐
- java基础2:this、static、final、abstract关键字、代码块、生成API工具包、继承、多态、方法重载和重写,抽象类、接口、常见异常、java权限修饰符、选择排序思想和程序和内部类
1.this关键字 this表示当前类对象的地址空间值的引用.就是说,this代表了new出来的对象 其最大作用就是解决了构造器中局部变量隐藏成员变量.即用this.变量名 = 变量名 区分. 2.s ...
- java基础之main方法解读:java的主函数
java基础之main方法解读: 一.深入理解main方法:(由java虚拟机调用) 解释main方法的形式:public static void main (String [] args){} 1. ...
- [C/C++基础知识] main函数的参数argc和argv
该篇文章主要是关于C++\C语言最基础的main函数的参数知识,是学习C++或C语言都必备的知识点.不知道你是否知道该知识?希望对大家有所帮助. 一.main()函数参数 通常我们在写主函数时都是vo ...
- Java基础之extends-继承(以及this/super,重写的特性)
Java中提供了一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起继承关系 public class Student extends Person{} Student在这称为子类 ...
- java的主函数在哪_打开一个别人的文件,一堆.java, 怎么知道main函数在哪里?
展开全部 向下边用java开发的一个计32313133353236313431303231363533e78988e69d8331333236356634数器的程序 它的文件名用计算器.java 用记 ...
- Java基础篇:如何理解static
通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例.在成员的声明前面加上关键字static(静态的)就能创建这样的成员. 如果一个成员被声明 ...
- JAVA基础语法:函数(方法)、类和对象
文章目录 函数 static修饰符 类和对象 了解其他JAVA 常用API和算法点这里 >> https://blog.csdn.net/GD_ONE/article/details/10 ...
- Java中的main( )函数
在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方 法有很大的不同,比如方法的名字必须是main,方法必须 ...
- 入门系列:基础认知——main函数参数说明
说明: 本文章旨在总结备份.方便以后查询,由于是个人总结,如有不对,欢迎指正:另外,内容大部分来自网络.书籍.和各类手册,如若侵权请告知,马上删帖致歉. QQ 群 号:513683159 [相 ...
最新文章
- python建立文件数据库_Python创建CRNN训练用的LMDB数据库文件
- 检索 COM 类工厂中 CLSID 为 { } 的组件时失败,原因是呈现以下错误: 80040154
- IfSpeed 带宽计算
- 神器在手,代码命名从此高大上!
- android.mk ndk编译选项优化,Android NDK 编译脚本分析 之一
- 用好这个新功能,报表数据安全瞬间提升一个等级!
- php全选帖子删除,用PHP实现全选全删
- webstorm代码行数统计_来测试下 2019 你一共写了多少行代码?
- 【340天】我爱刷题系列099(2018.01.11)
- CentOS7中密码登录失败锁定设置
- 批量创建邮箱通讯组及向通讯组批量添加成员
- DIV 粘贴插入文本或者其他元素后,移动光标到最新处
- PHP处理CSV表格文件的常用操作方法是怎么样呢
- paip.php 与js 的相似性以及为什么它们这么烂还很流行。。
- 冲着名为Sundy的男人去麦子学院
- 热血传说复古传奇老显示服务器维护,《复古传奇之热血传说》新系列地图,新的装备即将出现...
- 一键抓取网页的所有图片
- Centos 7 制作Oracle 12c Docker Images
- 搜狗微信指数上线 全面直观反映微信热点趋势
- 如何彻底解决浏览器导航被劫持为www.hao123.com