Android 之路12---Java基础7
来源:互联网 发布:彩蝶排课软件 编辑:程序博客网 时间:2024/05/19 16:07
导读
1.代码的封装
2.使用包进行类管理
3.static关键字
4.代码块
代码的封装
package com.hala.cat;public class Cat { //属性 private String name; private int age; private double weight; //private只允许属性在该类内被操作和访问,而不许在类外被访问 //方法 public void setName(String name){ this.name=name; } public String getName(){ return this.name; } //上边两个方法就是创建公有get/set方法 public int getAge() { return age; } public void setAge(int age) { if(age<0) System.out.println("age值必须不小于0"); else this.age = age; } public double getWeight() { return weight; } public void setWeight(double weight) { if(weight<0) System.out.println("weight值必须不小于0"); //这里可以限制给属性传值的范围,当然也可以通过异常处理来限制 else this.weight = weight; } public void eat(){ this.run(); //this不仅可以穿属性时调用,还可以调用函数 System.out.println("小猫吃鱼"); } public void run(){ System.out.println("小猫快跑"); }}
package com.hala.cat;public class CatTest { public static void main(String[] args) { // TODO Auto-generated method stub Cat one=new Cat(); one.setName("小黄"); one.setAge(-1); one.setAge(6); one.setWeight(7.7); System.out.println("name:"+one.getName()); System.out.println("name:"+one.getAge()); System.out.println("name:"+one.getWeight()); }}
输出结果
age值必须不小于0
name:小黄
name:6
name:7.7
注意,用构造函数也可以给私有属性赋值,但这样不会限定范围,解决方法是,在构造函数里调用set函数
快捷键,在代码空白区域右击按下图会快捷设置属性的get和set方法
使用包进行类管理
同一个包内不允许有同名的类,但不同的包下可以有同名类
导入包的三种方式
方式一:
package com.hala.test;//定义包,必须写在第一行,且只能有一条语句import com.hala.cat.*;//导入了这个包的所有类public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Cat one =new Cat(); }}
输出结果
我是宠物猫
方式二:
package com.hala.test;//定义包,必须写在第一行,且只能有一条语句import com.hala.cat.Cat;//用哪个类导入哪个类public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Cat one =new Cat(); }}
输出结果
我是宠物猫
方式三:
package com.hala.test;//定义包,必须写在第一行,且只能有一条语句public class Test { public static void main(String[] args) { // TODO Auto-generated method stub com.hala.cat.Cat one =new com.hala.cat.Cat(); }}
输出结果
我是宠物猫
辨析
package com.hala.test;//定义包,必须写在第一行,且只能有一条语句import com.hala.cat.*;import com.hala.machines.Cat;public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Cat two=new Cat();//此时会优先选择那个专门导入Cat类的包调用,即com.hala.machines.Cat; com.hala.cat.Cat one =new com.hala.cat.Cat(); //若想用cat包里的Cat类,就要这样写 }}
输出结果
我是机器猫
我是宠物猫
static关键字
public class Cat { //属性 private String name; private int age; private double weight; public static int price;
package com.hala.test;//定义包,必须写在第一行,且只能有一条语句import com.hala.cat.*;public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Cat two=new Cat(); two.price=200; Cat.price=300; //static属性可以通过对象修改,也可以通过类名修改 //而且一旦修改,就是把这个类所有对象的这个属性修改了,也就是类的成员共用的 System.out.println("price:"+two.price); }}
static添加的位置
static 可以加在类的属性前,方法前,静态代码块。如下
public static int price;public static void run(){}static{}
⚠️在非静态的方法中可以调用静态的属性或方法,但反过来不能在静态的方法中调用非静态的属性和方法。可以通过实例化一个对象,再通过对象调用非静态成员
但不能加在类前边,和局部变量前。
代码块
普通代码块:写在方法里
构造代码块:与方法并列写
静态代码块:在构造代码块前加static
调用顺序:静态->构造->普通
package com.hala.machines;public class Cat { //属性 private String name; private int age; private double weight; public static int price; //方法 { System.out.println("我是构造代码块2"); } { System.out.println("我是构造代码块1"); } //构造代码块在产生对象时,构造方法之前被调用 //相同类型的代码块按照顺序被调用,即上边先调用,下边后调用 static{ System.out.println("我是静态代码块"); } //静态代码块在产生类时被调用,所以不管实例化多少对象它只调用一次 //静态代码块里只能调用静态成员 public Cat(){ System.out.println("我是机器猫"); } public void run(){ { System.out.println("我是普通代码块2"); } System.out.println("小猫快跑"); { System.out.println("我是普通代码块1"); } }}
package com.hala.test;//定义包,必须写在第一行,且只能有一条语句import com.hala.machines.*;public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Cat one=new Cat(); Cat two=new Cat(); one.run(); two.run(); }}
输出结果
我是静态代码块
我是构造代码块2
我是构造代码块1
我是机器猫
我是构造代码块2
我是构造代码块1
我是机器猫
我是普通代码块2
小猫快跑
我是普通代码块1
我是普通代码块2
小猫快跑
我是普通代码块1
代码块与局部变量
//这样写是错误的,temp重复命名
public void run(){ int temp=1; int temp=2;//这样写是错误的,temp重复命名 { System.out.println("我是普通代码块2"); } System.out.println("小猫快跑"); { System.out.println("我是普通代码块1"); } }
//这样写是正确的,代码块自成一体
public void run(){ { int temp=1; System.out.println("我是普通代码块2,temp:"+temp); } System.out.println("小猫快跑"); { int temp=2; System.out.println("我是普通代码块1.temp:"+temp); } }
package com.hala.test;//定义包,必须写在第一行,且只能有一条语句import com.hala.machines.*;public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Cat one=new Cat(); one.run(); }}
输出结果
我是普通代码块2,temp:1
小猫快跑
我是普通代码块1.temp:2
//这样写又是错误的,第一个temp生命周期为整个方法
public void run(){ int temp=3; { int temp=1; System.out.println("我是普通代码块2,temp:"+temp); } System.out.println("小猫快跑"); { int temp=2; System.out.println("我是普通代码块1.temp:"+temp); } }
阅读全文
0 0
- Android 之路12---Java基础7
- Android 之路7---Java基础3
- Android温习之路Day7:java基础7
- android复习路之java基础下
- Android 之路5---Java基础1
- Android 之路6---Java基础2
- Android 之路8---Java基础4
- Android 之路8---Java基础4
- Android 之路9---Java基础5
- Android 之路11---Java基础6
- Android 之路13---Java基础8
- Android 之路15---Java基础9
- Android 之路16---Java基础10
- Android 之路17---Java基础11
- Android学习之 Java基础
- Android开发之java基础(-)
- Android基础之Java接口
- android基础之路
- C# 通过exchange发送邮件 defaultuser and use username_password
- 十张思维导图掌握javascript重点
- fresco加载图片+retrofit网络请求+rxjava2+xrecyclerview下拉刷新上拉加载
- 数据结构-查找-顺序查找(1)时间复杂度(n+1)/2
- VS2015 C# System.Data.SQLite
- Android 之路12---Java基础7
- 【iOS】自定义CALayer可能会出现没有动画过程但有动画结果的解析
- CUDA
- 改变viewPager滑动的速度,利用反射完美实现
- layui获取选中行数据
- 递归算法及经典例子实现
- HTML select 复选框 互相值转换
- sftp配置
- 流式布局