静态static

如果一个成员变量使用了static关键字,那么这个变量不再属于对象自己,而是属于所在的类,多个对象共享同一份数据

静态static 关键字修饰成员变量

public class Student {
private String name;
private int age;
static String room;
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;
}
}
public static void main(String[] args){
Student one = new Student("郭靖",18);
//用对象名.变量名给变量赋值
one.room = "101";
Student two = new Student("黄蓉",16);
//姓名:郭靖 年龄18 教室105
System.out.println("姓名:" +one.getName()+" 年龄"+one.getAge()+" 教室"+one.room); //没有对two.room赋值但是也输出了教室101,可见被static修饰过的变量的数据是共享的
//姓名:黄蓉 年龄16 教室105
System.out.println("姓名:" +two.getName()+" 年龄"+two.getAge()+" 教室"+two.room);
}

静态static关键字修饰成员方法

一旦使用static修饰成员方法,那么这就成为了静态方法,静态方法不属于对象,而是属于类的

如果没有static关键字,那么必须首先创建对象,然后通过对象才可以使用他

有static关键字可以通过类名.静态方法名调用方法

public class MethodDemo {
public void method(){
System.out.println("这是一个成员方法");
}
public static void method1(){
System.out.println("这是一个静态方法");
}
}
public class MethodTest {
public static void main(String[] args){
MethodDemo one = new MethodDemo();
//对象名调用方法
one.method();
//对象名调用方法
one.method1();
//类名调用静态方法
MethodDemo.method1();
}

如果有了static,都推荐使用类名称来调用

注意事项

  1. 静态不能直接访问非静态
public class MethodDemo {
int num ;
static int num1;
public void method(){
System.out.println("这是一个成员方法");
//成员方法访问成员变量和静态变量
System.out.println(num);
System.out.println(num1); }
public static void method1(){
System.out.println("这是一个静态方法");
//静态方法访问静态变量
System.out.println(num1);
//静态方法不能够访问非静态变量
//System.out.println(num);编译报错
}
  1. 静态方法不能使用this,因为this代表当前对象,而静态方法属于类。
静态代码块

特点,当第一次用到本来的时候,静态代码块执行唯一一次

/*格式
public class 类名{
static{}
}*/
public class StaticDemo {
static{
System.out.println("静态代码块执行了");
}
public StaticDemo(){
System.out.println("构造方法执行了");
}
}
public class StaticDemotest {
public static void main(String[] args) {
//静态代码块只会执行一次,并且优先于其他语句执行
StaticDemo one =new StaticDemo();
StaticDemo two = new StaticDemo();
} }
//输出结果
静态代码块执行了
构造方法执行了
构造方法执行了
Arrays工具类

public static String toStirng(数组),将参数数组变成字符串

public static void main(String[] args) {
int[] arrays= new int[]{1,2,3,4,5};
String[] arrays1 = new String[]{"骐骥一跃","不能十步","驽马十驾","功在不舍"};
//调用Arraysd的toString方法把数组变成字符串
String str = Arrays.toString(arrays);
String str1 = Arrays.toString(arrays1);
//打印字符串
System.out.println(str);
System.out.println(str1); }

public static void sort(数组),按照默认升序,对数组元素排序

public static void main(String[] args) {
int[] arrays= new int[]{1,63,45,55,88};
String[] arrays1 = new String[]{"骐骥一跃","不能十步","驽马十驾","功在不舍"}; //对数组进行排序
Arrays.sort(arrays);
Arrays.sort(arrays1);
//排序完之后,把他变成字符串,打印输出
System.out.println(Arrays.toString(arrays));
System.out.println(Arrays.toString(arrays1));
//输出结果如下
//[1, 45, 55, 63, 88]
//[不能十步, 功在不舍, 驽马十驾, 骐骥一跃]
}
Arrays字符串倒序练习
public static void main(String[] args) {
//先创建一个字符串
String str = "ERsdf485dfW";
//要排序字符串,需要把字符串变成char数组,可以使用toCharArray方法
char[] chars = str.toCharArray();
//把字符串用sort方法排序好
Arrays.sort(chars);
//然后就可以for循环遍历来倒序
//chars数组的最大索引为长度减一,索引为0也有元素,索引需要>=0
for(int i=chars.length-1;i>=0;i--){
System.out.println(chars[i]);
} }
继承

继承的格式

public class zi extends fu{}

继承中成员变量的访问特点

在子父类的继承关系当中,如果有成员变量重名,则创建子类对象时,访问有两种方式

直接通过子类对象访问成员变量

等号左边是谁,就优先有谁,没有则向上找

public class Fu {
//父类
int num = 100;
}
public class Zi extends Fu{
//子类
int num = 200;
}
public static void main(String[] args) {
Zi zi = new Zi();
//输出的时100还是200?
System.out.println(zi.num);//200
}

间接通过成员方法访问成员变量

方法属于谁,就优先用谁,没有则向上找

public class Fu {
//父类
int num = 100;
public void methodFu(){
System.out.println(num);
}
}
public class Zi extends Fu{
int numZi = 10;
int num = 200;
public void methodzi(){
System.out.println(num);
}
public static void main(String[] args) {
Zi zi = new Zi();
//输出的时100还是200?
System.out.println(zi.num);//200
//这个方法是子类的,优先使用子类的成员变量
zi.methodzi();//200
//这个方法是父类的,优先使用父类的成员变量
zi.methodFu();//100
}

区分子类方法中重名的三种变量

public class Fu {
int num = 10;
}
public class Zi extends Fu{
int num = 20;
public void method(){
int num = 30;
//输出局部变量
System.out.println(num);
//输出本类变量
System.out.println(this.num);
//输出父类变量
System.out.println(super.num);
}
}
/*
*局部变量:
* 本类的成员变量
* 父类的成员变量
* */
public class ExtendsTest {
public static void main(String[] args) {
Zi zi = new Zi();
//调用Zi类方法
zi.method();
}
}

继承中成员方法的访问特点

public class Fu {
public void methodFu(){
System.out.println("父类方法");
}
public void method(){
System.out.println("父类重名方法执行");
}
}
public class Zi extends Fu{
public void methodZi(){
System.out.println("子类方法执行");
}
public void method(){
System.out.println("子类重名方法执行");
}
}
public class ExtendsTest {
public static void main(String[] args) {
Zi zi = new Zi();
//调用Zi类方法
zi.methodFu();
zi.methodZi();
//方法重名,优先使用子类方法
zi.method();
}
}

重写(Override)

概念:在继承关系当中,方法的名称一样,参数列表也一样

重写(Override),方法的名称一样,参数列表也一样

重载(Overload),方法的名称一样,参数列表不一样

继承中构造方法的访问特点

public class Fu {
public Fu(){
System.out.println("我是无参数的父类构造方法");
}
public Fu(int num){
System.out.println("我是有参数的父类重载构造");
}
}
public class Zi extends Fu{

    public Zi(){
//在继承关系中,编译器都会默认赠送一个super()父类构造方法;
//而且还是在子类构造方法的第一行,所以在new对象的时候会先执行
// 父类的构造方法
// super();
super(5);
//在继承关系中,子类会有一个默认的super();
System.out.println("子类构造方法");
}
}
/*
继承关系中,父子类构造方法的访问特点
1.子类构造方法当中有一个默认隐含的"super()"调用
2.子类构造可以通过super关键字来调用父类重载构造
super的父类构造调用,必须在构造方法的第一句
*/
public class ConstructorDemo {
public static void main(String[] args) {
Zi zi = new Zi();
//父类构造方法
//子类构造方法
}
}

super关键字的三种用法

1.在子类的成员方法中,访问父类的成员变量。super.numFu

2.在子类的成员方法中,访问父类的成员方法。super.methodFu

3.在子类的构造方法中,访问父类的构造方法。

this关键字的三种用法

super关键字用来访问父类内容,而this关键字用来访问本类内容,用法也有三种

1.在本类中的成员方法中,访问本类的成员变量

public class Zi extends Fu {
int num = 55;
public void athis() {
int num = 66;
System.out.println(num);//66
System.out.println(this.num);//55
}
}

2.在本类的成员方法中,访问本类的另一个成员方法,

    int num = 55;
public void athis() {
int num = 66;
System.out.println(num);//66
System.out.println(this.num);//55
}
public void bthis(){
System.out.println("bbb");
}
public void cthis(){
this.athis();
System.out.println("ccc");
}
 public static void main(String[] args) {
new Zi().cthis();//输出结果为66 55 ccc
}

3.在本类的构造方法中,访问本类的另一个构造方法

public Zi(){
//重载构造方法两个
//调用下一个构造方法
this(123);
}
public Zi(int n){
//调用下一个构造方法
this(1,2);
}
public Zi(int a,int b){ }
//注意this()调用跟super()一样也必须是构造方法的第一个语句,super和this两张构造调用,不可以同时使用。

练习

public class Fu {
int num = 5;
public Fu(){
System.out.println("我是构造方法");
}
public void method(){
System.out.println("我是父类");
}
}
public class Zi extends Fu {
int num = 6; public void method1(){
int num = 7;
System.out.println(num);
System.out.println(this.num);
System.out.println(super.num);
}
@Override
public void method(){
super.method();
System.out.println("我是子类");
}
}
public class ConstructorDemo {
public static void main(String[] args) {
Zi zi = new Zi();
zi.method1();
zi.method();
//我是构造方法
//7
//6
//5
//我是父类
}
}

Java继承的三个特点

1.Java语言是单继承的,一个类的直接父类只有由唯一一个

  1. Java语言可以多级继承,也就是A类继承B类,B类继承C类
  2. 一个类的直接父类是唯一的,但是父类可以由很多个子类,

抽象类

public abstract class 类名{
public abstract void 方法名(){}
//抽象类中也可以定义普通成员方法
public void 方法名(){}
}

抽象方法和抽象类的使用

  1. 抽象类不能够直接new的抽象类对象
  2. 必须用一个子类继承抽象类才可以使用
  3. 子类必须重写抽象父类当中的所有抽象方法
  4. 创建子类对象进行使用

抽象方法和抽象类的注意事项

  1. 抽象类不能够创建对象

  2. 抽象类,可以有构造方法的,是供子类创建对象时,初始化成员使用的

  3. 抽象类中,不一定包含抽象方法,但是抽象方法一定包含在抽象类中

  4. 抽象类的子类,必须重写抽象父类的所有抽象方法

红包案例

public class AUser {
private int money ;
private String name ; public AUser() {
} public AUser(int money, String name) {
this.money = money;
this.name = name;
} public int getMoney() {
return money;
} public void setMoney(int money) {
this.money = money;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public void show(){
System.out.println("我"+name+"现在的余额是"+money);
}
}
import java.lang.reflect.Array;
import java.util.ArrayList; public class Admin extends AUser{
public Admin() {
} public Admin(int aBalance, String aName) {
super(aBalance, aName);
} public ArrayList<Integer> send(int totalMoney, int count){
ArrayList<Integer> redList = new ArrayList<>();
int i= totalMoney/count;
//判断群主有多少钱
int leftMony = super.getMoney();
if(totalMoney>leftMony){
System.out.println("余额不足");
return redList;
}
//扣钱
super.setMoney(leftMony -totalMoney);
int avg = totalMoney/count;
int mod = totalMoney%count; for(int d=0;d<count-1;d++){
redList.add(avg);
}
int last= avg+mod;
redList.add(last);
return redList;
}
}
import java.util.ArrayList;
import java.util.Random; public class Menber extends AUser{
public Menber() {
} public Menber(int money, String name) {
super(money, name);
}
public void receive(ArrayList<Integer> list){
int index = new Random().nextInt(list.size());
int delta = list.remove(index);
int money = super.getMoney();
super.setMoney(money+delta); } }
import java.util.ArrayList;

public class RedPacket {
public static void main(String[] args) {
Admin admin = new Admin(100,"群主");
Menber one = new Menber(0,"aaa");
Menber two = new Menber(0,"aaa");
Menber three = new Menber(0,"aaa");
admin.show();
one.show();
two.show();
three.show(); ArrayList<Integer> redList = admin.send(20,3);
one.receive(redList);
two.receive(redList);
three.receive(redList); admin.show();
one.show();
two.show();
three.show();
}
}

7天学完Java基础之4/7的更多相关文章

  1. 7天学完Java基础之0/7

    笔记-7天学完Java基础之0/7 1.常用命令提示符(cmd) 启动:Win+R,输入cmd​

  2. 简明易懂,将细节隐藏,面向新手树立web开发概念——学完Java基础语法,超快速上手springboot+mybatiJavaWeb开发

    简明易懂,将细节隐藏,面向新手树立web开发概念 --学完Java基础语法,超快速上手JavaWeb开发 Web本质(先忽视各种协议) Web应用可以理解为浏览器和服务器之间的交互. 我们可以看一个简 ...

  3. 7天学完Java基础之5/7

    接口 接口就是一种公共的规范标准 是一种引用数据类型 定义格式 public interface 接口名称{} java7 中接口可以包含常量,抽象方法:Java8 还可以额外包含默认方法,静态方法: ...

  4. 7天学完Java基础之7/7

    Object类的toString方法 类Object是类层次结构的根类 每个都使用Object作为超类 所有对象都实现这个类的方法 //这个是Object类的子类,实现了其所有方法 public cl ...

  5. 7天学完Java基础之6/7

    final关键字的概念与四种用法 final关键字代表最终,不可改变的 常见四种用法: 可以用来修饰一个类 当前这个类不能有任何子类 可以用来修饰一个方法 当final关键字用来修饰一个方法的时候,这 ...

  6. 7天学完Java基础之3/7

    API概述 什么叫做API? API(Application Programming lnterface),应用程序编程接口. 所谓API就是值好多的类,好多的方法,JDK给我们提供了很多现成的类,我 ...

  7. 7天学完Java基础之1/7

    方法重载 package cn.itcat.day04.demo01; //方法重载就是参数个数不同,参数类型不同,参数类型的顺序不同 //方法重载与参数名称无关,与方法返回值类型无关 //方法重载方 ...

  8. 7天学完Java基础之2/7

    面向对象 面向对象的思想就是值我们要实现一个共功能的时候,我们不自己去做,而是找别人帮我们去做,帮我们去做的这个人就是对象.面向对象强调的是谁来帮我实现这个功能. 类与对象的关系 类:是一组相关属性和 ...

  9. 学完 JAVA SE后学什么 。。。

    我觉得学习j2ee一定要循序渐进,千万不要太急了.把java基础打牢一点,再牢一点.各位,你们在后面学习什么 struts,hibernate,spring,ajax..都很轻松. 第一个阶段(jav ...

随机推荐

  1. Table tr 的隔行变色

    <style type="text/css">    table{border-collapse:collapse;border:1px solid #999;} td ...

  2. Deep Learning for Robotics 资源汇总

    1 前言 在最新Nature的Machine Intelligence 中Lecun.Hinton和Bengio三位大牛的Review文章Deep Learning中.最后谈The Future Of ...

  3. 在vs2005中添加lib库的方法

    方法一:在用到lib的地方加上  //强烈推荐这种方法.#pragma    comment(lib,"libname.lib") 方法二:     点击菜单命令 “项目/属性”, ...

  4. 3531: [Sdoi2014]旅行

    3531: [Sdoi2014]旅行 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 1731  Solved: 772 [Submit][Statu ...

  5. cat /proc/cpuinfo | awk -F: '/name/{print $2}' | uniq -c

    cat /proc/cpuinfo | awk -F: '/name/{print $2}' | uniq -c

  6. Ural 1635 Mnemonics and Palindromes(DP)

    题目地址:space=1&num=1635">Ural 1635 又是输出路径的DP...连着做了好多个了. . 状态转移还是挺简单的.要先预处理出来全部的回文串,tag[i] ...

  7. h5 getUserMedia error PermissionDeniedError

    HTML5 在使用非 localhost 地址访问时打开摄像头失败 .报getUserMedia error PermissionDeniedError,火狐下是可以正常调取的. 需要https: 火 ...

  8. vue中显示和隐藏导航

    const router = new VueRouter({ mode: 'history', routes: [ { path: '/first', component: firstView, me ...

  9. Pyhton:List build-in function

    列表是Python中的可迭代对象之一,在讲列表的内建函数之前我们可以自己在IDE上看看都有那些内建函数,我们可以在pycharm中使用代码及其运行结果如下: print(dir(list)) ['__ ...

  10. oracle:block 的 water mark问题

    看了小布老师关于block里面数据存储的high water mark的实验,自己也做了一遍. SQL> create table x(i int,name varchar(20)); Tabl ...