今日所学:1.复习构造函数的定义和一些注意事项 (知识点的复习)
2.通过写代码来学习this引用 和注意事项
this代表当前实例 this可引用实例变量,实例函数,以及类的构造函数
this();引用无参构造函数 注:引用构造函数时,必须放在第一行
this(参数);引用有参构造函数
3.static 修饰
1)static修饰的变量称为类变量 修饰的方法称为类方法 (也称静态方法) 与之对应的实例方法也称为非静态方法
注:实例方法可以调用静态方法 但是静态方法不能调用实例方法
2)静态块 static{ } 在执行时首先被执行 作用:<1>对某些数据初始化。<2>用来做数据库链接
4.访问权限
1)public 公有的
2)private 私有的
3)protected 受保护的
4)默认的 即前面没有修饰权限
注:[1]变量和方法的访问权限有1)、2)、3)、4)
[2]类的访问权限只有1)、4)
5.类的继承
1)声明 :class 子类名 extends 父类名{}
2)子类只能继承父类的非私有变量和方法
6.如何使用其他包中的类
说明:在用eclipse写代码时代码旁边的注释包括一些相关比较详细的知识点,以上所陈述为所学知识点的总结 还有今天讲的知识点特别杂 包含以前的一些知识 和一些小的可能对写代码有用的小的容易忽略的知识点。
个人反思:知识点需要经常结合代码来看,来练否则在老师进行讲解时会有一种一知半解的感觉。
以下为代码截图和代码文本
package com;
public class Student {
public long idNum;//实例变量
public String name;
private static long nextId=0;//静态(类)变量 用来给新创建的对象赋予一个Id 同时统计学生的人数
public Student(){
nextId++;
}
public Student(long id,String name){
//nextId++;
//this();//使用 this 来调用无参构造函数
this(id);//将形式参数id 传递给有参的构造函数 实现数据初始化
//this.idNum=id;//this 代表当前实例
this.name=name;
}
public Student(long id){
this();//this 调用构造函数 必须放到构造函数第一句
this.idNum=id;
}
public static long getId(){//静态方法 要使用类来直接引用
return nextId;
}
/**
* @param args
*/
//本实例演示构造函数写法和this引用当前实例进行数据初始化的方法
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
package com;
public class TestStudent {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Student st=new Student();
System.out.println(Student.getId());
Student st2=new Student(20,"zhang san");
System.out.println(Student.getId());
Student st3=new Student(120);
System.out.println(Student.getId());
Student st4=new Student(230,"zhaoliu");
System.out.println("st4的姓名"+st4.name+"idNum:"+st4.idNum+"序号:"+Student.getId());
System.out.println(Student.getId());
new Student();//nextId也在自增
System.out.println(Student.getId());
}
}
package com;
public class TestStatic {
// Static 及其用法 Static 修饰的变量为类变量(静态变量) 修饰的方法称为类方法(静态方法) 修饰的语句块为静态块
public TestStatic(){
System.out.println("执行构造函数!");
}
public static int stvar;
static {//定义一个静态块 静态块最早被执行
System.out.println("这是一个静态块!");
}
public static void stfunction(){
System.out.println("这是一个静态函数!");
}
public void function(){
System.out.println("这是一个实例方法!");
stfunction();//实例方法可以直接调用静态方法(类方法)
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
stfunction();//静态函数可以在静态函数中调用
//function(); 静态方法不能直接调用非静态方法(实例方法) 要调用实例方法必须 先 构造对象 然后由对象来调用它自己的方法
new TestStatic();
}
}
package com;
public class TestPrivate {
//测试访问权限 使用 IDE(集成开发环境)的好处 当变量不可见时 会自动显示错误信息
/*几个访问权限
* private私有的 public公有的 protected 受保护的 前面没有修饰权限,则是默认的
* private修饰的变量再 本类中是可见的 在本类之外是不可见的
* public 修饰的变量再 本类中是可见的 在本类之外是可见的
* 默认的访问权限 在本包是可见的
*/
private int privateint;
public int publicint;
int defaultint;//默认的访问权限
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TestPrivate t= new TestPrivate();
t.privateint=20;
t.publicint=30;
}
}
class A{
public void f(){
TestPrivate t= new TestPrivate();
// t.privateint=30;The field TestPrivate.privateint is not visible
t.publicint=40;
}
}
package com.cn;
//import com.Student;//使用其他包中的类一定要先导入
//导入方法 1.直接导入包名.类名 2.导入该包中所有的类 包名.*
import com.*;
//快捷修复错误提示 快捷键ctrl+1
//类的访问权限 除了导入使用的类 还要注意类的访问权限 类的访问权限 只有public 和 默认
//所以一个文件要有多个类 只能有一个类是public 其他的必须是默认的类 即不能再加public权限修饰
public class TestClass {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Student st=new Student();
TestPrivate tp=new TestPrivate();
}
}
class a{
}
package com;
public class TestExtends {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SuberClass sub=new SuberClass();
sub.printvar();
sub.superfuction();
}
}
class SuperClass{//定义一个超类 又叫父类
int superint;
private int superprivate;
public SuperClass(){
this.superint=20;
}
public void superfuction(){
System.out.println("执行父类的函数");
}
}
class SuberClass extends SuperClass{//子类SuberClass继承父类SuperClass
//子类可以继承父类的非私有变量和方法,私有的是不能被继承的
public void printvar(){
System.out.println("输出到继承的变量"+superint);
//System.out.println("输出到继承的变量"+superprivate); 私有变量不会被继承 The field SuperClass.superprivate is not visible
}
}