栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Day

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Day

1. 对象 1.1 实例化和使用
package test;

public class OOP_01 {
	int age ;
	public static void main(String[] args) {
		
		OOP_01 o = new OOP_01();
		//每new一次就会创建一个全新的对象
		OOP_01 o1 = new OOP_01();
		//更改o1中的age的值
		o1.age = 10;
		//打印调用的是o中的age,没有被改变,所以是0
		System.out.println(o.age);
		//打印的是o1中的age,此时已经被赋值为10
		System.out.println(o1.age);
	}

}
1.2 javaBean

JavaBean : JavaBean是公共Java类,但是为了编辑工具识别,需要满足至少三个条件:有一个public默认构造器(例如无参构造器,)属性使用public 的get,set方法访问,也就是说设置成private,同时get,set方法与属性名的大小也需要对应。例如属性name,get方法就要写成,public String getName(){},N大写。需要序列化。这个是框架,工具跨平台反映状态必须的最近看,里面讲到JavaBean最初是为Java GUI的可视化编程实现的.你拖动IDE构建工具创建一个GUI 组件(如多选框),其实是工具给你创建java类,并提供将类的属性暴露出来给你修改调整,将事件监听器暴露出来.

EJB : 在企业开发中,需要可伸缩的性能和事务、安全机制,这样能保证企业系统平滑发展,而不是发展到一种规模重新更换一套软件系统。 然后有提高了协议要求,就出现了Enterprise Bean。EJB在javabean基础上又提了一些要求,当然更复杂了。

POJO :  有个叫Josh MacKenzie人觉得,EJB太复杂了,完全没必要每次都用,所以发明了个POJO,POJO是普通的javabean,什么是普通,就是和EJB对应的。      总之,区别就是,你先判断是否满足javabean的条件,然后如果再实现一些要求,满足EJB条件就是EJB,否则就是POJO。

package test;

public class OOP_03 {

	public static void main(String[] args) {
		Customer c = new Customer();
		c.setAge(18);
		c.setName("张三");
		System.out.println(c.getName());
		System.out.println(c.getAge());
		//重新对c赋值为null
		c = null;
		//Exception in thread "main" java.lang.NullPointerException
		//当我们用null值去调用成员属性的时候会报出空指针异常
//		System.out.println(c.getAge);
		//不会报错是因为i是静态属性,和堆内存没有关系
		//当我们使用引用变量调用静态属性的时候,在编译时就会把该变量转换为对应的类名去调用
		System.out.println(c.i);
		Customer c1 = new Customer();
		//不管是不是null,都会转换为类名调用
		//所以说静态变量是所有对象共有的属性和值
		System.out.println(c1.i);
		System.out.println(Customer.i);
	}	
		}
class Customer {
	
	static int i = 1;
	private int age;
	private String name;
	
	public void setAge(int age_){
		age = age_;
	}
	public void setName(String Name_){
		name = Name_;
	}
	public int getAge(){
		return age;
	}
	public String getName(){
		return name;
	}
		
}
	

1.3 常见异常

//Exception in thread "main" java.lang.NullPointerException

 //当我们用null值去调用成员属性的时候会报出空指针异常

1.4 对象调用静态属性
public class OOP_03 {

	public static void main(String[] args) {
		Customer c = new Customer();
		c.setAge(18);
		c.setName("张三");
		System.out.println(c.getName());
		System.out.println(c.getAge());
		//重新对c赋值为null
		c = null;
		//Exception in thread "main" java.lang.NullPointerException
		//当我们用null值去调用成员属性的时候会报出空指针异常
//		System.out.println(c.getAge);
		//不会报错是因为i是静态属性,和堆内存没有关系
		//当我们使用引用变量调用静态属性的时候,在编译时就会把该变量转换为对应的类名去调用
		System.out.println(c.i);
		Customer c1 = new Customer();
		//不管是不是null,都会转换为类名调用
		//所以说静态变量是所有对象共有的属性和值
		System.out.println(c1.i);
		System.out.println(Customer.i);
	}	
		}
class Customer {
	
	static int i = 1;
	private int age;
	private String name;
	
	public void setAge(int age_){
		age = age_;
	}
	public void setName(String Name_){
		name = Name_;
	}
	public int getAge(){
		return age;
	}
	public String getName(){
		return name;
	}
		
}
1.5 传值和传引用
package test;

public class OOP_04 {

	public static void main(String[] args) {
		int i = 10;
		m1(i);
		//此处调用m1方法,但是m1方法中执行完i++之后没有返回值,所以此处还是输出10
		System.out.println(i);
		System.out.println("===========");
		A a = new A(10);
		m2(a);
		System.out.println(a.age);
	}
	public static void m1(int i){
		i++;
		//执行了i++,输出11
		System.out.println(i);
	}
	public static void m2(A a){
		//此时执行++的不是i,而是地址为a.age的数值
		a.age++;
		//打印的也是该地址上的值,所以输出还是11
		System.out.println(a.age);
	}
}

class A{
	int age;
	public A(int age_){
		age=age_;
	}
}
1.6 变量的优先级

        当局部变量于静态变量同名时,在方法中局部变量的优先级大于静态变量

public class OOP_05 {
	//静态变量和成员变量不可以同名
	int a = 1;
	//若定义static int a=1;就会报错
	static int b = 1;
	public static void main(String[] args) {
		//一个作用域中不可以有同名的变量
		//但是局部变量和静态变量、成员变量同名
		int a = 1;
		int b = 1;
		//当局部变量于静态变量同名时,在方法中局部变量的优先级大于静态变量
		System.out.println(b);
		//要想使用静态变量,则余姚使用类名区分(相当于地址)
		System.out.println(OOP_05.b);
	}
}
1.7 如何区分同名的构造方法和成员方法
package test;


public class OOP_06 {

	public static void main(String[] args) {
		OOP_06 o = new OOP_06();
		//因为是构造方法,不能有参数
//		OOP_06 o = new OOP_06(11);
		
	}
	//没有返回值类型,所以是构造方法
	public OOP_06() {
		System.out.println("我是构造方法");
	}
	//有void,说明是没有返回值的成员方法
	public void OOP_06(int i) {
		System.out.println("我是构造方法");
	}
}

2. this 2.1 this是什么

 this是每个对象中保存自身内存地址的一个引用类型的成员变量,就相当于我们说“我”一样

2.2 this能干什么

this的作用:
              1.用在成员方法和构造方法中,可以区分同名的局部变量和成员变量 语法 : this.xxx = xxx;
              2.用在某个构造方法中用于重载调用当前类中的其他构造方法,提高代码重用 语法 : this(参数) ; 必须写在构造方法第一行
              3. return this; 可以做到链式调用
  核心原理 : 前者的返回值,一定是可以调用后者的引用
   在一个成员方法中,哪个对象调用的这个方法,this就是哪个对象

2.3 this怎么用 2.3.1 区分成员变量和局部变量
public class This_01 {

	public static void main(String[] args) {
		This_01 t = new This_01(1);
		//设置age的值为10
		t.setAge(10);
		System.out.println(t.age);
	}

	int age;
	//构造方法
	public This_01(int age) {
		this.age = age;
	}
	//静态方法
	public void setAge(int age) {
		this.age = age;
	}
}
2.3.2 构造方法重载调用

在构造方法中,使用this(参数)可以重载调用当前类的其他构造方法

但是在重载调用时this必须写在第一行

public class This_02 {

	public static void main(String[] args) {
		MyDate date1 = new MyDate();
		// 新创建的对象默认值都是0,所以是0年0月0日
		date1.print();
		date1.setYear(2000);
		date1.setMonth(1);
		date1.setDay(1);
		// 2000年1月2日
		date1.print();

		// 需求 : 创建时间对象的时候,必须有年月日(全参构造)
		MyDate date2 = new MyDate(2000,1,1);
		// 2000年1月1日
		date2.print();

		// 需求 : 创建时间对象的时候,可以传入年月日,也可以不传入年月日
		// 如果不传递,则默认是 1970年1月1日(一个全参,一个无参)
		MyDate date3 = new MyDate();
		// 1970年1月1日
		date3.print();
	}

}
class MyDate {
	// 成员变量
	private int year;
	private int month;
	private int day;

	//定义全参构造
	public MyDate(int year, int month, int day) {
		this.year = year;
		this.month = month;
		this.day = day;
	}

	// 定义无参构造
	public MyDate() {
		// this.year = 1970;
		// this.month = 1;
		// this.day = 1;
		// 重载调用 上面的有参构造,做到代码复用
		// 但是 该语句 必须在构造方法第一行
		this(1970, 1, 1);
	}

	// getter/setter
	public int getYear() {
		return year;
	}

	public void setYear(int year) {
		this.year = year;
	}

	public int getMonth() {
		return month;
	}

	public void setMonth(int month) {
		this.month = month;
	}

	public int getDay() {
		return day;
	}

	public void setDay(int day) {
		this.day = day;
	}

	// 需求 : 按照指定格式 打印 年月日
	public void print() {
		System.out.println(year + "年" + month + "月" + day + "日");
	}
}
2.3.3 链式调用
package This;

public class This_03 {

	public static void main(String[] args) {
		//链式调用
		This_03 t = new This_03();
		t.m1();
		t.m2();
		// 链式调用
		// 前者的返回值,一定是可以调用后者的引用
		t.m1().m2();
	}
	public This_03 m1() {
		System.out.println("m1");
		return this;
	}

	public This_03 m2() {
		System.out.println("m2");
		return this;
	}
}


2.3.4 注意

this不能出现在静态方法中

3. static 3.1 static是什么

         static是个修饰符,用来区分静态和成员

3.2 static能做什么

        static : 是个修饰符,用来区分静态和成员
        可以修饰三个东西 : 静态变量 , 静态方法 , 静态语句块

3.3 怎么用
 
public class Static_01 {

	public static void main(String[] args) {
		System.out.println("main方法");
	}
	// 如果有多个语句块,则从上往下执行
	static {
		System.out.println("1");
	}
	static {
		System.out.println("2");
	}
}

静态变量初始化时机
package Static;

public class Static_03 {

	public static void main(String[] args) {
		System.out.println("main");
	}

	// 静态变量 也是在类加载阶段初始化的
	//如果有多个静态变量,那么和静态语句块优先级一致,从上往下初始化
	static int i = 1;
	static {
		System.out.println("静态语句块 : " + i);
	}

}
3.4 实例语句块
package Static;

public class Static_02 {

	public static void main(String[] args) {
		System.out.println("main方法");
		Static_02 s = new Static_02();
		Static_02 s1 = new Static_02();
	}
	public Static_02(){
		System.out.println("构造方法");
	}
	static{
		System.out.println("静态语句块");
	}
	{
		System.out.println("实例语句块");
	}
	
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/318601.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号