初学Java6:Java OOP基础语法总结


*************** Java OOP 基 础 语 法 总 结 *************************
1,类与对象
1),类(class)是相同属性和方法的一组集合。
A,类的组成:属性和方法。
B,语法声明:使用class关键字,eg:public class Student{}//类名首字母大写,且必须和文件名一致
C,类的实例化:使用new关键字,eg:Student student=new Student();//声明一个Student类型的变量or实例化一个Student对象
D,类与文件的关系;
a,一个java文件可以包含多个java类
b,一个java文件最多只能有一个public类
c,java文件的名称必须和其中的public类名一致
E,eg:public class Student{//类(首字母大写)
public void getName(){//方法(一般为动词+名词,动词首字母小写,名词首字母大写)
String name;//属性(数据类型+属性名)
}
}
2),对象(object)是一个具体的实体(entity)。
eg:某某学生即可作为一个对象
********************************************************************
2,方法
1),可以重复执行的代码块,对于调用者来说相当于一个“黑盒子”。
2),语法声明;访问控制修饰符 返回值类型 方法名 (参数列表){
方法体;
}
eg:public void getName(int num){
String name;
}
3),方法的传参--数据类型:A,8种基本数据类型(byte,int,short,long,float,double,char,boolean)
B,引用数据类型(eg:Student student=new Student();中的student就是引用数据类型)
注:基本数据类型与引用数据类型的区别:
a,存储方式不同,基本数据类型存在 栈 中,是按值传
引用数控类型存在 堆 中,是按址传
b,使用方式不同,基本数据类型 无属性和方法
引用数控类型 有属性和方法
********************************************************************
3,构造方法(Constructor)
1),是一个特殊的方法,该方法的作用是实例化对象,会在内存中分配空间,且可以对类的属性进行初始化
2),语法特征:
a,构造方法的名字必须与所在的类一致
b,没有返回值类型,注意和没有返回值不是一回事
c,默认情况下有一个隐式的无参构造方法,其访问控制修饰与所在的类的访问控制修饰一致
d,如果我们自定义了构造方法,则隐式无参构造方法就不存在了
3),使用方法:使用new关键字调用

********************************************************************
4,包(package)
1),意义:解决命名冲突
2),命名:主要需要知道域名反写,全部字母小写,不能以数字开头,eg:com.baidu.zhidao.azhi0828//合法包名
3),如果一个类需要使用另一个包中的类,需要使用import关键字导入相应的包,其中java.lang无需显式导入
********************************************************************
5,可变长度参数
1),是在数据类型后面加上“...”表示,当成数组。
eg:int getTotal(int...num){
代码块;
}
2),调用时可以不传参数,可以传若干参数,传入参数用逗号隔开,也可以传入数组。
3),一个方法最多只能有一个可变长度参数,而且必须放在最后位置
eg:eg:int getTotal(int num1,int...num2){
代码块;
}
********************************************************************
6,命令行参数
***了 解***
********************************************************************
7,方法重载
1),在一个类中,具有相同的方法名,但是参数列表不同的方法。
2),可分为一般方法重载和构造方法重载。
eg:class Student{//同一个类
void getInformation(String name){//相同的方法名,不同的参数列表
***;
}
void getInformation(int age){//相同的方法名,不同的参数列表
***;
}
}
********************************************************************
8,this关键字
(1),使用环境:方法和构造方法中。
(2),使用方法两种:
1),this.属性(方法);//this表示当前运行的实列(对象),注意:this未运行时,不代表任何属性(方法)。
2),this();//只能用在构造方法中。表示调用其他重载形式的构造方法,而且必须放在第一行。
(3),注意:静态方法中不能使用this!(静态方法属于类,不是实列,而this代表了当前运行的实列,放一起顺序会逻辑混乱),main中也不能使用this!
(4),eg:
 1 package com.zhi.java.course;
 2 public class Text{
 3     Text(int num){//this();只能用在构造方法中
 4         this.num=num;
 5     }
 6     Text(){
 7         this(100);//无参方法调用有参
 8     }
 9     int num=1;
10     int getNum(){
11         return num;//此处可以直接放回num
12     }
13     void setNum(int num){//新定义的num不同于成员变量num
14         this.num=num;//此处this不可省
15     }
16     void m1(){
17         
18     }
19     void m2(){
20         this.m1();//此处this可以省
21     }
22      static void m3(){
23         System.out.println(this.num);//Error!Cannot use this in a static context
24     }
25 }

 

********************************************************************
9,super关键字(对比this关键字)
(1),使用环境:一般的实列方法中和构造方法中
(2),使用方法两种:
(1),super.属性(方法);//调用父类的属性(方法)
(2),super();//只能用在构造方法中。表示调用父类相应的构造方法,而且必须放在第一行。
********************************************************************
10,final关键字
(1),final修饰类,表示该类不能再被继承;
eg:final class Animal(){}//Animal不能再被继承。
(2),final修饰变量,该变量必须被赋值,final修饰后该变量变为常量,不能再改变;
eg:final int num=10;//num不可再改变。
(3),final修饰方法,该方法不能再被重写;
eg:final void m1(){}//方法m1在f父类,在子类中final不能再被重写。
(4),final修饰属性,1),可以直接在声明时赋值
2),可以在代码块中赋值
3),静态的可以在静态代码块中赋值
********************************************************************
11,继承
(1),概念,继承是OOP特征之一,是子类通过继承获取父类中的部分属性和方法。
(2),使用extends关键字
1),符合is-a关系的设计使用继承
2),继承是代码重用的一种方式
(3),好处:1),做到代码重用
2),系统维护性更好。
(4),不能继承的有:1),子类不能继承父类的构造方法。
2),子类不能继承父类的私有方法(private)。
3),子类和父类不在同一包,使用默认的访问权限的成员
(5),eg:
 1 package com.zhi.java.course;
 2 public class Animal {
 3     String name;//公共的属性或方法
 4     int age;
 5 }
 6 public class Dog extends Animal {//继承父类的属性,一个子类只能继承一个父类(单根继承)
 7     public static void main(String[] args) {
 8         Dog dog = new Dog();
 9         dog.name = "大黄";
10         dog.age = 300;
11         String na= "田不易";//也可以有子类的特有属性(方法)
12     }
13 }

********************************************************************
12,类的初始化顺序:(从上到下)
父类的静态代码块
子类的静态代码块
父类的代码块
父类的构造方法
子类的代码块
子类的构造方法
注意:静态代码块只能执行一次!
********************************************************************
13,访问控制修饰符
1),概念,a:Java提供四种访问控制修饰符(public private 包 )
b:放在方法与变量前,部分访问控制修饰符也可以放在类前
c:目的是控制代码的访问权限。
2),控制范围(从大到小)
public 所有代码都可以访问
protected 本类,包及其子类的代码可以访问
包 本类,同一个包中访问
private 私有的,它修饰的属性,方法,或内部类只能本类使用

********************************************************************
14,方法重写
1),概念:在子类中对父类的方法重新实现一遍,即在子类中对父类中某方法的默认逻辑进行修改。
2),语法:a,方法名一样
b,方法的参数一样
c,子类重写的方法返回值类型要与父类返回值类型一样或者是其子类
d,子类访问控制修饰符的范围不能比父类不能小
e,子类抛出的异常不能比父类抛出的异常多或范围更大
3),以下方法不能重写:
a,private方法
b,构造方法(Constructor)
c,static方法
d,final方法
********************************************************************
15,Object类
(1),java是单根继承,在java中不允许多根继承。
(2),Object是所有类的最终父类,所有类或者是数组都可以直接或间接继承Object类。
(3),Object类来自java.lang包。
(4),可以将所有的引用类型值赋给Object类型声明的变量,包括null。
(5),Object提供9中可用方法,所有的子类都都可以使用,其中
getClass(),notiFy(),notiFyall(),wait()不可以被子类重写
toString(),equals(),hashCode(),clone(),finalize()可以被子类重写
(6),toString()方法
1),自动调用toString()方法的场景:字符串拼接和控制台输出,如下列:
 1 package com.zhi.java.course;
 2 public class Dog {
 3     String name;
 4     int age;
 5     public String getName() {
 6         return name;
 7     }
 8     public void setName(String name) {
 9         this.name = name;
10     }
11     public int getAge() {
12         return age;
13     }
14     public void setAge(int age) {
15         this.age = age;
16     }
17     public static void main(String[] args) {
18         Dog dog = new Dog();
19         dog.setName("大黄");
20         dog.setAge(300);
21         System.out.println(dog);//等同于System.out.println(dog.toString());会自动调用toString方法,故有以下结果
22     }
23 }
运行结果: com.zhi.java.course.Dog@2a139a55 //默认实现输出格式:全限定类名@哈希码的16进制 

2),重写toString()方法
 1 package com.zhi.java.course;
 2 public class Dog {
 3     String name;
 4     int age;
 5     public String getName() {
 6         return name;
 7     }
 8     public void setName(String name) {
 9         this.name = name;
10     }
11     public int getAge() {
12         return age;
13     }
14     public void setAge(int age) {
15         this.age = age;
16     }
17     @Override//重写注解,可判断是否重写
18     public String toString() {
19         return "名字:"+name+"\n年龄:"+age;  //重写获得需要的值
20     }
21     public static void main(String[] args) {
22         Dog dog = new Dog();
23         dog.setName("大黄");
24         dog.setAge(300);
25         System.out.println(dog);//等同于System.out.println(dog.toString());已经重写toString()方法
26     }
27 }
运行结果:名字:大黄
   年龄:300
(7),equals()方法重写
1),当类有逻辑上的等同意义而不仅是对象意义上的等同时 需要重写equals()方法。
2),以下情况不能重写:
a,每个类实列本质上是唯一的。
b,不关心类是否提供了“逻辑意义上的等同”测试。
c,超类已经重新了equals,该方法也适合子类。
3),回顾 "==":比较基本数据类型的值是否相等(按值比较),比较引用数据类型是否是同一个对象(按址比较)。
equals:默认与"=="相同,重写可自定义比较规则。
4),未重写时结果如下:
 1 package com.zhi.java.course;
 2 class Game {
 3     private String name;
 4     private int age;
 5     public String getName() {
 6         return name;
 7     }
 8     public void setName(String name) {
 9         this.name = name;
10     }
11     public int getAge() {
12         return age;
13     }
14     public void setAge(int age) {
15         this.age = age;
16     }
17 }
18 public class EqualsJob {
19     public static void main(String[] args) {
20         Game g1 = new Game();
21         g1.setName("LOL");
22         g1.setAge(6);
23         Game g2 = new Game();
24         g2.setName("LOL");
25         g2.setAge(6);
26         System.out.println(g1.equals(g2));// 用equals直接比较两个相同的引用类型,等同System.out.println(g1==g2);
27     }
28 }
运行结果:false
5),重写equals()后如下:
 1 package com.zhi.java.course;
 2 class Game {
 3     private String name;
 4     private int age;
 5     public String getName() {
 6         return name;
 7     }
 8     public void setName(String name) {
 9         this.name = name;
10     }
11     public int getAge() {
12         return age;
13     }
14     public void setAge(int age) {
15         this.age = age;
16     }
17     @Override
18     public boolean equals(Object obj) {
19         if (this == obj) {
20             return true;
21         }
22         if (obj instanceof Game) {//向下转型需要通过instanceof判断obj和Game是否同一类型
23             Game g = (Game) obj;//类型一致则强转类型,向下转型
24             return g.getAge() == age && g.getName().equals(name);//自定义比较规则
25         }
26         return false;
27     }
28 }
29 public class EqualsJob {
30     public static void main(String[] args) {
31         Game g1 = new Game();
32         g1.setName("LOL");
33         g1.setAge(6);
34         Game g2 = new Game();
35         g2.setName("LOL");
36         g2.setAge(6);
37         System.out.println(g1.equals(g2));// 使用equals直接比较两个相同的引用类型
38     }
39 }
运行结果:true
6),equals()重写约定
a,自反性
b,对称性
c,传递性
d,一致性
e,任何非空x,x.equals(null)总是false
f,重写equals方法时永远要重载hashCode方法
********************************************************************
16,向上转型与向下转型:
(1),向上转型:子类的实例可以自动转换为父类的类型
(2),向下转型:父类型需要强制转化为子类型,前提是该对象本身就是子类型的对象,使用instanceof做判断
********************************************************************
17,抽象类:
(public abstract class shape{}就是一个抽象类)
(1),使用abstract声明抽象类或抽象方法
(2),抽象类可以有抽象方法,也可以没有抽象方法,但是抽象方法必须在抽象类中
(3),抽象类不能实例化
(4),抽象类可以有构造方法
抽象方法:(public sbstract void sss();就是一个抽象方法)
(1),没有实现体
(2),不能被final,private,static修饰
(3),主要给子类来重写的

如果抽象类的子类是一个具体的类,该具体类必须实现父类的所有抽象方法
如果子类也是抽象类,子类既可以实训父类的抽象方法,也可以不实现
 ********************************************************************
18,接口
(1),概念:它是一个纯粹的抽象类,其它的方法全部都是抽象方法。它是一种约定,一种能力
(2),声明语法:使用interface关键字,eg:public interface Swimable{}
1),可以声明属性,该属性默认是public static final修饰的,必须赋初始值
2),可以有方法,全部是抽象方法,
3),接口不能直接实例化(接口是一个纯粹的抽象类)
(3),接口成员-常量属性
1),接口中所有的属性都是public static final修饰的
2),常量可以是基本数据类型,也可以是引用数据类型
(4),注意:1),常量的命名规范是全部字母大写,eg:public static final int NUM=10;
2),接口的修饰符可能是包级访问级别的,所以public常量有可能访问不到
3),推荐使用枚举保存一组相关的值(至少java5)
(5),继承接口
1),接口可以使用extends关键字继承另一个接口
2),可以继承:抽象方法和默认方法,常量属性,嵌套类型
3),不能继承静态方法
(6),实现接口
1),实现接口的具体类需要使用implements关键字,并且需要重写接口中所有的抽象方法。eg:public class Fish implements Swimable{}
2),实现接口的抽象类可以重写接口中的部分抽象方法。
3),一个类可以实现多个接口,但是只能继承一个类,而且应先继承后实现。
4),接口可以作为数据类型用来声明变量。
5),接口也可以继承接口。
********************************************************************
19,面向对象的三大特征:封装,继承,多态
(1),封装:将实现的代码或属性放在一个类或方法中,不让外部代码随意访问。
好处:安全。
使用访问控制修饰符 private
(2),继承:子类会将父类的部分属性或方法继承下来。
好处:做到代码重用,提高系统的维护性能
使用关键字:extends
(3),多态:在不同的场景下,类或方法有不同的指向。
好处:代码量可以减少
体现:1),方法上的多态:重写和重载
2),类的多态:类作为方法的参数或返回值类型
********************************************************************
20,接口与抽象类的区别?
1),语法上,接口是使用interface声明,使用implements实现,
抽象类是使用abstract声明,使用extends继承。
2),特定,接口不能有具体的方法,属性都是静态常量,
抽象类可以有构造方法、抽象方法、普通方法,还有属性。
3),设计上,表达某种能力使用接口,

********************************************************************
21,方法重写与重载的区别?
方法重写是在子类中对父类的方法重新实现一遍,即在子类中对父类中某方法的默认逻辑进行修改。方法名和参数列表都相同。
方法重载是在一个类中,具有相同的方法名,但是参数列表不同的方法。
                                                  
   为了这个东西,从早上10点弄到现在,除了中午下午吃饭时间,一直没间断,好累...
                                                   A_zhi
							                2016/8/28/22/50
******************** 持 续 修 改、补 充... ***************************
 

转载于:https://www.cnblogs.com/a-zhi/p/5816256.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python杀死了excel_Python杀死了Excel|自动更新表格,告别繁琐

大家好,又到了Python办公自动化专题。 今天我们讲解的案例是如何使用Python自动更新Excel表格,简单来说就是每天都会对Excel中多个sheet进行更新,需要操作完后可以用程序完成第一张sheet 汇总表的更新,大概就是这样👇当…

TP-LINK路由器连接网线上网教程(租房必备)

租的房子,房子里只有一根普通网线,连着房东家的路由器,这时可以使用TP-LINK路由器使用LAN-WAN级联的方式,在室内搭建一个局域网。 设置教程 准备材料:1根网线 重置路由器:启动路由器,使用牙签…

推荐一款非常强大的扒站工具

在平时的开发或者学习的过程中,我们难免会看到一些让人心动的网站,于是自己想把它弄下来,自己手工一个文件一个文件把它保存下来不太可能,那得累死你,下面我推荐一款扒站的神器,可以把你所喜欢的目标网站整…

python脚本之家 包的创建和调用_python基础之包的导入和__init__.py的介绍

调用同级目录: – src |– mod.py |– test.py 若在程序test.py中导入模块mod, 则直接使用 import mod 或 from mod import * 调用子目录下的模块: – src |– mod.py |– lib | |– mod2.py |– test.py from lib.mod2 import * 或 import lib.mod2 调用…

无刷新分页 jquery.pagination.js

序言 这一款js分页使用起来很爽,自己经常用,做项目时总是要翻以前的项目看,不方便,这里就把他写出来方便自己以后粘帖,也希望能分享给大家。友情提示下:我有一片博客是用着个js实现的无刷新分页也很好用&am…

windows 10打开或禁用管理员账户

windows 10下默认关闭了管理员账户,因为权限太高,而且win 10推荐通过网络账户登录。如果要使用,可以通过下面的方式打开。 1、登录一个普通账户。 如果你是刚升级上来,普通账户都没有。那么,用别人的电脑下载安装老毛…

hbase filter原理_HBase应用|HBase在移动广告监测产品中的应用

1HBase在Ad Tracking的应用1.1Ad Tracking的业务场景Ad Tracking是TalkingData的移动广告监测产品,其核心业务模型是归因。App用户点击广告之后,及随后安装广告跳转到的应用或者游戏,Ad Tracking会对这些点击事件(用户点击广告的行为)和激活事…

const char *p、char const *p、char *const p

const char *p:p不是常量,可以修改p的值,但不能修改p指向空间的值char const *p与char *const p:p是常量,不能修改p的值,但能修改p指向空间的值const char *const p:两者均为常量,不…

eclipse 快捷键及插件

webstorm设置keymap为eclipse也可使用。 快捷键 快捷键用途使用方法编辑器事件ctrlt打开继承树将鼠标移到某个类上,按ctrltctrl/注释本行altshiefj生成属性注释,这杨的/**/ctrlalt 下箭头复制本行到下一行alt 下箭头移动本行到下一行ctrld删除整行alt/…

drools动态配置规则_关于规则引擎

很早之前就知道Drools,这几天正好有个项目,里面用了大量的规则定义,就想是否能采用Drools来解决。在github上分析了规则引擎项目,包括:Easy-ruleshttps://github.com/j-easy/easy-rules通过程序代码来完成规则引擎&…

linux安装mysql5.6

目录 准备工作 运行环境 确认你的安装版本 下载MySQL 安装MySQL 准备安装环境 编译和安装 配置MySQL 单实例配置 单实例配置方法 添加防火墙 启动MySQL 重启MySQL 多实例配置 什么是多实例 多实例配置方法 创建启动文件 初始化数据库 配置防火墙 启动MySQL 登陆MySQL 重启MySQL…

Spring 4 MVC入门实例

Spring 4发布很长一段时间了,从 Spring 3 到 Spring 4 有巨大的改变。网上还有很多教程是基于 Spring 3.0 的,甚至 Spring 2.5,要想按照网上的教程“按图索骥”还是挺困难的。纵有一些 Spring 4.0 MVC 的教程例子,也往往是 “Spri…

python写入二进制文件的库_python之写入二进制文件

概述 计算机都是以二进制存储文件的,如mp3、图片等,文本文件也是如此,在本节中以二进制模式写入文件 写文件的很多操作,与读文件的操作是相同的,建议先看 读取二进制文件 打开文件 读写文件,要先通过内置op…

Excel文件打不开别担心,看完这些提示或许能让其起死回生

使用Excel电子表格时,大多数人有时要么时间紧迫,要么有最后期限。如果在那个时候,Microsoft Excel如果不打开,那可能是一场噩梦。 不幸的是,当Excel拒绝打开你的一个重要Excel文件,或者无法完全打开Excel应用程序时,这种意外行为非常常见。 所以,如果你遇到“Microso…

gulp插件gulp-ruby-sass和livereload插件

gulp-ruby-sass是gulp的一个插件,主要是用来实现sass编译,livereload插件主要是实现文件保存时浏览器自动刷新,避免了手动f5的频繁的操作 准备工作:chrome浏览器安装livereload插件,没有安装的可以百度搜索或者FQ下载&…

eclipse 创建 maven web 项目教程

(1)新建一个Maven 项目 file –> new –> maven project 直接点 next 直接点 next 填写groupid和artifactid,这两个可以随便填,名称而已。填完 finish (2)将项目转成 Dynamic Web项目 选中项目&#…

sql backup database备份d盘_ClickHouse 备份与恢复

本文转载自 万能修实验室 作者:公先生 ID: dropudatabase我们评估一款数据库产品,除了稳定性和易用性外,数据安全也十分重要,备份与恢复往往是最后一道安全门。但如果备份策略不完善、恢复手段无效,一旦发生数据误删除…

ASP.NET MVC Global.cs - 应用程序事件

一、Application_End Application_End:网站关闭,或重启时,会触发该方法 二、Application_Start 第一个访问网站的用户会触发该方法. 通常会在该方法里定义一些系统变量,如聊天室的在线总人数统计,历史访问人数统计的初始化等等均可在这里定义 三、Session_Start 每个用户访问网…

i = i++ 之后 i 的值为什么是 0

运行 ii 之后,i的值是多少?代码如下: public class A{public static void main(String[] args){int i0;ii;System.out.println(i);}} 答案是:打印出 0 为什么呢?是因为java虚拟机中有局部变量区和操作数栈之分。iin…

线程启动语句的顺序是否决定线程的执行次序。_详细分析 Java 中启动线程的正确和错误方式

start 方法和 run 方法的比较代码演示:/** * * start() 和 run() 的比较 * * * author 踏雪彡寻梅 * version 1.0 * date 2020/9/20 - 16:15 * since JDK1.8 */public class StartAndRunMethod { public static void main(String[] args) { // run 方法演示 // 输出: name: mai…