Java基础学习(三)—面向对象(上)
一、理解面向对象
面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节;这种思想是将数据作为第一位,而方法或者说是算法作为其次,这是对数据一种优化,操作起来更加的方便,简化了过程。
面向对象的三大特征: 封装性、继承性、多态性。
封装性: 隐藏了对象的属性和实现细节,仅对外提供公共的访问方式,提高了代码的复用性和安全性。
继承性: 两种事物之间存在一定的所属关系,那么继承的类可以从被继承的类中获得一些属性和方法,提高了代码的复用性。
多态性: 父类的引用指向了子类对象,提高了程序的扩展性。多态有一点不好之处就是父类的引用不能访问子类中的成员。
二、成员变量和局部变量的区别
1.在类中的位置不同
成员变量在类中的方法外定义的。
局部变量在方法内或者方法声明上定义的。
2.在内存中的位置不同
成员变量在堆内存中。
局部变量在栈内存中。
3.生命周期不同
成员变量随着对象的存在而存在,随着对象的消失而消失。
局部变量随着方法的调用而存在,随着方法的调用完毕而消失。
4.初始化值不同
成员变量有默认的初始化值。
局部变量没有默认的初始化值,必须先定义、赋值后才能使用。
三、匿名对象
定义: 没有名字的对象。
两种使用情况:
A: 对象调用方法仅仅一次的时候。
B: 作为实际参数传递。
好处: 匿名对象调用完毕就是垃圾,可以被垃圾回收器回收。
例子如下。
public class Test{ public static void main(String[] args){ //匿名对象调用方法
new Student().show(); //匿名对象作为实际参数传递
new StudentDemo().method(new Student());
}
} class Student{
public void show(){
System.out.println("学生学习...");
}
} class StudentDemo{
public void method(Student s){
s.show();
}
}
四、private关键字
(1)是一个权限修饰符。
(2)可以修饰成员变量和成员方法。
(3)被private修饰的成员只在本类中才能访问。
应用如下。
public class Test{ public static void main(String[] args){ Student s = new Student();
s.setName("Tom");
s.setAge(22); System.out.println("name = " + s.getName());
System.out.println("age = " + s.getAge()); }
} class Student{ private String name;
private int age; public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
}
五、this关键字
Java关键字this只能用于方法体内。当一个对象创建后,Java虚拟机就会为这个对象分配一个引用自身的指针,这个指针名字就是this。因此this只能在非静态方法中使用,静态方法和静态的代码块中绝对不可以出现this。this只和特点对象关联,而不和类关联,同一个类的不同对象有不同的this。
this的使用有三种情况。
1.函数的局部变量和成员变量同名情况下,成员变量被屏蔽,此时要访问成员变量则需要使用this.成员变量名的方式来引用成员变量。
public class Test{ private int age = 10; public Test(int age){
System.out.println("1---this.age = " + this.age);
this.age = age;
System.out.println("2---this.age = " + this.age);
} public static void main(String[] args){
Test t = new Test(22);
System.out.println("age = " + t.age);
}
}
结果:
1---this.age = 10
2---this.age = 22
age = 22
2.在同一类中,可以用this调用其他构造方法。
class Student{ private String username;
private String password;
private int age; public Student(String username,String password,int age){
super();
this.username = username;
this.password = password;
this.age = age;
} public Student(String username,String password){
this(username,password,0);
} public Student(String username){
this(username,"1234");
}
}
3.在方法中,需要引用该方法所属类的当前对象的时候,使用this。
六、构造方法
1.作用
给对象的数据进行初始化。
2.格式
(1)方法名与类名相同。
(2)没有返回值,连void都没有。
3.注意事项
(1)如果你不提供构造方法,系统会给出默认无参构造方法。
(2)如果你提供构造方法,系统将不再提供。
(3)构造方法也是可以重载的。
public class Test{ public static void main(String[] args){ Student s = new Student("Tom",22);
System.out.println("name = " + s.getName());
System.out.println("age = " + s.getAge());
}
} class Student{ private String name;
private int age; public Student(){ } public Student(String name,int age){
this.name = name;
this.age = age;
} public String getName(){
return name;
} public void setName(String name){
this.name = name;
} public int getAge(){
return age;
} public void setAge(int age){
this.age = age;
}
}
Student s = new Student();在内存中做了什么事情?
(1)加载Student.class文件进内存。
(2)在栈内存为s开辟空间。
(3)在堆内存为学生对象开辟空间。
(4)对学生对象的成员变量进行默认初始化。
(5)对学生对象的成员变量进行显示初始化。
(6)通过构造方法对学生对象的成员变量赋值。
(7)学生对象初始化完毕,把对象地址赋值给s变量。
七、static关键字
1.特点
(1)随着类的加载而加载。
(2)优先于对象存在。
(3)被类的所有对象共享。
(4)可以通过类名直接调用。
2.static方法
static方法一般称为静态方法。由于静态方法不依赖于任何对象就可以访问,因此在静态方法来说是没有this关键字的。而且在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法和非静态成员变量必须依赖具体的对象才能够被调用。但是注意,虽然在静态方法中不能访问非静态的成员变量和方法,但是在非静态成员方法中可以访问静态成员变量和方法的。
3.static变量
静态变量和成员变量的区别?
(1)所属不同
静态变量属于类。
成员变量属于对象。
(2)内存中的位置不同
静态变量存储在方法区的静态区。
成员变量存储在堆内存中。
(3)出现时间不同
静态变量随着类的加载而加载,随着类的消失而消失。
成员变量随着对象的创建而存在,随着对象的消失而消失。
(4)调用不同
静态变量可以通过类名调用,也可以通过对象调用。
成员变量只能通过对象调用。
八、代码块
在Java中使用"{ }"括起来的代码被称为代码块。根据其位置和声明不同,可分为局部代码块,构造代码块,静态代码块,同步代码块。
1.局部代码块
在方法中出现,限定变量的生命周期,及早释放,提供内存利用率。
2.构造代码块
在类中方法外出现,多个构造方法中相同的代码存放在一起,每次调用构造都执行,并且优先于构造方法执行。
3.静态代码块
在类中的方法外出现,并加上static修饰,用于给类进行初始化,在加载的时候就执行,并且只执行一次。
/*
* 代码块
* (1)用{}括起来的代码。
* (2)分类:
* A:局部代码块
* 用于限定变量的生命周期,及早释放,提高内存利用率。
* B:构造代码块
* 把多个构造方法中相同的代码可以放到这里,每个构造方法执行前,首先执行构造代码块。
* C:静态代码块
* 对类的数据进行初始化,仅仅只执行一次。
* (3)静态代码块,构造代码块,构造方法的顺序问题?
* 静态代码块 > 构造代码块 > 构造方法
*/
public class CodeBlock{ //静态代码块
static{
int a = 30;
System.out.println(a);
} //构造代码块
{
int a = 20;
System.out.println(a);
} public CodeBlock(){ System.out.println("CodeBlock......"); } public static void main(String[] args){ CodeBlock cb = new CodeBlock();
CodeBlock cb2 = new CodeBlock(); //局部代码块
{
int x = 10;
System.out.println(x);
} }
}
结果:
30
20
CodeBlock......
20
CodeBlock......
10
Java基础学习(三)—面向对象(上)的更多相关文章
- java基础学习05(面向对象基础01)
面向对象基础01 1.理解面向对象的概念 2.掌握类与对象的概念3.掌握类的封装性4.掌握类构造方法的使用 实现的目标 1.类与对象的关系.定义.使用 2.对象的创建格式,可以创建多个对象3.对象的内 ...
- java基础学习总结——面向对象1
目录 一.面向过程的思想和面向对象的思想 二.简单理解面向对象 三.面向对象的设计思想 四.对象和类的概念 五.如何抽象出一个类? 六.类(对象)之间的关系 七.Java与面向对象 八.为什么使用面向 ...
- java基础学习总结——面向对象2
一.JAVA类的定义
- java基础学习05(面向对象基础02)
面向对象基础02 实现的目标 1.String类的使用2.掌握this关键字的使用3.掌握static关键字的使用4.了解内部类 String类 实例化String对象一个字符串就是一个String类 ...
- java基础学习05(面向对象基础01--类实例分析)
面向对象基础01(类实例分析) 实现的目标 1.如何分析一个类(类的基本分析思路) 分析的思路 1.根据要求写出类所包含的属性2.所有的属性都必须进行封装(private)3.封装之后的属性通过set ...
- Java基础语法04面向对象上-类-属性-方法-可变参数-重载-递归-对象数组
类 面向对象是一种思想,一般指将事务的属性与方法抽出总结为模板(类/class),处理事务时通过类创建/new出对象由对象的功能/方法去完成所要计算处理的事情. 面向过程:POP:以过程,步骤为主,考 ...
- Java基础学习之面向对象(4)
目录 1.面向对象概述 1.1.类与对象的关系 1.2.类的具体描述 2.面向对象的三大特性 2.1.继承 2.2.多态 2.3.封装 1.面向对象概述 1.1.类与对象的关系 有对象吗,没有的话我给 ...
- 转载-java基础学习汇总
共2页: 1 2 下一页 Java制作证书的工具keytool用法总结 孤傲苍狼 2014-06-24 11:03 阅读:25751 评论:3 Java基础学习总结——Java对象的序列化和 ...
- JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API
森林森 一份耕耘,一份收获 博客园 首页 新随笔 联系 管理 订阅 随笔- 397 文章- 0 评论- 78 JAVA基础学习day16--集合三-Map.HashMap,TreeMap与常用A ...
随机推荐
- HTML5拖放加入购物车
H5拖放事件巩固实例: 1.简单布局一下,商品信息放入一个ul中:div为购物车,后续会创建元素 <ul> <li draggable="true"> &l ...
- 线上问题debug过程(cat,grep,tr,awk,sort,uniq,comm等工具的综合使用)
问题:发现线上到货单的数量,小于实际到货的数量. 怀疑一些隐藏的条件,将部分唯一码进行了过滤,导致数量变少. 开展了如下的跟踪流程: 1.找到其中一个明细的唯一码 grep 6180e-4b09f p ...
- 前端总结·基础篇·CSS(三)补充
前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 目录 一.移动端 1.1 视口(viewport) 1.2 媒体查询(medi ...
- linux 下maven安装
版本要求maven3.2.3 软件下载 wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.2.3/binaries/apache-maven-3 ...
- keepalived配置文件
1. 查看进程 ps aux | grep keepalived ,其输出为: [root@lvs-m ~]# ps aux| grep keepalived |grep -v greproot 21 ...
- Hibernate一对一外键映射
Hibernate 一对一外键映射 ------------------------------ ----- ...
- 妙用 `package.json` 快速 `import` 文件(夹)
前言 import router from './router'; import router from '../../router'; import router from './../../../ ...
- 8个超炫酷的jQuery相册插件欣赏
在网页中,相册应用十分常见,如果你经常逛一些社交网站,那么你应该会注意到很多各式各样的网页相册应用.今天我们要来分享一些最新收集的jQuery相册插件,这些精美的jQuery相册插件可以帮助你快速搭建 ...
- Linux 修改时区 不用重启
1.cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 2.使用tzselect命令,根据提示选择 3.使用date查看是否修改正确 4.运行hwc ...
- .dll 无法查找或者打开PDB文件
https://www.baidu.com/link?url=XBkzyMPU8bmyHSKAvBde6955fX2ecFJXfk8D44_VCuH_4U04E0bHFjk8D2_mXSqgjcUyQ ...