DAY5/6总结:面向对象
来源:互联网 发布:淘宝讲师爱上黄昏 编辑:程序博客网 时间:2024/06/03 03:45
this关键字:
package thisdemo;/* * this关键字: * * this看上去,是用于区分局部变量和成员变量同名情况 * this到底代表的是什么呢? * * * this就代表本类的对象,到底代表哪一个呢? * this代表它所在函数所属对象的引用 * 简单说,叫做,哪个对象在调用this所在的函数,this就代表哪个对象 * * this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,用this来表示这个对象 * 但凡是本类功能内部使用了本类对象,都用this表示 * */public class Person {
package thisdemo;public class PersonDemo { public static void main(String[] args) { Person p1=new Person(20); Person p2=new Person(28); boolean b=p1.compare(p2); System.out.print(b); //Person p=new Person("lisi"); //Person p1=new Person("zhangsan"); //p.speak();//speak这个方法此时属于p这个对象,所以打印的是p里的name,age //p1.speak();//speak这个方法此时属于p1这个对象,所以打印的是p1里的name,age // }}
package thisdemo;/*this语句:用于构造函数之间进行互相调用只能定义在构造函数的第一行*/public class Person1 { private String name; private int age; Person1() { } Person1(String name) { this(); this.name=name; }
package thisdemo;public class PersonDemo1{ public static void main(String [] args) { Person1 p=new Person1("lisi",30); }}
static关键字:
package staticdemo;/* * 静态static: *用法:是一个修饰符,用于修饰成员(成员变量和成员函数) *当成员被静态修饰后,就多了一种调用方式, *除了可以被对象调用外,还可以直接被类名调用。类名.静态成员 * * * static特点: * 1.随着类的加载而加载,随着类的消失而消失。说明生命周期最长 * 2.优先于对象存在。静态是先存在的,对象后存在 * 3.被所有对象共享 * 4.可以直接类名调用 * * * 实例变量和类变量的区别: * 1.存放位置: * 类变量随着类的加载而存在于方法区中;实例变量随着对象的建立而存在于堆内存中 * 2.生命周期 * 类变量生命周期最长,随着类的消失而消失;实例变量生命周期随着对象的消失而消失 * 3.主函数是静态的 * * 静态使用注意事项: * 1.静态方法只能访问静态成员(包括变量和方法) * 2.非静态方法既可以访问静态,也可以访问非静态 * 3.静态方法中不可以定义this/super关键字 * * * 有利弊: * 利:对对象的共享数据进行单独空间的存储,节省 * 可以直接被类名调用 * 弊:生命周期过长 * 访问出现局限性,只能访问静态 * */class Person//Person类一加载到内存中,country就在内存中开辟了空间{ String name;//成员变量,实例变量,随着对象存在而存在 static String country="CN";//静态成员变量,类变量,随着类的存在而存在 public void show() { System.out.print("name="+name+","+country); }}
package staticdemo;public class StaticDemo { public static void main(String [] args) { Person p=new Person(); p.name="lisi"; p.show(); System.out.println(Person.country); System.out.println(p.country); }}/* 什么时候使用静态:静态修饰的内容有成员变量和成员函数 * 什么时候定义静态变量呢? * 当对象中出现共享数据(不是共享属性)时,对象中的特有数据要定义成非静态存在于堆内存中 * * * 什么时候定义静态函数呢? * 当功能内部没有访问到非静态数据(对象的特有数据) * * * */
package staticdemo;/*主函数:是一个特殊的函数,可以被jvm调用,作为程序的入口 *定义: * public:代表该函数的访问权限是最大的 * static:代表着主函数随着类的加载就已经存在 * void:对主函数没有具体的返回值 * main:不是关键字,但是是特殊的单词可以被jvm识别 * String[] arr:主函数的参数,参数类型是一个数组,数组中的元素是字符串,存储字符串类型的元素的数组 * * 主函数是固定格式的:jvm识别 * * jvm在调用主函数时,传入的是new String[0]; * */class MainDemo { public static void main(String[] args)//new String[] { System.out.print(args.length); } public static void main(int x) { }}
构造函数:
package gouzaohanshu;/*对象一建立就会调用与之对应的构造函数 * 构造函数的作用:可以用于给对象进行初始化 * 对象调用与之对应的构造函数 * * 构造函数的小细节: * 当一个类中没有定义构造函数时,那么系统将会默认给类加入一个空参数的构造函数 * 在类中自定义了构造函数后,默认的构造函数就消失 * * 构造函数和一般函数在写法上不同,在运行上也有不同,构造函数是在对象一建立就运行 * 而一般方法是对象调用才执行,是给对象添加对象具备的功能 * 一个对象建立,构造函数只运行一次 * 而一般方法可以被该对象调用多次 * * 什么时候定义构造函数:当分析事物时,该事物存在就具备一些特性或者行为 * * */ class Person{ private String name; private int age; private String sex; Person()//不定义构造函数时,系统会自动加一个,方便该类进行初始化,否则对象无法建立 { System.out.println("name="+name+",age="+age); //cry(); } Person(String n) { name=n; System.out.println("A:name="+name+",age="+age); //cry(); } public void setName(String n) { name=n; } public String getName() { return name; } Person(String n,int a)//人这类事物,所产生的对象在初始化时可能不一样 { name=n; //初始化方式可能不一样,所以定义不同的构造函数 age=a; System.out.println("name="+name+",age="+age); //cry(); } public void cry() { System.out.println("cry........"); }}
package gouzaohanshu;public class PersonDemo { public static void main(String[] args) { Person p1=new Person();//对象调用与之对应的构造函数, p1.cry();//一般方法可以被调用多次 p1.cry(); Person p2=new Person("lisi");//一个类能产生n多对象,对象都可以对应 p2.setName("libusi"); p2.setName("haishilisi");//可以被调用多次 System.out.println(p2.getName()); //Person p2=new Person("libusi");//改的不是lisi的名字,是别人的,所以不能这样改名 //Person p3=new Person("wangwu",10);//不一样的初始化方式 // 把p2 p3注释掉,还有空参数构造函数也注释掉,编译失败,因为找空参数的构造函数初始化,可是Person类中没有 }}
初始化:
package initialize; //对象的初始化过程 public class Person { private String name="haha"; private int age; private static String country="country"; Person(String name,int age) { this.name=name; this.age=age; } { System.out.print(name+".."+age); } public void setName(String name) { this.name=name; } public void speak() { System.out.print(this.name+".."+this.age); } public static void showCountry() { System.out.print("country="+country); } }
package initialize;public class PersonDemo { public static void main(String[] args) { Person p=new Person("zhangsan",20); p.setName("lisi"); /*对象建立后,属性初始化,首先默认初始化null和0,然后显示初始化,然后构造代码块初始化,然后构造函数初始化 * Person p=new Person(); * 该句话都做了什么? * 1.因为new用到了Person.class文件,所以会先找到Person.class文件并加载到内存中 * 2.执行该类的static代码块(如果有的话)给Person.class类进行初始化 * 3.在堆内存中开辟空间,分配内存地址 * 4.在堆内存中建立对象的特有属性并进行默认初始化 * 5.对属性进行显示初始化 * 6.对属性进行构造代码块初始化 * 7.对对象进行对应的构造函数初始化 * 8.将内存地址赋给栈内存中的P变量 * * * * */ }}
阅读全文
0 0
- DAY5/6总结:面向对象
- Python的学习笔记DAY5---面向对象
- DAY5总结
- 自学 java 笔记 day5(面向对象1)
- day5 面向对象编程思想 面向对象编程的特点 对象的创建和初始化 方法的调用
- DAY5:JAVASCRIPT对象创建
- Java 基础总结 6 --- 面向对象
- Java基础总结6--面向对象2
- Oracle day5 总结
- 多线程学习总结 day5
- 夏令营day5总结
- day5-java&oracle总结
- day5上午总结
- day5下午总结
- 面向对象程序设计总结
- 面向对象总结
- 面向对象常见问题总结
- 面向对象概念总结
- 202. Happy Number
- Java String中的==和equals()
- 最基础的poj迷宫问题及基本态度
- The summary of the fifteenth week of the first term of master's degree
- 自定义控件1_切换按钮
- DAY5/6总结:面向对象
- redis你不得不知道的故事 分布式锁三大注意事项
- 461. Hamming Distance
- 【Codeforces Round 333 (Div 2)E 期望DP概率
- Mac OS 添加右键谷歌翻译服务
- 心情日志
- Java中的static关键字解析
- 组合数取模之逆元
- 通过RestTemplate调用外部服务