Java语法基础学习DaySix
一、JavaBean——可重用组件
1.JavaBean是指符合以下标准的Java类:
(1)类是公共的
(2)有一个无参的公共的构造器
(3)有属性,且有对应的get、set方法
2.好处
用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用Java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一个随时随地的复制和黏贴的功能,而不能关心任何改变。
二、包——package
1.作用:对类文件进行分类管理;给类文件提供多层名称空间;一般包的出现是为了区分重名的类,所以包名要尽量唯一
2.注意事项
包名的所有字母都要用小写。
三、访问权限修饰符public 、 private 、 protected 、 default(默认,即没有修饰符)
1.访问权限大小
public:任何地方
protected:类内部、同一个包内、子类
default:类内部、同一个包内
private:类内部
2.注意事项
对于class的权限修饰只能是public或者default,public类可以在任何地方被访问,default类只可以被同一个包内的类访问。
四、多态
1.体现
(1)方法的重载和重写 (2)子类对象的多态性(父类的引用或者接口的引用指向了自己的子类的对象)//Person p = new Man();
2.好处
提高了程序的拓展性。比如在方法中形参的类型用父类类型,通过多态可以直接传进子类的对象。
3.弊端
当父类引用指向子类对象时,虽然提高了扩展性,但只能访问父类具有的方法,不可以访问子类特有的方法。
4.特点
(1)子类对象的多态性使用的前提:要有类的继承;要有子类对父类方法的重写
(2)程序运行时分为编译状态和运行状态。(编译时不创建对象,只检查语法错误)
对于多态性来说,编译时,看“左边”,将此引用变量理解为父类的类型,因此无法访问子类特有的方法;
执行时,看“右边”,关注真正对象的实体,即子类的对象,那么执行的方法是子类重写的。
(3)子类对象的多态性,并不适用于属性,即调用的都是引用变量所属的类中的属性。
5.强制类型转换
(1)想要访问子类特有的方法,可以通过强转符:() 将父类对象强制向下转换成子类引用。//Man m = (Man)p;
(2)判断对象是哪个具体的子类类型,可以使用instanceof关键字,格式:对象 instanceof 类型,返回一个boolean值。// if ( p instanceof Man)
instanceof可以判断对象是否实现了指定的接口或继承了指定的类。 // Man m = (Man)p;
6.代码案例
class Test{
public static void main(String[] args){
Test t = new Test();
t.method(new Animal());
System.out.println("========");
t.method(new Dog());
System.out.println("========");
t.method(new Cat());
}
public void method(Animal a){//通过多态性,使父类引用可以指向子类对象
System.out.println(a.number);//输出1,说明调用的是Animal类中的number
a.eat();
a.run();
if(a instanceof Dog){
Dog d = (Dog)a;//强制向下转换,才能调用子类特有的bake方法
d.bake();
}
if(a instanceof Cat){
Cat c = (Cat)a;
c.bake();
}
}
}
class Animal{
int number = 1;
public void eat(){
System.out.println("吃东西");
}
public void run(){
System.out.println("走路");
}
}
class Dog extends Animal{
//创建父类同名变量number
int number = 2;
//重写父类eat和run方法
public void eat(){
System.out.println("吃狗粮");
}
public void run(){
System.out.println("狗爬中");
}
public void bake(){
System.out.println("汪汪叫");
}
}
class Cat extends Animal{
int number = 3;
public void eat(){
System.out.println("吃猫粮");
}
public void run(){
System.out.println("走猫步");
}
public void bake(){
System.out.println("喵喵叫");
}
}
五、object——所有Java类的根父类
1.equals方法
(1)格式:boolean equals(Object obj)
(2)特点
A:只能处理引用类型变量,不能处理基本数据类型变量
B:在Object类中,equals()方法比较的是两个引用变量的地址值是否相等
C:像String类、包装类、FIle类、Date类等这些类重写了Object类的equals()方法,比较的是两个对象的“实体内容”是否完全相同。
2.toString方法
(1)格式:public String toString();返回值:getClass().getName() + "@" + Integer.toHexString(hashCode())
(2)注意事项
A:当我们直接打印一个对象的引用时,实际默认调用的就是这个对象的toString()方法
B:当我们打印的对象所在的类没有重写Object中的toString方法时,调用的是Object类中定义的toString方法,返回此对象所在的类的类名及对应的堆空间中对象实体的首地址值。
C:可以通过对Object的toString方法的重写,使对象对应的字符串内容有意义。
Java语法基础学习DaySix的更多相关文章
- Java语法基础学习DayEighteen(常用类)
一.String类 1.特点 String代表不可变的字符序列,底层用char[]存放. String是final的. 2.内存解析 3.常用方法 int length() char charAt(i ...
- Java语法基础学习DaySeven
---恢复内容开始--- 一.包装类——Wrapper 1.定义:针对八种基本数据类型定义相应的引用类型——包装类(封装类) boolean——Boolean byte——Byte ...
- Java语法基础学习DayThree
一.流程控制语句补充 1.switch语句 格式: switch(表达式) { case 值1: 语句体1; break; case 值2: 语句体2; break; ... default: 语句体 ...
- Java语法基础学习DayTwentyOne(网络编程)
一.IP地址和端口号 1.作用 通过IP地址,唯一的定位互联网上一台主机. 端口号标识正在计算机上运行的进程,不同进程有不同的端口号,被规定为一个16位的整数0~65535,其中0~1023被预先定义 ...
- Java语法基础学习DayTwenty(反射机制续)
一.Java动态代理 1.代理设计模式的原理 使用一个代理将对象包装起来, 然后用该代理对象取代原始对象. 任何对原始对象的调用都要通过代理. 代理对象决定是否以及何时将方法调用转到原始对象上. 2. ...
- Java语法基础学习DayNineteen(反射机制)
一.Refection定义 1.概述 Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性 ...
- Java语法基础学习DaySeventeen(多线程续)
一.线程的特点 1.线程的分类 java中的线程分为两类:守护线程和用户线程.唯一的区别是判断JVM何时离开. 守护线程是用来服务用户线程的,通过在start()方法前调用Thread.setDaem ...
- Java语法基础学习DaySixteen(多线程)
一.多线程的创建 1.作用 程序需要同时执行两个或多个任务时需要多线程. 程序需要实现需要等待的任务时,如用户输入.文件读写操作.网络操作.搜索等,需要多线程. 需要一些后台运行的程序时,需要多线程. ...
- Java语法基础学习DayFifteen(IO续)
一.缓冲流(处理流的一种) 1.作用:可以提高文件操作的效率 2.使用BufferedInputStream和BufferedOutputStream实现非文本文件的复制 特点:flush()方法 代 ...
随机推荐
- Okhttp 插入缓存拦截器 解析
我们在做网络请求的时候,如果网络请求过于频繁而且请求的数据变动不大,或者基本没有变动,这个时候如果没有缓存功能,我们想一下 会浪费掉多少资源,一次请求刷新一次,去请求一次,不但会消耗用户的流量,而且还 ...
- 正睿 2018 提高组十连测 Day2 T2 B
题目链接 http://www.zhengruioi.com/contest/84/problem/318 题解写的比较清楚,直接扒过来了. B 算法 1 直接按题意枚举,动态规划或是记忆化搜索. 时 ...
- Vue自动化工具(Vue-CLI)的安装
安装VUM 前面学习了普通组件以后,接下来我们继续学习单文件组件则需要提前先安装准备一些组件开发工具.否则无法使用和学习单文件组件. 一般情况下,单文件组件,我们运行在 自动化工具vue-CLI中,可 ...
- Wannafly挑战赛27-A/B
链接:https://www.nowcoder.com/acm/contest/215/A来源:牛客网 题目描述 “White shores, and beyond. A far green coun ...
- Leetcode 1029. 可被 5 整除的二进制前缀
1029. 可被 5 整除的二进制前缀 显示英文描述 我的提交返回竞赛 用户通过次数467 用户尝试次数662 通过次数477 提交次数1964 题目难度Easy 给定由若干 0 和 1 组成的 ...
- 判断runtime是否运行在docker中及从docker中获取宿主机的ip信息
1.判断运行时环境是否运行在docker中 参考:How to determine if a process runs inside lxc/Docker? 确定进程是否在LXC/Docker中运行? ...
- python的数据类型--list和tuple
list是Python的一种数据类型,是一个有序的集合,可以随时添加和删除.写法为list名称+[] list[]内的元素不仅仅为str,可以是数字,布尔值. 访问方法为变量名或者变量[索引],和C的 ...
- oracle 常用字符串函数
select initcap('guodongdong') from dual; /返回字符串并将字符串的第一个字母变为大写; s ...
- 青蛙跳N阶(变态跳)
https://www.nowcoder.com/questionTerminal/22243d016f6b47f2a6928b4313c85387 描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级 ...
- 从线程模型的角度看Netty的高性能
转载:Netty(二) 从线程模型的角度看 Netty 为什么是高性能的? 传统 IO 在 Netty 以及 NIO 出现之前,我们写 IO 应用其实用的都是用 java.io.* 下所提供的包. 比 ...