2--java面向对象语法学习(部分1-变量,重载,重写)
来源:互联网 发布:博微配网设计软件 编辑:程序博客网 时间:2024/04/27 22:34
1. 变量方法初始化顺序
字段(类的属性值) –> 构造函数 –> 方法(调用时加载)
不论变量放在哪儿都会先于任意一个方法的执行前执行,包括构造方法,而构造方法是一个类必须
会执行的方法,不需要显示的进行调用。同时,不论变量在哪儿分布,只要在方法外部,就一
定先于方法初始化。
**测试小案例:**public class Person { public Person(int id) { System.out.println("person(" + id + ")"); } public static void main(String[] args) { Build b = new Build(); } } class Build { Person p1 = new Person(1); public Build() { System.out.println("this is build's block!"); Person p2 = new Person(2); } Person p3 = new Person(3); } 输出结果: person(1) person(3) this is build's block! person(2)
———-**2.初遇静态关键字static**——————-特点:
(1)只在装载时(装入.class文件后)初始化一次,
(2)外部对象引用:可以通类名直接访问
测试小案例:
public class Person { /*静态块*/ static{ System.out.println("this is static block!"); } /*非静态块*/ { System.out.println("this is non-static block!"); } public Person(int id) { System.out.println("person(" + id + ")"); } public static void main(String[] args) { Person p1 = new Person(1); Person p2 = new Person(2); } } 输出结果: this is static block! this is non-static block! person(1) this is non-static block! person(2)
Java程序执行顺序
静态块 –> 构造方法 –> 静态属性 –> 非静态块 属性 –> 构造器
1、先装载.class文件,创建Class对象,对静态数据(由static声明的)进行初始化,
而且只进行一次初始化。(如果有父类,先加载父类的静态快 静态变量)
2、new Build()在堆上进行空间分配。创建时执行构造方法,先父后子
3、执行非静态块。
4、执行所有方法外定义的变量的初始化。
5、执行构造器
非静态方法不加载,使用时加载
父类静态 –> 子类静态 –> 父类构造方法 –> 子类构造方法
3.属性:
类中的属性一般分为类属性(全局变量)、实例属性(全局变量)、局部属性(局部变量)。(名称可以不一样,意思到就好)
类属性:
前面已经说过就是那些声明为static的属性,在整个过程中只进行一次初始化,在内存中只开辟一个空
间,不论在哪儿调用,值保持一致。一旦被修改,所有引用它的地方都会跟着修改。一般直接通过类名进行调用。
实例属性:
实例变量是可以不进行初始化,比如一个整型的实例变量假如没有初始化,则默认值为0;而局部变量
假如不赋初值语法上是通过的,但是在使用这个变量是程序就报错了。实例变量在堆和栈中都分配内存空间,在
堆当中分配的是对象本身,而栈中则是对这个对象的引用。
局部属性:
局部变量是在方法内部声明的变量,生命期仅在方法内,方法结束后变量就消失了;局部变量必须初始化再使用,
否则会报错,也就是说,假如你在方法内定义了一个局部变量,并且没有赋值,那么你在使用这个变量的时候一定
得赋值,不然就报错了。同时,局部变量可屏蔽全局变量。
4.重载:
指在同一个类中,具有相同的方法名,不同的参数列表的方法之间的一种机制。
参数列表的不同体现在:类型不同、个数不同、顺序不同,只要满足任一一个,就可以进行方法重载。
重载的好处:
增强了程序的可读性和易于维护,当有很多个功能相似的方法的时候,如果我们为每个方法设计一个名称,
想通过名称来区分它们的话,会很糟糕,而且会让人觉得程序的可读性差,设计不够巧妙
注意:试图通过返回值来进行方法重载是不正确的! 会报错,,原因,无法确定该调用那个方法
5.重写:
重写是在继承中存在的,在两个类(子类和父类之间存在的关系)中,子类重写父类的方法,
方法名相同,参数也相同的一种机制。与重载类似,重写是写和父类相同方法名和相同参数的方法,对父类方法进行覆盖
public class B extends A { public String a(String name) { return "welcome to you :" + name; } } class A { public String a(String name){ return "hello:"+name; } }
6.类与对象的关系:
public class B { public static void main(String[] args) { B b = new B(); A a = new A(); } } class A { }
1、类是一类具有相同属性的事物的统称,是一种抽象。
2、对象是类的具体体现,又称实例。
3、类是一种静态的概念,而对象是一种动态的机制。
测试用例:package ObjectTest;public class StrdyObject { public static void main(String[] args) {// Test2 test2 = new Test2("学习java");// test2.parents(10);// test2.parents(20);// System.out.println(Test2.intI);// System.out.println(test2.intI); Test2 test2 = new Test2(); test2.studyRewrite(100,102); test2.studyIndefinite("ddd","mmm","kkl"); }}/** * * java程序执行顺序测试 * @author 郑思林 * */class Parents{ /* * java执行顺序测试 * */// static Parents parents = new Parents("父类中的Test2中字段实例化静态");// static{// System.out.println("父类中的static块中的内容");// }// static int i = 100;// // public final void parents(int t){// //int i = 100;// i = i + t;// System.out.println("静态成员方法 " + i);// }// // public Parents(String string) {// System.out.println(string);// }// // public Parents() {// System.out.println("parents中的构造方法");// //Test2 test2 = new Test2("新建对象");// } public void studyRewrite(int i){ System.out.println(i); } public void studyRewrite(int i,int j){ System.out.print(i + j); }}class Test2 extends Parents{ /* * java执行顺序测试 */// static int intI = 10;// static{ // System.out.println("子类中的static块中的内容");// }// // static Parents parents = new Parents("Test2中字段实例化静态");// Parents test1 = new Parents("Test2中字段实例化");// public Test2(String string) {// System.out.println(string);// } /* * 重写测试 */// public void studyRewrite(int i,int t){// System.out.println(i+10);// } /* * 不定参数测试 */ public void studyIndefinite(String ...strings) { System.out.println(strings[1]); }}/* * final 和 abstract 只能用一个 *///final abstract class abstractClass{// //}/* * 执行顺序测试 */// class Person { // // public Person(int id) { // System.out.println("person(" + id + ")"); // } //} //public class StrdyObject { // static // /*静态块*/ // { // int staticint = 100;// System.out.println("this is static block!"); // } // /*非静态块*/ // { // System.out.println("this is non-static block!"); // } // Person p1 = new Person(1);//------------1----------- // // public StrdyObject() { // System.out.println("this is build's block!"); // Person p2 = new Person(2); // } // // Person p3 = new Person(3); // // public static void main(String[] args) { // StrdyObject b = new StrdyObject(); // // } //}
- 2--java面向对象语法学习(部分1-变量,重载,重写)
- Java面向对象(重写和重载)学习笔记1
- 【学习笔记08】java面向对象-方法重写、重载、instanceof
- 3.java面向对象语法学习(部分2-抽象类,接口,内部类)
- Java面向对象(二)重写(Override)与重载(Overload)
- Java面向对象(构造器、访问控制、重写重载)
- java面向对象(四)之重写、重载
- Java面向对象之重载和重写
- Java面向对象-9.重载和重写
- 4.java面向对象语法学习(部分3-继承,组合,代理)
- 面向对象概念 重载与重写(重写又称覆盖)
- JavaSE入门学习16:Java面向对象之重写(Override)和重载(Overload)
- java面向对象一:实现继承、重载、重写
- Java 重写(Override)与重载(Overload)——面向对象
- java面向对象的继承以及方法重写和重载
- Java面向对象编程之重载(overload)和重写(override)
- Java中面向对象的封装,继承,重载重写
- java--面向对象之继承4(重写和重载)
- asdasd
- elastic search学习
- C# 中的委托和事件
- 不得不看的Java代码性能优化总结
- python set difference()的细节问题
- 2--java面向对象语法学习(部分1-变量,重载,重写)
- 448. Find All Numbers Disappeared in an Array
- VMWare虚拟机克隆网卡异常
- BottomNavigationView使用
- H3 BPM社区:流程开发者的学习交流平台
- QT之UDP和组播的使用
- linux 安装hadoop 笔记(二)伪分布模式(非YARN)
- runtime的学习
- 浅淡飙车技术:Android7.0适配心得