Java学习笔记

1.多组输入

import java.util.*;
class Input
{
	public static void main(String[] args){
		Scanner input=new Scanner(System.in);
		while(input.hasNext()){//多次输入
			int n=input.nextInt();
			System.out.println(n);
		}
	}
}

2.static关键字:
        static关键字可以修饰属性:(所有对象的相同属性)
                ----该属性在方法区中开辟空间,并且所有对象都可以访问。
                ----与类同生死,生命周期比较长
                ----优先于对象
                ----访问时可以直接使用 类名.属性名 或 引用名.属性名
                ----引用为null,也可以访问静态属性
        好处:节省空间

class Student3{
	//非静态属性,创建对象后存在(也叫实例属性)
	String name;

	//静态属性,也叫做类的属性,优先于对象存在
	static String address;
	static{//静态代码块  
		address="北京市";
	}

	//静态方法,也叫做类的方法
	public static void print(){
		System.out.println("OK!");
		//System.out.println(name);报错
		//静态方法不能引用非静态变量
	}
}
class Student3Test
{
	public static void main(String[] args){
		 //未创建对象也可访问
		 System.out.println(Student3.address);//北京市
		 Student3.print();
		 //创建对象为null
		 Student3 a=null;
		 System.out.println(a.address);//不报错,输出”北京市“
		 a.print();
	}
}

3.方法重载:

  •    在同一个类中,必须方法名称相同,参数列表不同(类型/个数/顺序不同),与返回值类型无关。
  •    调用时根据参数类型自动匹配相应方法。
class ChongZai
{
	//max函数重载
	public static int max(int a,double b){
		return a>b?a:(int)b;
	}
	public static double max(double a,int b){
		return a>b?a:b*1.0;
	}
	public static void main(String[] args){
		System.out.println(ChongZai.max(1,3.0));//匹配第一个,输出3
		System.out.println(ChongZai.max(2.0,1));//匹配第二个,输出2.0
	}
}

4.面向对象

概念:采用虚拟世界“模拟现实”生活,必须保证模拟一致;

  • 类:对同一事物的抽象描述(电脑类、学生类、、、)
  • 对象:具体的实例(我的电脑)
  • 类与对象的关系:抽象和具体的关系
  • 属性:对象的特征
  • 方法:对象做的事
import java.util.*;
class Computer//Computer类
{
	//属性也叫成员变量
	String color;
	String brand;
	double price;

	//构造方法(方法名必须是类名)----无参构造
	public Computer(){
		Scanner input=new Scanner(System.in);
		this.color=input.next();
		this.brand=input.next();
		this.price=input.nextDouble();
	}
	//构造方法(方法名必须是类名)----带参构造 
	public Computer(String color,String brand,double price){
		this.color=color;
		this.brand=brand;
		this.price=price;
	}
	//构造方法的重载:构造方法名字相同,参数类型不同,调用时自动匹配执行

	//方法:显示成员信息
	public  void show1(){
		System.out.println("颜色:"+color);
		System.out.println("品牌:"+brand);
		System.out.println("价格:"+price);
	}
	public void show2(String color){
		//color为与成员变量同名的局部变量;
		System.out.println("输出局部变量color:"+color);//局部变量优先,输出蓝色
		System.out.println("输出成员变量color:"+this.color);//指定成员变量,输出银色
		this.color=color;//局部变量给成员变量赋值;
		System.out.println("被局部变量赋值后的成员变量color:"+this.color);
	}
}
class ComputerTest
{
	public static void main(String[] args){
		Computer c=new Computer();//自己输入
		c.show1();
		Computer cc=new Computer("银色","Xiaomi",4999);//赋值
		cc.show2("金色");
		//cc=null;引用名称为null则无法访问对象属性,会出现空指针异常
	}
}

5.封装

作用:隐藏类的内部信息,不允许外部程序直接访问(筛选)
操作步骤:
                 1.属性设置为私有,只能在本类使用
                 2.设置属性的get取值和set赋值方法
                 3.set里面适当编写判断语句

//编写学生类
class Student2{
	//属性
	String name;
	//封装第一步:将属性设为私有(只能在当前类中使用)
	private int age;
	char sex;
	

	//封装第二步:编写对应属性的赋值方法set
	public void setAge(int age){
		if(age>0&&age<100)
			this.age=age;
		else
			this.age=18;//默认18
	}

	public void show(){
		System.out.println("姓名:"+name+"\n年龄:"+age+"\n性别:"+sex);
	}
}
//编写测试类
class Student2Test
{
	public static void main(String[] args){
		Student2 s=new Student2();
		s.name="AEIP";
		s.sex='男';
		s.setAge(10086);
		s.show();
		//10086年龄和a性别不符合实际,解决办法:赋值前对值判断,合法才能赋值
	}
}

6.继承

在java中,子类继承父类,好处:减少代码冗余性

注意:

  • 子类继承除构造函数外的父类所有方法属性
  • 一个子类只能继承一个直接的父类,称为单根性 
  • 父类private属性不能继承
  • 创建子类对象时,先跳到子类相匹配的构造方法中,如果子类未指定调用父类哪个构造方法,则默认调用父类无参构造方法。
//编写师生类
class TeaStu
{
	String name;
	char sex;
	int age;
	public void show(){
		System.out.println("姓名:"+name+"\n性别:"+sex+"\n年龄:"+age);
	}
}
//编写学生类
class Student extends TeaStu{
	int results;
	public Student(String name,char sex,int age,int results){
		this.name=name;
		this.sex=sex;
		this.age=age;
		this.results=results;
	}
	public void show(){
		super.show();
		System.out.println("成绩:"+results);
	}
	public void study(){
		System.out.println("学习。。。");
	}
}
//编写教师类
class Teacher extends TeaStu{
	int salary;
	public Teacher(String name,char sex,int age,int salary){
		this.name=name;
		this.sex=sex;
		this.age=age;
		this.salary=salary;
	}
	public void show(){
		super.show();//直接调用父类
		System.out.println("薪水:"+salary);
	}
	public void teach(){
		System.out.println("教学。。。");
	}
}
//编写测试类
class Test1
{
	public static void main(String[] args){
		Student s=new Student("aeipyuan",'男',21,88);
		s.show();
		s.study();
		Teacher t=new Teacher("AEIPYUAN",'男',22,9999);
		t.show();
		t.teach();
	}
}

7.多态

  •  概念:多个对象调用同一方法得到不同结果
  • 语法格式 :父类类名 引用名 = new 子类类名
  • 性质:是多态时,引用名称只能访问父类中的属性和方法,但是优先访问子类重写的方法
  • 满足条件:

                      子类必须继承父类

                      子类必须重写父类方法

  • 多态好处: 减少代码冗余性
  •  两种类型转换:

                       1)向上转型

                       2)如果想访问子类独有属性和方法,向下转型(强制类型转换)

class Pet
{
	public void eat(){
		System.out.println("正在吃。。。");
	}
}
class Cat extends Pet
{
	public void eat(){
		System.out.println("正在吃鱼。。");
	}
	public void catching(){
		System.out.println("抓老鼠。。。。。");
	}
}
class Dog extends Pet
{
	public void eat(){
		System.out.println("正在啃骨头。。。");
	}
}
class Master
{
	public void feed(Pet pet){
			pet.eat();
	}
}
class Test11
{
	public static void main(String[] args){
		Master m=new Master();
		m.feed(new Cat());//根据new的内容不同调用不同的子类
		m.feed(new Dog());

		Pet p=new Cat();//构成多态,向上转型
		p.eat();
		//p.catching();//报错,多态不能访问子类独有属性和方法
		Cat cat=(Cat)p;//向下转型(强制类型转换)
		cat.catching();
		//Dog dog=(Dog)p;
		//报错,引用名称不符合Dog类型,防止报错可以先判断if(p instanceof Dog);
	}
}

 

posted @ 2019-05-05 09:55  aeipyuan  阅读(177)  评论(0编辑  收藏  举报