java学习之旅(day.11)
static详解
static若在类中使用,就是修饰成员变量
static若在方法中使用,就是成员方法?
static加在方法上叫静态方法,加在属性上叫做静态属性
package com.zhang.oop.demo11;
public class Student {
private static int age;//静态变量
//这里加了static的叫静态变量,未加static的叫非静态变量
private double score;//非静态变量
public void run(){
go();//run方法可以访问go的方法
}
public static void go(){
}
public static void main(String[] args) {
//要用Student必须取new
Student student=new Student();
//通过对象的方法输出
System.out.println(student.score);
System.out.println(student.age);
//通过类的方法输出
System.out.println(Student.age);
//System.out.println(Student.score);这种方法不能这样用,假设是静态变量,建议使用类名.变量
// run();无法直接调用,要用以下代码:
new Student().run();//对象.方法
Student.go();//这个可以直接调,去掉Student也可以
//非静态方法可以直接访问这个类中的静态方法,如run方法可以访问go的
//静态方法可以调用静态方法的,但不能调用非静态的方法,即go方法不能调用run方法
go();
//run();报错
}
}
====================================================
package com.zhang.oop.demo11;
public class Person {
/*{
//代码块(匿名代码块) 创建person这个对象的时候就自动创建了,在构造器之前
}
static {
//静态代码块 类一加载就直接执行,永远只执行一次
}
*/
//测试下上面文本中的执行顺序
{//第二个被执行
System.out.println("匿名代码块");
}
static{//第一个被执行
System.out.println("静态代码块");
}
public Person() {//第三个被执行
System.out.println("构造方法");
}
public static void main(String[] args) {
Person person1=new Person();
System.out.println("=============");
Person person2=new Person();
}
/*
程序输出结果:
静态代码块
匿名代码块
构造方法
=============
匿名代码块 //因为static代码块只执行一次,所以此处少了静态代码块
构造方法
*/
}
====================================================
package com.zhang.oop.demo11;
//静态导入包
import static java.lang.Math.random;//此处若不加static,会报错
public class Test {
public static void main(String[] args) {
System.out.println(Math.random());//输出随机数
System.out.println(random());
//但是现在想写成System.out.println(random());要导入包
}
}
抽象类
简单来说,用abstract修饰类,就是抽象类
abstract修饰符可以修饰方法也可以修饰类,如果修饰方法,该方法就是抽象方法,如果修饰类,该方法就是抽象类
抽象类中可以没有抽象方法,但有抽象方法的类一定要声明为抽象类
抽象类不能使用new关键字创建对象,它是用来让子类继承的
抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的
子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类
package com.zhang.oop.demo12;
//在类上使用abstract就变成了抽象类
public abstract class Action {
//方法中什么也不写,是个约束,有人会帮我们实现
//abstract用在方法上就是抽象方法,只有方法名字,没有方法的实现
public abstract void doSomething();
//dosomething中的{}被删掉了
}
===================================================
package com.zhang.oop.demo12;
//抽象类的所有方法必须要由子类实现(抽象类地所以方法,继承了它的子类都必须要实现它的方法),除非子类也是abstract类的,那就没必要了
public class A extends Action {//就写这个会报错:必须重写父类的方法
//extends是单继承,无法继承多个类 接口可以实现多继承
@Override
public void doSomething() {
//抽象类的特点
//1.不能new这个抽象类,只能靠子类去实现它,它是一个约束,就像法律一样,我们要去遵守它
//2.抽象类中可以写普通方法
//3.抽象方法必须在抽象类中
//抽象类就是抽象的抽象:即约束
// 抽象类无法new,那么存在构造器吗?
// 抽象类存在的意义
}
}
接口
普通类:只有具体的实现
抽象类:具体的实现和规范(抽象方法)都有,不能new
接口:只有规范,自己无法写方法,只能干约束,实现约束和实现分离。面向接口编程
接口就是规范,定义的是一组规则
接口的本质是契约,就像法律,制定好后大家都要遵守
声明类的关键字是class,
声明接口的关键字是interface
接口的作用:
- java的接口其实就是一种约束
- 定义一些方法,让不同的人实现
- 接口中默认的方法都是public abstrsct ,默认的常量都是public static final的
- 接口不能直接被实例化(new),因为接口中没有构造方法
- 可以通过implements实现多个接口
- 实现接口必须要重写接口中的方法
package com.zhang.oop.demo13;
//接口定义的关键字是interface,接口都需要有实现类
public interface UserSeverse {
//public void run(){}接口中无法写方法,去类中写
//接口中只能写一些简单的方法,如void run()
//接口中所有定义的方法其实都是抽象的,看不到,是public abstract的
public abstract void run(String name); //你加上它也会显示灰色的,通常不写
//定义一些方法,其实这里只有定义,没有具体的实现,,还需要一个实现类(写个呗:UserServiceImp)
void add(String name);
void delete(String name);
void update(String name);
void query(String name);
//定义一些常量或变量
//定义的所有属性默认的是一个常量
public static final int age=99; //一定义就是一个静态的常量,public static final是灰色的,默认可不写
}
=================================================
package com.zhang.oop.demo13;
//implements 实现
//抽象类 通过extends 单继承 但接口可多继承
//类可以通过implements关键字实现接口
//实现了接口的类,就必须重写接口中的方法,不然会报错
//public class UserServiceImp implements UserSeverse{//需要将方法重写,不重写就会报错
public class UserServiceImp implements UserSeverse,TimeService{//这里实现了UserSeverse和TimeService两个接口
//这就实现了多继承(伪多继承),利用接口实现多继承,类中有方法的实现,接口中只有方法的定义
@Override
public void run(String name) {
}
@Override
public void add(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
@Override
public void query(String name) {
}
@Override
public void timer() {
}
}
==================================================
package com.zhang.oop.demo13;
public interface TimeService {
//这里写个方法
void timer();
}
内部类
内部类就是在一个类的内部定义一个类。如:A类中定义一个B类,则类B相对于类A说就是内部类,类A相对于类B说就是外部类
有:成员内部类
静态内部类
局部内部类:定义在方法中的类,此内部类不能加任何修饰符
匿名内部类
package com.zhang.oop.demo14;
public class Outer {
private int id=10;
public void out(){
System.out.println("这是外部类的方法");
}
//Outer类里再定义一个inner类
public class Inner{
public void in(){
System.out.println("这是内部类的方法");
}
//获得外部类的私有属性,私有方法等
public void getID(){
System.out.println(id);
}
}
//内部类可以直接访问外部类的一些东西,内部类可访问外部类的私有变量
}
/*
package com.zhang.oop.demo14;
public class Application {
public static void main(String[] args) {
Outer outer=new Outer();//new外部类
//内部类要通过外部类来实例化
Outer.Inner inner= outer.new Inner();//new 内部类
inner.in();
inner.getID();
}
}
*/
package com.zhang.oop.demo14;
public class out {
//局部内部类
public void method(){
//类还可以写到方法里
class Inner{
}
}
}
//类还可以写到这个位置,但是类A不能用public,即一个Java文件中只能有一个public class,但是可以有多个class类
class A{//一般当测试类这样写
public static void main(String[] args) {
}
}
=============================================
package com.zhang.oop.demo14;
public class te {
public static void main(String[] args) {
// Apple apple=new Apple();正常时这样实例化的
//但匿名(不要名字)初始化类如下,不用将实例保存到对象中
new Apple().eat(); //匿名内部类
}
}
class Apple{
public void eat(){
System.out.println("1");
}
}
java学习之旅(day.11)的更多相关文章
- Java学习之旅开篇:运行机制及环境搭建
在写这篇博客之前,我想对自己进行简单概括:我从事软件开发工作已经三年多了,并且一直在从事.NET相关项目的开发.为什么突然间想学习Java呢?有以下几个原因: 1. 开发程序三年多来,已经对.NET相 ...
- Java学习之旅基础知识篇:面向对象之封装、继承及多态
Java是一种面向对象设计的高级语言,支持继承.封装和多态三大基本特征,首先我们从面向对象两大概念:类和对象(也称为实例)谈起.来看看最基本的类定义语法: /*命名规则: *类名(首字母大写,多个单词 ...
- Java学习之旅基础知识篇:数据类型及流程控制
经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...
- 201521123016 《Java学习笔记》 第11周学习总结
1. 本周学习总结 2. 书面作业 本次PTA作业题集多线程 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用synchronized修饰方法实现互斥同步访问, ...
- 第一篇,java学习之旅
在java的这座殿堂中,我才刚刚推开了大门,就像是在岔路口找到了一条,走向前进java大门的路. 下面是一些java算法的问题 第一题: package project.model; import j ...
- Java学习之旅(一):探索extends
鄙人为兴趣爱好,0基础入门学习Java,有些心得想法,记录于此,与君分享. 然毕竟新手,学识尚浅,错误之处,希望多多指正批评,也是对我最大的帮助! 前言:本篇文章,主要讨论在子类继承父类之后,一些继承 ...
- Java学习之旅基础知识篇:数组及引用类型内存分配
在上一篇中,我们已经了解了数组,它是一种引用类型,本篇将详细介绍数组的内存分配等知识点.数组用来存储同一种数据类型的数据,一旦初始化完成,即所占的空间就已固定下来,即使某个元素被清空,但其所在空间仍然 ...
- 我的java学习之旅--一些基础
(因为我粗略学过C,C++,Python,了解过他们的一些语法,所以为了使得java的入门更为顺畅,便会忽略一些和C语法相类似的地方,着重点明一些java自己的特色之处.也减轻一下自己写文字的负担.) ...
- Java学习之旅(二):生病的狗1(逻辑推导)
前言:本篇文章属于个人笔记,例化了一些代码,不知是否合理,请指教. 中午看到一位同学的面试题,觉得很烧脑,烧脑不能一个人烧,要大家一起烧. 村子中有50个人,每人有一条狗.在这50条狗中有病狗(这种病 ...
- java学习第六天2020/7/11
一. 今天先是对昨天的知识进行了练习: package 数组; import java.util.Random; import java.util.Arrays; public class 随机数排序 ...
随机推荐
- 可能有人听过ThreadLocal,但一定没人听过ThreadLocal对象池
目录 简介 ThreadLocal ThreadLocalMap Recycler 总结 简介 JDK中的Thread大家肯定用过,只要是用过异步编程的同学肯定都熟悉.为了保存Thread中特有的变量 ...
- VMware下CentOS7.6安装openGauss
VMware 下 CentOS7.6(7.9)安装 openGauss centos 安装 这里我使用的是 vmware workstation Pro 15 虽然官网了解了一下 openGauss ...
- 限时招募高校学生,带你沉浸式体验HDC.Together 2023
- The First 寒假集训の小总结
转眼间十五天的寒假集训已经结束,也学习到了许多新知识,dp,线段树,单调栈和单调队列......,假期过得还是很有意义的,虽然我的两次考试成绩不尽人意(只能怪我自己没有好好理解知识点还有好好做题),但 ...
- CentOS6.5安装与配置JDK-7
系统环境:centos-6.5 安装方式:rpm安装 软件:jdk-7-linux-i586.rpm 下载地址:http://www.oracle.com/technetwork/java/javas ...
- 重新点亮linux 命令树————权限的修改[十]
前言 简单介绍一下文件的权限修改. 正文 chmod 修改文件.目录的权限 chmod u+x /tmp/testfile chmod u-x /tmp/testfile u 表示用户 g 表示组 o ...
- 重新整理.net core 计1400篇[五] (.net core 添加mvc 中间件 )
前言 前面提过.net core web实际上是一个服务和若干个中间件组成. 现在我们有一个服务了,那么可想而知我们要完成mvc这种功能,我们需要的就是一个中间件. 好的,接下来,我们只要添加中间件即 ...
- nginx请求头相关漏洞修复(http host&X-XSS-Protection)
nginx请求头相关漏洞修复(http host&X-XSS-Protection) 参考链接:Nginx常见漏洞处理 - 码农教程 (manongjc.com) Web应用漏洞-NGINX各 ...
- 通过定时SQL提取阿里云API网关访问日志指标
简介: 阿里云API网关服务提供API托管服务,提供了强大的适配和集成能力,可以将各种不同的业务系统API实现统一管理.API网关同时支持将API访问日志一键存储到日志服务,通过日志服务强大的查询分析 ...
- Koordinator v0.7: 为任务调度领域注入新活力
简介: 在这个版本中着重建设了机器学习.大数据场景需要的任务调度能力,例如 Coscheduling.ElasticQuota 和精细化的 GPU 共享调度能力.并在调度问题诊断分析方面得到了增强,重 ...