JAVA小记3(第三周)

 

目录

 

 

面向对象下

1.final关键字:

注:final修饰的成员变量,在未初始化时,JAVA虚拟机不会为final修饰的变量默认初始化,因此必须在声明时立即初始化或者在构造方法中进行初始化。

2.抽象类

3.static关键字

注:static只能修饰成员变量,在修饰局部变量时,会报错。

4.接口

注:当Child 继承Parent时,需要实现Parent接口中所有方法,任何实现继承接口的类,必须实现该接口继承的其他接口,除非类被声明为abstract。

5.接口与抽象类的区别

注:接口一般不会写常量,如果有,要赋初值,如下图片所示。

6.instanceof关键字

7.object类

判断两个对象是否相等,尽量使用equals()方法,而不是用==来判断是否对象相等,==也可能因为new新建的对象变化导致值相同,但报不同。

 8.多态

多态存在的三个必要条件

类型转换

9.esclipe中的快捷键与食用方法


面向对象下

 

1.final关键字:

1.final修饰的类不能被继承,且final类中的所有成员方法都会被隐式地指定为final方法。

2.final修饰的方法不能被子类重写

3.final修饰的变量是常量,初始化后不能再修改

注:final修饰的成员变量,在未初始化时,JAVA虚拟机不会为final修饰的变量默认初始化,因此必须在声明时立即初始化或者在构造方法中进行初始化。

4.final与static的区别是啥(static关键字在第三项)

static作用于成员变量用来表示只保存一份副本,而final的作用是用来保证变量不可变

两次打印的j值都是一样的,而i的值却是不同的,因此final是永远不会改变的。

final关键字的好处

  # final关键字提高了性能。JVM和Java应用都会缓存final变量。 

  # final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。

  # 使用final关键字,JVM会对方法、变量及类进行优化。

  # final和abstract这两个关键字是反相关的,final类就不可能是abstract的

  # 在匿名类中所有变量都必须是final变量
 

2.抽象类

1.用abstract修饰的方法,称为抽象方法,只有方法的声明,没有方法体;

用abstract修饰的类,称为抽象类,抽象类可以不包含任何抽象方法。

2.子类继承的父类为抽象类时,必须实现父类所有的抽象方法,否则子类必须声明为抽象类

abstract class A{//定义一个抽象类
	
	public void fun(){//普通方法
		System.out.println("存在方法体的方法");
	}
	
	public abstract void print();//抽象方法,没有方法体,有abstract关键字做修饰
	
}

上面所说,就是一般的抽象类的说明,在写管理系统时经常要用到抽象类或者接口,先定义框架,然后在进行详细功能的实现

注:抽象类的使用原则如下:
(1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public;
(2)抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理;
(3)抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类;

3.抽象类中有构造方法么?
由于抽象类里会存在一些属性,那么抽象类中一定存在构造方法,其存在目的是为了属性的初始化。
并且子类对象实例化的时候,依然满足先执行父类构造,再执行子类构造的顺序。
4.外部抽象类不允许使用static声明,而内部的抽象类运行使用static声明。(关于static的介绍就在第三条)

package com.azhe.www;

static abstract class A{//在外部定义一个抽象类
	
	public abstract void print();
	
}

class B extends A{
	
	public void print(){
		System.out.println("**********");
	}
}
public class TestDemo {

	public static void main(String[] args) {
		A a = new B();//向上转型
		a.print();
	}

}

改程序无法正常运行,会报错,说明外部类不能用static声明

 

package com.azhe.www;

abstract class A{//定义一个抽象类
	
	static abstract class B{//static定义的内部类属于外部类
		public abstract void print();
	}
	
}

class C extends A.B{
	
	public void print(){
		System.out.println("正确输出");
	}
}
public class TestDemo {

	public static void main(String[] args) {
		A.B ab = new C();//向上转型
		ab.print();
	}

}

使用static声明的内部抽象类相当于一个外部抽象类,继承的时候使用“外部类.内部类”的形式表示类名称

结果程序正常运行,由此说明,内部的抽象类运行使用static声明,此时内部类相当于是一个外部类。

 

3.static关键字

1.静态变量

使用static修饰的变量将被类的所有对象共享,若未用static修饰属于具体对象独有

class Person{
    int number;
public Persion()
{
number++;
}
}
public class TestNumber{
public static void main(string[]args){
Persion p1=new Persion();
Persion p2=new Persion();
System.out.println(p2.number);}

}

如上述代码,输出结果为1,因为p1与p2是分别对number加一。

class Person{
static int number;
public Persion()
{
number++;
}
}
public class TestNumber{
public static void main(string[]args){
Persion p1=new Persion();
Persion p2=new Persion();
System.out.println(p2.number);}

}

number加上static修饰后,输出结果为2,这是因为p1和p2同时对同一个number操作。

注:static只能修饰成员变量,在修饰局部变量时,会报错。

2.静态方法

静态方法只能访问静态方法或静态变量。

 

4.接口

1.JAVA中提供关键字interface来声明接口

提供关键字implements来实现接口

2.接口中定义的变量和方法都包含默认的修饰符,如下面代码所示:

interface Parent{
String name=null;//等价于 public static final String name;
void say();//等价于 public abstract void say();

}

3.接口的继承支持多继承;

注:当Child 继承Parent时,需要实现Parent接口中所有方法,任何实现继承接口的类,必须实现该接口继承的其他接口,除非类被声明为abstract。

下面是接口的声明及实现测试样例

package com.wz.interfacedemo;

interface A{//定义一个接口A

    public static final String MSG = "hello";//全局常量

    public abstract void print();//抽象方法
}

interface B{//定义一个接口B

    public abstract void get();
}

class X implements A,B{//X类实现了A和B两个接口

    @Override
    public void print() {
        System.out.println("接口A的抽象方法print()");
    }

    @Override
    public void get() {
        System.out.println("接口B的抽象方法get()");
    }

}

public class TestDemo {

    public static void main(String[] args){

        X x = new X();//实例化子类对象
        A a = x;//向上转型
        B b = x;//向上转型

        a.print();
        b.get();
    }

}

 

5.接口与抽象类的区别

注:接口一般不会写常量,如果有,要赋初值,如下图片所示。

 

字符串name若未赋初值,会报错。

6.instanceof关键字

JAVA提供关键字instanceof关键字来判断一个对象是否是一个类的(或接口)的实例,

表达式返回为boolean值,例如如下代码所示

public class COM {
	public static void main(String[] args) {
		B v = new B();
		A a = v;
		if(a instanceof B) {
			System.out.println("start1");  
		}
	}
}
interface A{
}
class B implements A{
	}
}

7.object类

1.在Java语言里,Object类是所有类的父类
如果一个类没有指定父类,则它默认父类就是Object

2. toString()方法会默认返回一个描述该对象的字符串,由该对象的所属类名,@和对象的十六进制形式的内存地址组成,

也可自己重写toString方法来实现自己想要的功能,toString()是Object的一个方法,重写这个方法,可以在调试的时候快速显示对象的值。例如

package www.azhe.com;

public class Student
{
	public String id;
	public String name;
	public boolean sex;
	
	@Override
	public String toString()
	{
		String s = "学号: " + id + ", 姓名: " + name ;
		
		if ( sex ) 
		{
			s = s + "(男)";
		}
		else
		{
			s = s + "(女)";
		}
		return s;
	}
}

 

Student stu = new Student();
	stu.id = "52581";
	stu.name = "azhe";
	stu.sex = true;		
	System.out.println("学生信息: " + stu);

 

 

如图所示,程序运行结果如图所示,重写了tostring函数后,当字符串与Student对象拼接时,等效于:
System.out.println("学生信息: " + stu.toString() );
而其中stu.toString() ,就是将stu对象转成字符串显示。

3.equals()方法

判断两个对象是否相等,尽量使用equals()方法,而不是用==来判断是否对象相等,==也可能因为new新建的对象变化导致值相同,但报不同。

因此在比较两个对象是否内容相同时,一般使用equals,在写管理系统时,经常会用到equals()方法来比较输入的内容与存在的内容是否相同,如下所示:

 

 

 8.多态

 多态是同一个行为具有多个不同表现形式或形态的能力。

多态就是同一个接口,使用不同的实例而执行不同操作。

多态性是对象多种表现形式的体现。

  • 多态存在的三个必要条件

  • 继承
  • 重写
  • 父类引用指向子类对象
  • 方式一:重写:
  • 这个内容已经在上一章节详细讲过,就不再阐述,详细可访问:Java 重写(Override)与重载(Overload)。
  • 方式二:接口
    生活中的接口最具代表性的就是插座,例如一个三接头的插头都能接在三孔插座中,因为这个是每个国家都有各自规定的接口规则,有可能到国外就不行,那是因为国外自己定义的接口类型。
    java中的接口类似于生活中的接口,就是一些方法特征的集合,但没有方法的实现。
  • 方式三:抽象类和抽象方法

类型转换

子类转化为父类,可能丢失自己本身的原来的一些方法!

 

  1. 父类引用指向子类对象

  2. 把子类转换为父类,向上转型;不用强制转换

  3. 想把父类转化为子类,向下转型;需要强制转换,强制转换可能会丢失一些方法,此时只能调用父类的方法,子类的方法无法调用


​
public class Protion{
    public static void main(String[] args) {
        //类型之间的转化:基本类型转换   高转低(强转),低转高不需要强转
        //父与子
        //高                    低
        Person obj = new Student();
        //student将这个对象转化为Student类型,就可以使用Student类型的方法了!
        Student obj1 = (Student) obj;
        obj1.print();
        ((Student) obj).print();
    }
}

 

 

9.esclipe中的快捷键与食用方法

Alt+方向键

    这也是个节省时间的法宝。这个组合将当前行的内容往上或下移动。在try/catch部分,这个快捷方式尤其好使

ctrl+m

    大显示屏幕能够提高工作效率是大家都知道的,Ctrl+m是编辑器窗口最大化的快捷键。

ctrl+1

     修改建议的快捷键

ctrl+T

查看一个类的继承关系树,是自顶向下的,再多按一次Ctrl+T, 会换成自底向上的显示结构。

提示:选中一个方法名,按Ctrl+T,可以查看到有这个同名方法的父类、子类、接口。

助记:"T"------->"Tree"----->"层次树"

Ctrl+O

查看一个类的纲要,列出其方法和成员变量。提示:再多按一次Ctrl+O,可以列出该类继承的方法和变量。

助记:"O"--->"Outline"--->"纲要"


ctrl+1Getter与Setter(写管理系统时实用!)


在Java里,类的属性一般设置为private。那么,外部还怎么访问属性的值呢?
Getter: 添加一个方法,用于读取该属性的值
Setter: 添加一个方法,用于设置该属性的值
方法的命名规则:

get + 属性名
set + 属性名
注意把属性名的首字母大写,如setNumber当写一个系统的时候,有时候也许你会需要些十七八个甚至更多的set或是get函数,注意,eclipse里可以自动添加 Getter/Setter!

如下图书管理系统所示,将书写大量set,get函数,可以使用快捷键来节省时间。
 

 

如下操作就可以创建set,get函数

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值