JAVA基础初探(三)面向对象思想、类与对象、成员变量与局部变量、构造方法、static关键字详解
2018-01-24 17:04
936 查看
该篇博客目录
1、了解JAVA面向对象思想2、JAVA的类与对象
3、成员变量和局部变量
4、构造方法
5、static关键字详解
一、了解JAVA面向对象思想
个人粗浅的理解面向对象是:面向对象有封装、继承、多态这些特性,再加上设计模式,使得软件开发变成了类的扩展开发,在修改和调整上更加容易二、JAVA的类与对象
类:确定对象将会拥有的特征(属性)和行为(方法)
在JAVA语言中最基本的单位是类,所以要用类来体现食物
对象
该类事物的具体体现
类与对象的区别
学生—类
体育委员—对象
类的特点
类是对象的类型
具有相同属性和方法的一组对象的集合
定义一个类的步骤
定义类名
编写类属性
编写类的方法
public class 类名{ 属性1 属性2 ... 方法1 方法2 ... }
创建对象
类名 对象名=new 类名();
对象名.属性
对象名.方法();
三、成员变量和局部变量
1、成员变量
在类中定义(方法外),用来描述对象将要有什么2、局部变量
在类的方法中定义,在方法中临时保存数据3、成员变量与局部变量区别
a、作用域不同局部变量的作用域仅限于定义它的方法
成员变量的作用域在整个类内部都是可见的
b、初始值不同
局部变量没有默认的初始值,必须先定义,赋值
成员变量有默认的初始值(0)
c、优先级
两类变量同名时,局部变量具有更高的优先级
d、在内存中的位置
局部变量在栈内存
成员变量在堆内存
e、生命周期不同
局部变量随着方法的调用而存在,随着方法的调用完毕而消失
成员变量随着对象的存在而存在,随着对象的消失而消失
四、构造方法
1、定义在JAVA类中的一个用来初始化对象的方法2、使用new+构造方法 创建一个对象
3、构造方法与类同名,且没有返回值
4、格式
public 类名(可以指定参数,也可以不指定参数) { 初始化代码; }
Tip
如果不写构造方法,系统会自动提供无参构造方法
如果提供了构造方法,系统将不再提供
构造方法可重载
五、static关键字详解
1、static——静态成员
JAVA中被static修饰的成员称为静态成员或类成员。静态成员可以使用类名直接访问,也可以使用对象名访问。鉴于它的特殊性,推荐使用类名直接访问package hhh; public class test { static String a="hello_world"; public static void main(String[] args) { // TODO Auto-generated method stub //静态变量直接通过类名访问 System.out.println(test.a); //通过对象名访问 test obj=new test(); System.out.println(obj.a); } }
Tip
静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收
2、static——静态方法
package hhh; public class test { public static void print() { System.out.println("静态方法"); } public static void main(String[] args) { // TODO Auto-generated method stub //直接使用类名调用静态方法 test.print(); //使用对象名调用 test obj=new test(); obj.print(); } }
Tip
静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员(需要通过创建类的对象,然后通过对象来访问非静态成员)
在普通成员方法中,可以直接访问同类的非静态成员和静态成员
静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法
两个角度解析以上原因
[b]1、从类与对象的角度分析[/b]
因为类是抽象的,要完成它定义的功能,必须有它的实例来完成。同理静态的方法相当于自己本身就是个对象,它无需实例化就能调用它。而非静态方法则不能直接调用,需要实例化它的实例
[b]2、从内存角度分析[/b]
静态方法在编译时会为其和其变量分配内存空间,如果引用了一个非静态变量,那么在非静态变量结束后,这个变量就会消失,那么为它分配的内存块就成了无用内存块,但却无法回收,导致内存泄漏。
//静态方法中引用静态成员和非静态成员的方法 package hhh; public class test { static int a1=80; int a2=99; public static int sum() { test p=new test(); int num=a1+p.a2; return num; } public static void main(String[] args) { // TODO Auto-generated method stub int all=test.sum(); System.out.println(all); } }
3、初始化块、静态初始化块、构造方法(三种初始化方式)
这里直接写个DEMO
package hhh; public class test { int a; int b; static int c; public test() {//构造方法 a=1; System.out.println("通过构造方法为a初始化"); } //初始化块 { b=3; System.out.println("通过初始化块为b初始化"); } //静态初始化块 static{ c=8; System.out.println("通过静态初始化块为c初始化"); } public static void main(String[] args) { // TODO Auto-generated method stub test obj=new test(); System.out.println("a:"+obj.a); System.out.println("b:"+obj.b); System.out.println("c:"+test.c); test obj2=new test(); } } //输出: 通过静态初始化块为c初始化 通过初始化块为b初始化 通过构造方法为a初始化 a:1 b:3 c:8 通过初始化块为b初始化 通过构造方法为a初始化
以上输出结果可以看出一下几点
初始化块、静态初始化块、构造方法(三种初始化方式)都是在创建对象的时候调用的
执行顺序:1、静态初始化块 2、普通初始化块 3、构造方法
第二次加载类时没有静态初始化块了,说明:静态初始化块只在类加载时只执行一次,所以当再次创建对象obj2时并未执行静态初始化块
还有一点注意就是:静态初始化块只能给静态变量赋值,不能赋值普通的成员变量
相关文章推荐
- 黑马程序员---java基础---面向对象中的构造方法及static关键字,变量的问题
- JAVA基础day05 面向对象思想 成员变量和方法 封装 构造方法和this的使用
- java基础七(成员变量 局部变量 匿名对象 封装 设计原则 private this 构造方法 static)
- JAVA基础再回首(四)——面向对象思想、类与对象、成员/局部变量、匿名对象、封装、private、this、构造方法
- 重踏学习Java路上_Day07(成员与局部变量,形参,匿名对象,封装,private,this,构造与成员方法,static)
- JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块
- 7 面向对象(成员变量和局部变量的区别,类作为形式参数的问题,匿名对象,封装,private关键字,this关键字,构造方法,类的初始化过程,static关键字)
- 黑马程序员--03.Java面向对象--02.【static关键字】【main方法】【静态成员】
- 面向对象基础续2(static关键字、理解main方法、代码块、构造方法私有化(单例模式)) .
- JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块
- 面向对象_补充_封装_成员与局部变量_static关键字_Math随机数
- Java基础-07.总结private,this,封装,static,成员方法变量,局部变量匿名对象
- 【Java基础】----static关键字、代码块、Main方法、匿名对象详解
- 成员变量和局部变量的区别、方法的形参为类的情况及匿名对象、封装(private关键字)、this关键字、构造方法、static关键字
- java 面向对象基础 类 成员变量和局部变量 成员方法
- 07-Java面向对象构造方法,static关键字,main方法,说明书,math随机数
- JAVA面向对象基础:成员变量、方法、方法的重载、构造函数
- 黑马程序员——高新技术---Java基础语法—面向对象_构造方法,static 关键字
- 黑马程序员——Java基础---面向对象(面向对象,类,对象,匿名对象,封装,构造函数,构造代码块,this,static,main,帮助文档,静态代码块,单例)
- Java基础---基础加强---增强for循环、自动拆装箱及享元、枚举的作用、实现带有构造方法、透彻分析反射的基础_Class类、成员变量的反射、数组参数的成员方法进行反射、数组的反射应用