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 ...
随机推荐
- php 租房子(练习题)
一.题目要求 1.功能描述 出租房屋数据管理及搜索页面 2.具体要求 (1) 创建数据库HouseDB,创建表House,要求如下: 二.题目做法 1.建立数据库 2.封装类文件 <?php ...
- ETL kettle 数据调取防止意外停止处理
pentaho kettle是目前使用比较广泛的一种etl工具 但是在使用的时候如做定时任务 会存在如果任务异常停止会发生数据不准或者丢失数据的情况 这种情况在<Pentho Kettle So ...
- Android反编译工具
1:先安装androidfby工具 2:安装jdk并设置环境变量 3:下载一个apk数据包 4:打开反编译工具页面,点击"浏览"找到所要测试的apk包 5:反编译成功之后,会生成相 ...
- Ant 警告:sun.misc.BASE64Decoder 是 Sun 的专用 API,可能会在未来版本中删除
如果你用Ant编译项目,而且在项目中用了SUN的专用API,你会得到警告信息,然后Ant会报告编译失败: 这当然是不合理的,javac只是警告而已,ant凭什么就直接报失败呢? 其实最好的解决办法是避 ...
- js中窗口大小和单个元素大小的计算
1. 窗口的大小即浏览器的大小: window.innerWidth, window.innerHeight, window.outerHeight, window.outerWidth 在IE9+, ...
- 每日java基础知识(01)
1.java语言的主要特点. 跨平台性:一个应用可以不经过修改,就直接在不同的平台上运行. 面向对象:java是面向对象的语言,可以使用对象封装事物的属性和行为,可以使用面向对象的思想进行分析设计,并 ...
- linux文件系统详解
最近在做磁盘性能优化,需要结合文件系统原理去思考优化方向,因此借此机会进一步加深了对文件系统的认识.在看这篇文章之前,建议先看下前面一篇关于磁盘工作原理的解读.下面简单总结一些要点分享出来: 一.文件 ...
- ASP.NET MVC 5 基本构成
MVC模式简介: MVC模式两种理解:一种是表现模式,另外一种是架构模式.它将应用程序分成三个主要组件即:视图(View)控件器(Controller)模型(Model) M: Model主要是存储或 ...
- 2208: [Jsoi2010]连通数
2208: [Jsoi2010]连通数 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1371 Solved: 557[Submit][Status ...
- python list 切片实验
list[start:stop:step] >>> a_list=['hito','bb','cc','dd','ee','ff']>>> a_list[::-1] ...