java基础梳理--朝花夕拾(三)
1、了解面向对象的编程思想以及面向对象的特性;
- 对象:
- EveryThing is Object; 万物皆是对象,在程序中,我们可以将类、接口、方法、属性等都认为是对象;
- 面向对象:
- 是一种程序设计方法,它以对象作为基本的单元来构建系统,它利用对象将系统的复杂性隐藏在对象里(即封装),从而构建大型的工业级系统和大型系统。
- 面向对象包括三个过程:
- 面向对象分析(OOA)、面向对象设计(OOD)、面向对象编程(OOP)。
- 面向对象的三个特性:
- 继承、封装、多态
- 面向对象和面向过程的区别?
- 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
- 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
2、类、属性、方法以及return关键词的使用;
- 类:
- Java是面向对象的,class(类)可以看做是java中的对象,类中包含:方法(这个对象能做什么)、属性(这个对象具有什么特点)
- 类:汽车
- 属性:颜色、品牌、引擎等
- 方法:启动、行驶、刹车
- 我们可以将具有不同特点的不同的事物归为不同的类;
- 类的声明:
- [访问修饰符] class 类名{
- }
- 例如:
- public class Person{//访问修饰符 public class Person //类名
- private String name;//类的属性
- private String city;
- private String cardno;
- private String eyesColor;
- private String faceColor;
- public void wakeUp(String name,String time){//起床方法
- System.out.println(name+”起床时间:”+time);
- }
- public void sleep(String name,String time){//睡觉方法
- System.out.println(name+”睡觉时间:”+time);
- }
- }
- 属性:
- 类的属性即类中声明的变量,也叫做类变量、成员变量、全局变量,可供多个方法调用;
- 要掌握:全局变量、局部变量开发中的使用;
- 方法:
- (1)定义无返回值方法:
- [public|private|protected|final] void 方法名(参数可有可无){
- }
- (2)定义有返回值方法:
- [public|private|protected|final] 返回值类型 方法名(参数可有可无){
- 操作...
- return 返回值(跟方法名前面类型必须一致);
- }
- p.s. void关键词:用于方法的声明,void表示无返回值,表示此方法执行完毕后,不反回任何结果;
- return 关键词:用于方法体中,表示该方法执行完毕后,会返回一个指定类型的结果或者数据值;
- return、break、continue区别:
- return 跳出整个方法体,表示该方法具有返回值;return后面任何语句不会被执行;
- break:表示退出当前循环,用于循环或者switch case语句段中;
- continue:只能用在循环中,表示退出当前循环,继续下面循环;
3、构造方法、实例化(new关键词的使用);
- 构造方法:
- 构造方法必须满足如下几个条件:
- 1、声明时方法名必须跟当前类名一致;
- 2、不能使用return,即构造方法无返回值;但也不能使用void关键词;
- 3、不能被static、final、synchronized、abstract、native修饰;
- 任何一个类都具有一个隐式无参构造方法;
- 例如:
- public class Test{
- private String x,y;
- public Test(){}//无参数构造方法
- public Test(String x,String y){//有参数的构造方法
- this.x=x;
- this.y=y;
- }
- }
- 构造方法主要用于:初始化成员变量;
- 构造方法执行过程:new实例化时直接执行;
- 例如:
- public class Person{
- private String username;
- private int age;
- public Person(){}
- public Person(String username,int age){//构造方法初始化成员变量
- System.out.println(username);
- System.out.println(age);
- this.age=age;
- this.username=username;
- }
- public static void main(String args[]){
- Person person1=new Person("张三",23);
- System.out.println(person1.username);
- Person person1=new Person("张三",23);
- System.out.println(person2.username);
- }
- }
- 实例化(new):
- 在面向对象中,实例化过程即通过类实现对象的创建(类创建对象的过程);
- 实例化过程中,会执行相应类的构造方法;对象是类的引用,类是对象的模板;
- 例如:
- 1.人是一个类,而名字叫“张三”的这个人,他是人类中一个具体实例;
- 2.实例化一个字符串对象:
- String str=new String(“admin”);
- 3.实例化类对象:
- public class Person{
- private String cardno;private String name;
- public Person(){ }
- public Person(String cardno,String name){
- this.name=name;
- this.cardno=cardno;
- }
- public void sleep(){
- System.out.println(“sleeping....”);
- }
- public static void main(String args[]){
- Person person=new Person(“2323123123”,“SMITH”);//实例化Person类对象,此时执行有两个参数的构造方法;
- person.sleep();
- }
- }
4、static 、this关键词的使用;
- static 关键词:
- 1、static 修饰方法,该方法叫做静态方法(也叫做类方法),可直接通过这个类的类名打点直接调用;
- 2、静态方法中不能使用this/super关键词,静态方法不能直接调用当前类中的非静态方法(或非静态属性),必须通过new实例化后在调用;而对于非静态成员方法,它访问静态成员方法/变量显然是毫无限制的。
- 3、static声明的方法和属性,该对象已经被实例化,且只能被实例化一次
- 4、static修饰的属性,被相同对象的不同实例所共享;
- 例1:
- public class Person{
- public static int age;
- public void run(){
- System.out.println(“RUN”);
- }
- public static void sleep(){
- System.out.println(“SLEEP”);
- }
- public static void test(){
- run();//错误,静态方法中不可直接调用非静态方法或者非静态变量;
- int age=this.age;//错误,当前方法是静态方法,不能使用this关键字
- Person person=new Person();
- person.run();
- sleep();//正确
- Person.sleep();//正确
- }
- }
- 例2:
- public class Test {
- //静态属性:姓名
- private static String name;
- //非静态属性 :年龄
- private String age;
- public static void main(String[] args) {
- Test test1 = new Test();
- test1.name="何东飞";
- test1.age="12";
- System.out.println(test1.age);//结果为12
- System.out.println(test1.name);//结果为何东飞
- Test test2=new Test();
- test2.age="14";
- System.out.println(test2.age);//结果为12
- System.out.println(test2.name);//结果为何东飞
- //test1及test2的name相同,诠释了“static修饰的属性,被相同对象的不同实例所共享”这一特性
- }
- }
- static代码块:
- static关键字还有一个比较关键的作用就是用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
- 为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。下面看个例子:
- class Person{
- private Date birthDate;
- public Person(Date birthDate) {
- this.birthDate = birthDate;
- }
- boolean isBornBoomer() {
- Date startDate = Date.valueOf("1946");
- Date endDate = Date.valueOf("1964");
- return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;
- }
- }
- isBornBoomer是用来这个人是否是1946-1964年出生的,而每次isBornBoomer被调用的时候,都会生成startDate和birthDate两个对象,造成了空间浪费,如果改成这样效率会更好:
- class Person{
- private Date birthDate;
- private static Date startDate,endDate;
- static{
- startDate = Date.valueOf("1946");
- endDate = Date.valueOf("1964");
- }
- public Person(Date birthDate) {
- this.birthDate = birthDate;
- }
- boolean isBornBoomer() {
- return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;
- }
- }
- 因此,很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行。
5、程序包package;import 关键词的使用;
- 程序包:package
- package就是组织文件的一种方式。最大的作用就是组织java类文件,可以区分同名的class和interface;
- 导入:import
- 用于导入相关的类或者接口;
- 例如:
- Scanner类在java.util包中,使用Scanner类中的相关方法时,需要在当前类中引入这个Scanner类:import java.util.Scanner;
- 或者import java.util.* ;如果使用*号,表示这个包中的所有类或者接口将全部被引入。
6、访问修饰符public、private、final、protected;
- public:公共的,被修饰的类或接口可以被所有类访问;这是一个宽松的访问控制级别,如果一个成员(包括成员变量、方法和构造器等)或者一
- 个外部类使用public访问控制符修饰,那么这个成员或外部类就可以被所有类(注:在该类外部,若是类成员,则需要类调用成员或外部
- 类;若是非static的类,则应先实例化后,对象对其调用)访问,不管访问类和被访问类是否处于同一个包中,是否具有父子继承关系。
- private:私有的,表示只有当前类才可以访问;如果类里的一个成员(包括成员变量、方法和构造器等)使用private访问控制符来修饰,则这个
- 成员只能在当前类的内部被访问。很显然,这个访问控制符用于修饰成员变量最合适,使用它来修饰成员变量就可以把成员变量隐藏在该类内部。
- protected:受保护的,该类的子类或者同一个包中的其他类都可以访问;如果一个成员(包括成员变量、方法和构造器等)使用protected访问控制符修饰,
- 那么这个成员既可以被同一个包中的其他类访问,也可以被不同包中的子类访问。在通常情况下,如果使用protected来修饰一个方法,通常是希望其子类来重写这个方法。
- default(包访问权限):如果类里的一个成员(包括成员变量、方法和构造器等)或者一个外部类不使用任何访问控制符修饰,就称它是包访问权限,
- default访问控制的成员或外部类可以被相同包下的其他类访问。
- final;表示不可继承的,声明变量,表示是常量,必须赋初始值;值不可改变;声明的方法或者变量都不可以被子类继承;
8、方法的重载;
- 方法的重载:overloading
- 表示一个类中可以定义具有同名的方法,这些方法参数类型、个数、顺序可以不同;使用时可通过参数类型、个数,顺序区分这些方法;
- 构造方法重载:
- 例如:
- 普通方法重载:
- 例如:
9、继承、super关键词用法;
- 继承、super关键词用法:
- 1、Java中支持类与类之间、接口与接口之间的继承,即将父类的东西继承过来;所有类的超类是java.lang.Object类;
- 2、Java只支持单继承,即一个子类只能有一个父类(超类、基类);
- 在java中继承有何优点?
- 1、编码的重用性,也就是子类可以具有父类的非private、非final(finla表示不可继承的)修饰的方法或者属性;
- 2、使应用程序变得更简单,因为父类涉及到的方法属性,被子类继承过来,子类代码变得更简单;子类由于大部分是继承而来的,很容易修改和扩展已有的实现。
- 缺点:
- 1、打破了封装(隐藏细节),因为基类向子类暴露了实现细节;白盒重用,因为基类的内部细节通常对子类是可见的;当父类的实现改变时可能要相应的对子类做出改变;
- 2、如果过多使用继承,会使程序变得复杂、不可控,导致类爆炸;
10、方法的重写(覆盖);
11、抽象类;
12、接口;
p.s. 《java基础梳理-朝花夕拾》系列由何东飞根据自己工作几年以来对java的理解梳理而成,笔者闲暇时将持续更新,有不对的地方请各位指教。QQ:983489147
java基础梳理--朝花夕拾(三)的更多相关文章
- java基础梳理--朝花夕拾(二)
1.Java语言语法规则和文件格式: 第一个Java程序:/** 第一个Java程序:控制台输出Hello world!*/public class Test{ //访问修饰符 class关键词 ...
- java基础梳理--朝花夕拾(一)
简介: Java是一种撰写跨平台应用软件的面向对象语言,1995年由Sun Microsystems公司推出. 2009年04月20日,甲骨文74亿美元收购Sun,取得java的版权. 2011年7月 ...
- java基础解析系列(三)---HashMap
java基础解析系列(三)---HashMap java基础解析系列 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)-- ...
- JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API
森林森 一份耕耘,一份收获 博客园 首页 新随笔 联系 管理 订阅 随笔- 397 文章- 0 评论- 78 JAVA基础学习day16--集合三-Map.HashMap,TreeMap与常用A ...
- Java基础知识点(三)
前言:准备将Java基础知识点总结成一个系列,用于平常复习并加深理解.每篇尽量做到短小精悍,便于阅读. 1.Math类中相关函数 Math.floor(x):返回不大于x的最大整数.eg:Math.f ...
- java基础学习总结三(jdk7新特性、变量(局部变量和成员变量)、常量以及运算符)
一:jdk7新特性 可以表示二进制数值,以0b开头,中间可以使用下划线_分隔符.如下: @Test /** * 测试jdk新特性 */ public void testJdk7(){ int a=0b ...
- Java基础加强总结(三)——代理(Proxy)
一.代理的概念 动态代理技术是整个java技术中最重要的一个技术,它是学习java框架的基础,不会动态代理技术,那么在学习Spring这些框架时是学不明白的. 动态代理技术就是用来产生一个对象的代理对 ...
- Java基础知识(三)
一.hashCode 与 equals (重要) 面试官可能会问你:"你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?" 1 ...
- java 基础知识(三)
Arraylist与Vector的区别 清浅池塘 程序员,专栏:Java那些事儿唯一作者,咨询前请先点详细资料 162 人赞同了该文章 这几天工作有点忙,有很多代码需要写,更新文章有点慢,说声抱歉 ...
随机推荐
- C++基础知识--DAY3
今天我们开始进入封装类的地方 Encapsulation(封装) (1) C struct数据封装 当单一变量无法完成描述需求的时候,结构体类型解决了这一问题,可以将多个类型打包成一体,形成新的类型 ...
- Java Web 开发必须掌握的三个技术:Token、Cookie、Session
在Web应用中,HTTP请求是无状态的.即:用户第一次发起请求,与服务器建立连接并登录成功后,为了避免每次打开一个页面都需要登录一下,就出现了cookie,Session. Cookie Cookie ...
- 2018acm-icpc徐州站后记
大概是我所有比赛里面打的最自闭的比赛了,真的很不想写这篇比赛的后记. 记得我刚学习acm的时候,觉得如果每一场比赛都能拿一块铜牌就好了,只要不铁都是很开心的. 但是没想到真正拿铜会这么难受.可能是因为 ...
- centos之Too many open files问题-修改linux最大文件句柄数
linux服务器大并发调优时,往往需要预先调优linux参数,其中修改linux最大文件句柄数是最常修改的参数之一. 在linux中执行ulimit -a 即可查询linux相关的参数,如下所示: [ ...
- Spring Boot笔记五: Web开发之Webjar和静态资源映射规则
目录 Webjar /** 访问当前项目的任何资源 欢迎页 标签页图标 Webjar 开始讲到Spring Boot的Web开发了,先介绍Webjar,这个其实就是把一些前端资源以jar包的形式导入到 ...
- hbase记录-备份脚本参考
#!/bin/sh ################################## # CreateDate:// : # ModifyDate:// : ################### ...
- Openresty 学习笔记(二)Nginx Lua 正则表达式相关API
ngx.re.match 语法: captures, err = ngx.re.match(subject, regex, options?, ctx?, res_table?) 环境: init_w ...
- java 调用 python 脚本
有时候在java项目里,需要执行Python脚本以下几种方式: 1.直接执行Python脚本代码 引用 org.python包 创建一个 python解释器,貌似这种方式不可以导入第三方库,模块... ...
- 让Windows Server 2008r2 IIS7.5 ASP.NET 支持10万并发请求
由于之前使用的是默认配置,服务器最多只能处理5000个同时请求,今天下午由于某种情况造成同时请求超过5000,从而出现了上面的错误. 为了避免这样的错误,我们根据相关文档调整了设置,让服务器从设置上支 ...
- int、bool和str
int bit_length 返回以二进制表示的最短长度 print(int.bit_length(10)) 结果 4 Process finished with exit code 0 int() ...