打断点(找bug时会用即可)
public class Demo1 {
public static void main(String[] args) {
House house = new House();
house.id = "1";
house.name = "别墅";
System.out.println(house.toString());
}
}
public class House {
String id;
static String name = null;
public House() {
}
}
打断点:会在运行这个代码之前中断一下,按笔直向下的箭头一步步执行
观看this和对象的地址是不是一个:
this的地址:
对象house的地址:
查看static是不是提前加载:
public class Demo2 {
public static void main(String[] args) throws ClassNotFoundException {
Class.forName("com.jr.curriculum.House");//这里打断点
System.out.println("程序结束");
}
}
this关键字(会用即可)
背下面干货分享
public class House {
String id;
static String name = null;
public House() {
name = name+"1";
}
public House(String id, String name) {
this.id = id;
this.name = name;
}
public String show(){
return name;
}
}
public class Demo1 {
public static void main(String[] args) {
House house = new House();
house.id = "1";
house.name = "别墅";
System.out.println(house.toString());
}
/*
【this关键字】:代表当前程序正在操作的对象
一个对象对应一个this
用途:
1.this.属性:当前方法/代码块里,有同名局部变量存在,此时想要调用同名的成员变量,需要this.成员变量(例如有参构造就是)
//2.this.方法():本类下,普通方法之间互相调用的时候,可以使用this.方法(),可以直接方法()
3.this():本类下,构造方法之间互相调用的时候,必须使用this([参数列表])进行调用,还要满足必须是第一行
*/
}
当属性名字和形参发生重名的时候,或者 属性名字 和局部变量重名的时候,都会发生就近原则
static关键字(理解)
背下面干货分享
public class Demo2 {
public static void main(String[] args) throws ClassNotFoundException {
Class.forName("com.jr.curriculum.House");//映射
House house = new House();
// System.out.println(house.name);//不要这样用
System.out.println(House.name);//应该类名.调用
House house1 = new House();
House house2 = new House();
House house3 = new House();
System.out.println(house1.show());//静态资源共享
System.out.println(house3.show());//静态资源共享
}
/*
【static关键字】:代表当前对象所在的类
特点:
1.提前加载到内存中,类第一次加载前,将静态信息加载到内存里,并且在构造前调用
2.该类下,所有对象 共享静态资源
3.规范来说调用应该:类名.静态变量/静态方法()
4.静态资源存放在静态域里,(非静态资源存放在堆内存里)
用途:
1.修饰属性:成员变量(类变量)
2.修饰方法:1)public和static不分先后顺序
2)静态方法不能调用非静态属性和非静态方法
3)静态方法不能使用this关键字
3.修饰代码块
4.修饰内部类//继承后讲
*/
}
代码块(了解,方便看源码)
public class Demo3_Teacher {
public Demo3_Teacher() {
System.out.println("使用无参构造器创建对象");
}
{//构造代码块
System.out.println("构造代码块被执行");
}
static {//静态代码块
System.out.println("静态代码块被执行");
}
}
public class Demo3 {
public static void main(String[] args) {
{//普通代码块
int i = 9;
for (; i < 1; i++) {
System.out.println(i);
}
}
int i = 0;
Demo3_Teacher teacher = new Demo3_Teacher();
}
/*
类的组成:属性,方法,构造方法,代码块,内部类
【代码块】(又叫结构快)
作用:划分作用域 由{}组成
分类: 位于: 目的:
普通代码块:位于方法中的代码块 划分局部变量的作用范围
构造代码块:位于类里,方法外 类似构造器(实例化、初始化)
构造代码块随着构造函数的执行而执行
静态代码块:位于类里,方法外 加载完静态变量后,对静态变量做逻辑处理
同步代码块://后面多线程学
执行顺序:静态变量加载后->静态代码块->创建对象->构造代码块->构造方法
*/
}
包(了解)
package com.jr.curriculum;//当前文件在该包下
import java.util.Scanner;
import static java.lang.Math.*;//静态导入 只能导入包里的全部类,加载里面的资源
//import static java.lang.*;
public class Demo4 {
int num;//默认权限修饰符,只能在本包里使用
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println(PI);
System.out.println(random());
}
/*
【包】
作用:
1.分门别类存储文件,查找效率高
2.区分同名类
3.解决权限问题:
默认权限修饰符:本包下的类可以使用默认属性/方法
命名规则:
1.名字全小写
2.可以用.隔开,表示包的包含关系
3.一般都是公司域名倒着写 : com.jd
4.不能使用系统关键字:cul、con、com1...com9
包的声明:
package com.jr.curriculum;//包声明语句一般在非注释代码的第一行
导包:alt+enter
import java.util.Scanner;//import 全部包名.类名;
导包方式:
1.默认导包:系统自动帮忙导入 java.lang包下所以类(例:System、Stirng)
2.关键字导包:import 全部包名.类名; import 全部包名.*;
3.手动导入包:java.sql.Date dt = new java.sql.Date();
4.静态导包:当前类下所有资源信息都是静态的import static java.lang.Math.*;
5.导包时候,* 不代表 子包;import com.jr.*; // 导包语句里:* 全部类,类里面的全部资源
*/
}
封装(理解)
IDEA快捷键:alt+insert->get和set
public class Demo5 {
public static void main(String[] args) {
Demo5_Student student = new Demo5_Student();
student.setAge(200000000);
System.out.println("学生的年龄是:"+student.getAge());
Demo5_Student stu = new Demo5_Student("12","惠常哲",999999999);
System.out.println(stu.getName()+"的年龄是:"+stu.getAge());
}
/*
面向对象三大特征之一:封装、继承、多态[、接口]封装为了安全、继承为了重用、多态为了扩展(更厉害的是反射)
【封装】
好处:提高代码的安全性
步骤:私有属性,公有方法
属性的复制方式:构造器赋值、set方法赋值
*/
}
public class Demo5_Student {
private String id;//私有属性
private String name;
private int age;
public Demo5_Student(String id, String name, int age) {
this.id = id;
this.name = name;
setAge(age);//注意这里!!!!!!!!!!!!!!!!!!!!!!!!!
}
public Demo5_Student() {//公有方法
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 100){
this.age = 18;
}else {
this.age = age;
}
}
}
在初始化时就岁恶意的赋值进行判断
其他(重点)
封装的好处:
提高代码的安全性,是隐私的属性,公有的方法
this关键字的作用
this是对象内部指代自身的引用
-
this可以调用成员变量,通常用于解决成员变量和局部变量同名冲突
-
this可以调用成员方法
-
同一个类中this可以在构造方法中调用重载的构造方法,且必须是构造方法的第一条语句。
同一个类中的方法可以互相调用,this.可以省略不写。
static特点:
1.提前加载到内存中
,类第一次加载前,将静态信息加载到内存里,并且在构造前调用
2.该类下,所有对象共享静态资源
3.规范来说调用应该:类名.静态变量/静态方法()
4.静态资源存放在静态域(方法区)里
,(非静态资源存放在堆内存里)
static用途:
1.修饰属性:成员变量(类变量)
2.修饰方法:
1)public和static不分先后顺序
2)静态方法不能调用非静态属性和非静态方法
3)静态方法不能使用this关键字