Java进阶总结3
1.访问权限控制符
/**
* 访问权限控制符
* 控制符 修饰 范围
* private 字段、方法 本类
* 默认 字段、方法、类 同包
* protected 字段、方法 同包、不同包
* public 字段、方法、类 同包、不同包
* */
1.1测试private权限修饰符
package day08;
public class FirstDemo {
//属性
private String name;
//方法
private void study(){
System.out.println(name+"Hello");
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
FirstDemo demo=new FirstDemo();
demo.name="尊";
demo.study();
}
}
//测试pricate修饰符
class FirstDemo1{
public void method() {
FirstDemo demo1=new FirstDemo();
//demo1.name="安娜";
}
}
输出结果:
1.2测试默认权限修饰符
package day08;
public class SecondDemo {
String like;
void toEat(){
System.out.println("大餐");
}
}
//默认访问权限修饰符
class SecondDemo1{
}
package day08;
//在同包中不需要import引用
public class TestDemo {
public static void main(String[]args) {
//测试默认权限修饰符
SecondDemo demo=new SecondDemo();
demo.like="写作";
demo.toEat();
//4.初始化一个默认权限修饰的类
SecondDemo1 demo1=new SecondDemo1();
System.out.println(demo1.toString());
}
}
输出结果:
1.3测试public权限修饰符
package day08;
public class ThirdDemo {
//属性
public String name;
public int age;
//方法
public void printFormat() {
System.out.println(name+"\t"+age);
}
}package day08.test;
import day08.SecondDemo;
import day08.ThirdDemo;
public class TestDemo {
/**
* 不同包测试不同的类
* */
public static void main(String[]args) {
//1.初始化SecondDemo类
SecondDemo demo=new SecondDemo();
//2.访问demo属性
//demo.name="";//private 只能在同类中访问
//demo.like="";//默认 只能在同包使用
//demo.toEat();//默认 只能在同包使用
//3.初始化一个默认修饰符的类
//SecondDemo1 demo1=new SecondDemo1();
//在不同包中访问public 修饰的成员和类
ThirdDemo third=new ThirdDemo();
third.name="浪子一秋";
third.age=21;
third.printFormat();
}
}
package day08.test;
import day08.SecondDemo;
import day08.ThirdDemo;
public class TestDemo {
/**
* 不同包测试不同的类
* */
public static void main(String[]args) {
//1.初始化SecondDemo类
SecondDemo demo=new SecondDemo();
//2.访问demo属性
//demo.name="";//private 只能在同类中访问
//demo.like="";//默认 只能在同包使用
//demo.toEat();//默认 只能在同包使用
//3.初始化一个默认修饰符的类
//SecondDemo1 demo1=new SecondDemo1();
//在不同包中访问public 修饰的成员和类
ThirdDemo third=new ThirdDemo();
third.name="浪子一秋";
third.age=21;
third.printFormat();
}
}
输出结果:
2. JavaBean
package day08;
/**
* JavaBean 是一种JAVA语言写成的可重用组件(类).
* 1):类必须使用public修饰.
* 2):必须保证有公共无参数构造器,即使手动提供了带参数的构造器,也得提供无参数构造器..
* 3):包含了属性的操作手段(给属性赋值,获取属性值).
* */
public class UserBean {
//字段
private String name;
private int age;
private boolean sex;
//公开方法
//getter方法: 仅仅用于获取某一个字段存储的值.
//去掉get,把首字母小写,得到name1.此时name1才是属性.
public String getName() {
return name;
}
//setter方法: 仅仅用于给某一个字段设置需要存储的值.
public void setName(String name1) {
//this主要存在于两个位置:
//构造器中: 就表示当前创建的对象.
//方法中: 哪一个对象调用this所在的方法,那么此时this就表示哪一个对象.
this.name = name1;
}
public int getAge() {
return age;
}
public void setAge(int age1) {
this.age = age1;
}
//如果操作的字段是boolean类型的,此时不应该叫做getter方法,
//而是is方法,把 getName 变成 isName.
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
//默认构造方法
}
package day08;
public class UserBeanTestDemo {
public static void main(String[] args) {
// TODO 自动生成的方法存根
UserBean user=new UserBean();
user.setName("浪子一秋");
user.setAge(21);
user.setSex(true);
System.out.println("姓名:"+user.getName()+"年龄:"+user.getAge()+"性别:"+user.isSex());
}
}
输出结果:
3.this
/*
* this 表示当前对象.
* this主要存在于1个位置:方法中
* 构造方法中: 就表示当前创建的对象.
* 实例方法中: 哪一个对象调用this所在的方法,那么此时this就表示哪一个对象.
* 当一个对象创建之后,JVM会分配一个引用自身的引用:this.
*/
/*
* 使用this:
* ① 解决成员变量和参数(局部变量)之间的二义性,必须使用;
* ② 同类中实例方法间互调(此时可以省略this,但是不建议省略)。
* ③ 将this作为参数传递给另一个方法;
* ④ 将this作为方法的返回值(链式方法编程);
* ⑤ 构造器重载的互调,this([参数])必须写在构造方法第一行;
* ⑥ static不能和this一起使用;
* 当字节码被加载进JVM,static成员以及存在了.
* 但是此时对象还没有创建,没有对象,就没有this.
*/
3.1this主要存在于方法中
package day08.thisdemo;
public class UserDemo {
//属性
String name;
int age;
//方法
public void method() {
System.out.println("this==="+this);
//this.name="一叶知秋";
System.out.println(name+" "+age);
}
public static void method1() {
//this.name="name";
}
//默认构造方法
public UserDemo() {
this.name="剑侠情缘";
}
//入口方法
public static void main(String[]args) {
UserDemo.method1();
//初始化对象
UserDemo user=new UserDemo();
//user.name="尊";
user.age=21;
user.method();
System.out.println("user==="+user);
//初始化对象
UserDemo user1=new UserDemo();
user1.name="安娜";
user1.age=18;
user1.method();
System.out.println("user1==="+user1);
}
}
输出结果:
3.2通过this 解决成员变量和局部变量的二义性
package day08.setinit;
public class User {
//属性
private String name;
private int 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 User() {
}
public User(String name,int age) {
//通过this 解决成员变量和局部变量的二义性
this.name=name;
this.age=age;
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
//初始化对象 赋值 两种方式
//1. 通过setter注入
User user=new User();
user.setName("浪子一秋");
user.setAge(21);
System.out.println("name=="+user.getName()+"\nage=="+user.getAge());
//2.通过构造方法直接调用带参数的构造器,创建出来的对象,就有了初始值.
User user1=new User("尊",20);
System.out.println("name=="+user1.getName()+"\nage=="+user1.getAge());
/**
*总结:
* 初始化对象的时候,对象的属性比较少的情况下,我们通过构造方法给对象的属性进行赋值
* 如果对象的属性比较多的情况下,最好通过setter注入的方式进行赋值
*/
}
输出结果:
3.3同类中实例方法间互调
package day08.thisdemo;
public class ThisDemo2 {
//同类中实例方法间互调(此时可以省略this,但是不建议省略)。
public void method1() {
System.out.println("唯我独尊");
this.method2();//调用方法
}
public void method2() {
System.out.println("葬剑山庄");
this.method3();
}
public void method3() {
System.out.println("葬剑灬尊");
//this.method1();
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
//初始化对象
ThisDemo2 demo2=new ThisDemo2();
demo2.method1();
}
}
输出结果:
3.4将this作为方法的返回值
package day08.thisdemo;
public class ThisDemo3 {
//将this作为方法的返回值(链式方法编程);
public void method1() {
System.out.println("确认过的眼神");
}
//定义一个方法 有返回值
public ThisDemo3 method2() {
//处理一个操作
System.out.println("你不是对的人");
//将当前对象返回
return this;
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
//初始化对象
ThisDemo3 demo3=new ThisDemo3();
System.out.println(demo3);
//ThisDemo3 demo32=demo3.method2();
//demo32.method1();
demo3.method2().method1();//链式语法编程
//System.out.println();
}
输出结果:
3.5将this作为参数传递给另一个方法
package day08.thisdemo;
public class ThisDemo4 {
//将this作为参数传递给另一个方法;
//属性
private String name;
static class Operation{
//接收一个对象 给对象的的name赋值
public static void setValues(ThisDemo4 demo4) {
demo4.setName("安娜");
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void method1() {
//获取this 将this作为参数 传递给另一个方法
Operation.setValues(this);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
//初始化对象
ThisDemo4 demo4=new ThisDemo4();
demo4.method1();
System.out.println(demo4.getName());
}
}
输出结果:
3.6构造器重载的互调,this([参数])必须写在构造方法第一行
package day08.thisdemo;
public class ThisDemo5 {
//构造器重载的互调,this([参数])必须写在构造方法第一行;
//构造方法重载
//构造方法只有在对象初始化的时候才会调用一次
//构造方法重载,构造方法也是每次只能显示直接调用一个
public ThisDemo5() {
System.out.println("默认构造方法");
}
public ThisDemo5(String name) {
this();
System.out.println("1个参数的构造方法");
}
public ThisDemo5(String name,int age) {
this(name);//一个参数
System.out.println("2个参数的构造方法");
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
//初始化对象
//ThisDemo5 demo5=new ThisDemo5();//调用默认的
//ThisDemo5 demo5=new ThisDemo5("尊");
ThisDemo5 demo5=new ThisDemo5("尊",21);
}
}
输出结果:
4.综合练习
package day08;
import java.util.Scanner;
class Point{
//属性
private double x;
private double y;
public double getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public double getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
class Distance{
public void distance(double r) {
//实例化对象
Point point =new Point();
//赋值
point.setX(-3);
point.setY(-4);
//计算两点之间的距离
double d=Math.sqrt(point.getX()*point.getX()+point.getY()*point.getY());
//判断点和圆的关系
if(d>r){
System.out.println("点在圆外");
}else if (d==r) {
System.out.println("点在圆上");
}else if(d<r){
System.out.println("点在圆内");
}
}
}
public class Circular {
public static void main(String[] args) {
// TODO 自动生成的方法存根
//Point point=new Point();
//初始化键盘录入对象
Scanner in=new Scanner(System.in);
System.out.print("r==:");
double r=in.nextDouble();
//初始化对象
Distance dist=new Distance();
//调用方法进行判断
dist.distance(r);
}
}
输出结果:
5.知识框架